Search code examples
c#csvstringreadertextfieldparser

Parsing CSV data


I am trying to parse a CSV file with data with no luck, i have tried a bunch of tools online and none has been able to parse the CSV file correctly. I am baffled by the fact that i am in here asking for help as one would think parsing CSV data would be something super easy.

The format of the CSV data is like this:

",95,54070,3635,""Test Reservation"",0,102,0.00,0.00,2014-12-31,""Name of customer"",""$12.34 + $10, special price"",""extra information"",,CustomerName,,,,,1234567890,[email protected],CustomerName,2014-12-31,23:59:59,16,0,60,2,120,0,NULL,NULL,NULL,"

Current code:

private void btnOpenFileDialog_Click(object sender, EventArgs e)
    {
        DialogResult result = openFileDialog1.ShowDialog();

        if (result == DialogResult.OK)
        {
            using (StreamReader reader = new StreamReader(openFileDialog1.FileName))
            {
                string line;

                while ((line = reader.ReadLine()) != null)
                {
                    ParseCsvLine(line);
                }
            }
        }
    }

    private void ParseCsvLine(string line)
    {
        if (line != string.Empty)
        {
            string[] result;

            using (var csvParser = new TextFieldParser(new StringReader(line)))
            {
                csvParser.Delimiters = new string[] { "," };

                result = csvParser.ReadFields();
            }

            foreach (var item in result)
            {
                Console.WriteLine(item + Environment.NewLine);
            }
        }
    }

The result variable only has one item and its:

,95,54070,3635,"Test Reservation",0,102,0.00,0.00,2014-12-31,"Name of customer","$12.34 + $10, special price","extra information",,CustomerName,,,,,1234567890,[email protected],CustomerName,2014-12-31,23:59:59,16,0,60,2,120,0,NULL,NULL,NULL,

Solution

  • // Add Microsoft.VisualBasic.dll to References.
    using Microsoft.VisualBasic.FileIO; 
    
    // input is your original line from csv.
    
    // Remove starting and ending quotes.
    input = input.Remove(0, 1);
    input = input.Remove(input.Length - 1);
    
    // Replace double quotes with single quotes.
    input = input.Replace("\"\"", "\"");
    
    string[] result;
    using (var csvParser = new TextFieldParser(new StringReader(input)))
    {
        csvParser.Delimiters = new string[] { "," };
        result = csvParser.ReadFields();
    }