Написание парсера CSV на C # - PullRequest
0 голосов
/ 14 ноября 2018

Я недавно начал работу над проектом, который ищет в CSV-файле дубликаты записей и предоставляет пользователю возможность удалить одну или обе записи.

Это кажется достаточно простым, однако у меня возникла проблема с функцией, которая фактически анализирует файл CSV в памяти.

Вот код, о котором идет речь ...

using System;
using System.IO;
using Microsoft.VisualBasic.FileIO;
using System.Collections.Generic;
using System.Windows.Forms;


public List<string[]> parseCSV(string path)
{
    List<string[]> parsedData = new List<string[]>();
    string[] fields;

    TextFieldParser parser = null;
    string line = parser.ReadLine();

    try
    {
        /*TextFieldParser*/ parser = new TextFieldParser(@"c:\temp\test.csv");
        parser.TextFieldType = FieldType.Delimited;
        parser.SetDelimiters(",");

        while (!parser.EndOfData)
        {
            fields = parser.ReadFields();
            parsedData.Add(fields);

            //Did more stuff here with each field.
        }

        parser.Close();

    }
    catch (Exception e)
    {
        MessageBox.Show(e.Message);
    }

   return parsedData;
}

По какой-то причине в VS2017 parseCSV подчеркнуто красным в объявлении функции. Я не могу понять, почему это так. Я пробовал очевидные исправления, такие как изменение имени функции с parseCSV на что-то другое, но этого явно не произошло.

1 Ответ

0 голосов
/ 14 ноября 2018

В C # все содержится в классе, вы не можете просто объявить метод непосредственно в пространстве имен.

using System;
using System.IO;
using Microsoft.VisualBasic.FileIO;
using System.Collections.Generic;
using System.Windows.Forms;

class MyLearningOnlyCsvParser {

  public List<Customer_Data> parseCSV(string path)
  {
    List<Customer_Data> parsedData = new List<Customer_Data>();
    string[] fields;

    TextFieldParser parser = null;
    string line = parser.ReadLine();

    try
    {
        /*TextFieldParser*/ parser = new TextFieldParser(@"c:\temp\test.csv");
        parser.TextFieldType = FieldType.Delimited;
        parser.SetDelimiters(",");

        while (!parser.EndOfData)
        {
            fields = parser.ReadFields();

            // assume the CSV is always with  11 columns
            if(fields.length == 11) {
                Customer_Data newData = new Customer_Data();
                newData.name = fields[0];
                newData.company = fields[1];
                // assign to the rest of the customer data properties with each fields
                parsedData.Add(newData);
            }
            else {
                // error handling of not well formed CSV
            }

        }

        parser.Close();

    }
    catch (Exception e)
    {
        MessageBox.Show(e.Message);
    }

   return parsedData;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...