Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I have an API that loops through addresses and cleanses them. I am testing it with about 40k addresses, and it takes several hours to loop through thousands of them. Sometimes it throws an error and closes out the application and I have to start it over. Is there a way that I can write in error handling into the catch, that if there is an error, it will just log it, but continue running the app?

I am using VS 2019, C#, Windows Forms.

public class Elements
    {
        public string streetaddress1 { get; set; }
        public string streetaddress2 { get; set; }
        public string city { get; set; }
        public string state { get; set; }
        public string zip { get; set; }
        public string country { get; set; }
    }

   void Output(string strDebugText)
        {
            try
            {
                System.Diagnostics.Debug.Write(strDebugText + Environment.NewLine);
                txtResponse.Text = txtResponse.Text + strDebugText + Environment.NewLine;
                txtResponse.SelectionStart = txtResponse.TextLength;
                txtResponse.ScrollToCaret();
            
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.Write(ex.Message, ToString() + Environment.NewLine);
            }
        }

private void btnMultiple_Click(object sender, EventArgs e)
    {

        //Loads address that need to be cleansed 
        string filePath = @"C:data.csv";
        List<Elements> addresses = new List<Elements>();
        List<string> lines = File.ReadAllLines(filePath).ToList();
        

        foreach (var line in lines)
        {
            string[] entries = line.Split(',');

            Elements newElement = new Elements();

            newElement.streetaddress1 = entries[0];
            newElement.streetaddress2 = entries[1];
            newElement.city = entries[2];
            newElement.state = entries[3];
            newElement.zip = entries[4];

   addresses.Add(newElement);
                 
        }

foreach (var Element in addresses)
        {
            Output($"{ Element.streetaddress1 } { Element.city} { Element.state } { Element.zip } " +
                $"{ Element.country }");
            var venvMulti = new AreaLookup.VertexEnvelope();
            var clientMulti = new AreaLookup.LookupTaxAreasWS90Client();
            var reqMulti = new AreaLookup.TaxAreaRequestType();
            var reqresMulti = new AreaLookup.TaxAreaResultType();
            var resMulti = new AreaLookup.TaxAreaResponseType();
            string inputXMLMulti;
            string outputXMLMulti;
            var TALMulti = new AreaLookup.TaxAreaLookupType();
            var TALasofDateMulti = new DateTime();
            var resTypeMulti = new AreaLookup.TaxAreaLookupResultType();
            var postalMulti = new AreaLookup.PostalAddressType();
            string StrNoteMulti = "";
            int i, y;
            var x = default(int);

            postalMulti.MainDivision = Element.state;
            postalMulti.City = Element.city;
            postalMulti.PostalCode = Element.zip;
            postalMulti.StreetAddress1 = Element.streetaddress1;
            TALasofDateMulti = Conversions.ToDate("2020-12-11");
            TALMulti.asOfDate = TALasofDateMulti;
            TALMulti.Item = postalMulti;
            reqMulti.TaxAreaLookup = TALMulti;
            var LITMulti = new AreaLookup.LoginType();
            venvMulti.Login = new AreaLookup.LoginType();
            venvMulti.Login.UserName = "****";
            venvMulti.Login.Password = "****";
            venvMulti.Item = reqMulti;

            inputXMLMulti = (string)SerializeObjectToString(venvMulti);
            Output(inputXMLMulti);

            try
            {
                clientMulti.LookupTaxAreas90(ref venvMulti);
                resMulti = (AreaLookup.TaxAreaResponseType)venvMulti.Item;
                outputXMLMulti = (string)SerializeObjectToString(venvMulti);
                Output(outputXMLMulti);
               

                var loopTo = resMulti.TaxAreaResult.Length - 1;
                                      
                
            }
            catch (NullReferenceException)
            {
                Console.WriteLine("Null");
            }
            
            reqMulti = default;
            reqresMulti = default;
            resMulti = default;

            void debugOutputCleansedMulti(string strDebugTextCleansedMulti)
            {
                try
                {
                    System.Diagnostics.Debug.Write(strDebugTextCleansedMulti + Environment.NewLine);
                    txtCleansed.Text = txtCleansed.Text + strDebugTextCleansedMulti + Environment.NewLine;
                    txtCleansed.SelectionStart = txtCleansed.TextLength;
                    txtCleansed.ScrollToCaret();
                   
                }
                catch (Exception ex)
                {
                    System.Diagnostics.Debug.Write(ex.Message, ToString() + Environment.NewLine);
                }
            }

            debugOutputCleansedMulti("Address Cleanse Started: ");
            var venvCleansedMulti = new AreaLookup.VertexEnvelope();
            var clientCleansedMulti = new AreaLookup.LookupTaxAreasWS90Client();
            var reqCleansedMulti = new AreaLookup.TaxAreaRequestType();
            var reqresCleansedMulti = new AreaLookup.TaxAreaResultType();
            var resCleansedMulti = new AreaLookup.TaxAreaResponseType();
            string inputXMLCleansedMulti;
            string outputXMLCleansedMulti;
            var TALCleansedMulti = new AreaLookup.TaxAreaLookupType();
            var TALasofDateCleansedMulti = new DateTime();
            var resTypeCleansedMulti = new AreaLookup.TaxAreaLookupResultType();
            var postalCleansedMulti = new AreaLookup.PostalAddressType();
            string StrNoteCleansedMulti = "";
            int a, b;
            var c = default(int);

            postalCleansedMulti.MainDivision = Element.state;
            postalCleansedMulti.City = Element.city;
            postalCleansedMulti.PostalCode = Element.zip;
            postalCleansedMulti.StreetAddress1 = Element.streetaddress1;
            TALasofDateCleansedMulti = Conversions.ToDate("2020-12-11");
            TALCleansedMulti.asOfDate = TALasofDateCleansedMulti;
            TALCleansedMulti.Item = postalCleansedMulti;
            reqCleansedMulti.TaxAreaLookup = TALCleansedMulti;
            var LITCleansedMulti = new AreaLookup.LoginType();
            venvCleansedMulti.Login = new AreaLookup.LoginType();
            venvCleansedMulti.Login.UserName = "****";
            venvCleansedMulti.Login.Password = "****";
            venvCleansedMulti.Item = reqCleansedMulti;
            int j = 1;

            //inputXMLCleansed = resCleansed.TaxAreaResult[0].PostalAddress[0].StreetAddress1 + " - " + resCleansed.TaxAreaResult[0].PostalAddress[0].PostalCode + " - " + resCleansed.TaxAreaResult[0].confidenceIndicator;
            //debugOutputCleansed(inputXMLCleansed);

            try
            {
                clientCleansedMulti.LookupTaxAreas90(ref venvCleansedMulti);
                resCleansedMulti = (AreaLookup.TaxAreaResponseType)venvCleansedMulti.Item;
                debugOutputCleansedMulti(resCleansedMulti.TaxAreaResult[0].PostalAddress[0].StreetAddress1 + " | Street Address 1" + Environment.NewLine +
                    resCleansedMulti.TaxAreaResult[0].PostalAddress[0].StreetAddress2 + " | Street Address 2" + Environment.NewLine +
                    resCleansedMulti.TaxAreaResult[0].PostalAddress[0].SubDivision + " | County" + Environment.NewLine +
                    resCleansedMulti.TaxAreaResult[0].PostalAddress[0].City + " | City" + Environment.NewLine +
                    resCleansedMulti.TaxAreaResult[0].PostalAddress[0].PostalCode + " | Zip Code" + Environment.NewLine +
                    resCleansedMulti.TaxAreaResult[0].PostalAddress[0].MainDivision + " | State" + Environment.NewLine +
                    resCleansedMulti.TaxAreaResult[0].confidenceIndicator + " | Confidence Indicator");

                
                
                string pathCleansed = @"C:devdatadata.csv";
                string[] createText = { 
                        resCleansedMulti.TaxAreaResult[0].PostalAddress[0].StreetAddress1 + "," +
                        resCleansedMulti.TaxAreaResult[0].PostalAddress[0].StreetAddress2 + "," +
                        resCleansedMulti.TaxAreaResult[0].PostalAddress[0].City + "," +
                        resCleansedMulti.TaxAreaResult[0].PostalAddress[0].MainDivision + "," +
                        resCleansedMulti.TaxAreaResult[0].PostalAddress[0].PostalCode + "," +
                        resCleansedMulti.TaxAreaResult[0].PostalAddress[0].Country + "," + 
                        resCleansedMulti.TaxAreaResult[0].PostalAddress[0].SubDivision + "," +                      
                        resCleansedMulti.TaxAreaResult[0].confidenceIndicator
                     };
                File.AppendAllLines(pathCleansed, createText, System.Text.Encoding.UTF8);

                txtCounter.Text = j.ToString();
                j++;

                var loopTo = resCleansedMulti.TaxAreaResult.Length - 1;
                for (b = 0; b <= loopTo; b++)
                {
                    if (c == 0)
                    {
                        StrNoteCleansedMulti = resCleansedMulti.TaxAreaResult[b].PostalAddress[0].StreetAddress1 + " - " + resCleansedMulti.TaxAreaResult[b].confidenceIndicator; c = 1;

                        
                    }
                    else
                    {
                        StrNoteCleansedMulti += ", " + resCleansedMulti.TaxAreaResult[b].taxAreaId + " - " + resMulti.TaxAreaResult[b].confidenceIndicator;
                    }

                    
                }

                


            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.Write(ex.Message, ToString() + Environment.NewLine);
            }
            reqCleansedMulti = default;
            reqresCleansedMulti = default;
            resCleansedMulti = default;

        }

    }

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
156 views
Welcome To Ask or Share your Answers For Others

1 Answer

Essentially you need a way to save your work in progress. One pattern would be to load the file and store it in a database, then as you process each line you mark off which item you have processed. If you did this I would split the code into different modules, importing file, processing file, and exporting results.

Another simpler approach might be to write the results out as you process them, and record the line number from the input file. Then if you have to restart, find the last line you output and use that to skip reprocessing the items in your input file


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...