Как прочитать файл CSV в C #, который не имеет значения в одном столбце? - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь прочитать CSV-файл в коде C # в качестве примера здесь. Этот CSV-файл содержит три столбца, из которых один столбец не имеет значения в нескольких строках. Так что это рассматривается как новая строка с обратной косой чертой (\ ") в C # StreamReader. Когда я открываю файл в Notepad ++, он показывает как изображение ниже:

enter image description here

Но в MS Excel в этом столбце ничего не отображается, как показано на изображении ниже

enter image description here

Здесь и Notepad ++, и MS Excel показывают данные по-разному. В Notepad ++ это показывает "", где в Excel это показывает пустое значение. Всякий раз, когда мы читаем файл через код C # ниже, он принимает формат, как показано в Notepad ++.

Считайте код CSV

    protected List<string> ReadFile(string filePath)
    {
        List<string> content = new List<string>();
        using (StreamReader csvReader = new StreamReader(filePath))
        {
            string line = string.Empty;

            while ((line = csvReader.ReadLine()) != null)
            {
                if (line.Trim().Length > 0)
                {
                    if (line.Count(x => x == ',') >= 1)
                    {
                        content.Add(line);
                    }
                }
            }

        }

        return content;
    }

В настоящее время он сокращает текущую строку в C # и перемещается во второй итерации цикла.

пожалуйста, смотрите эти скриншоты:

1) С полными данными

enter image description here

2) С пустыми данными строка разбита на 2 части, это часть 1

enter image description here

3) С пустыми данными строка разбита на 2 части, это часть 2

enter image description here

Ожидаемый O / P: он должен рассматривать его как одну строку в коде C #.

Как мне справиться с этим сценарием в коде C #?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Я думаю, этот код поможет вам. Вы можете настроить его в соответствии с вашими потребностями:

private static DataTable GetDataTabletFromCSVFile1(string csv_file_path1)
  {

   DataTable table2 = new DataTable("Real");

   try
   {
    using (TextFieldParser csvReader1 = new TextFieldParser(csv_file_path1))
    {
     csvReader1.SetDelimiters(new string[] { "," });
     csvReader1.HasFieldsEnclosedInQuotes = true;
     string[] colFields = csvReader1.ReadFields();

     foreach (string column in colFields)
     {
      DataColumn datecolumn2 = new DataColumn(column);
      datecolumn2.AllowDBNull = true;
      table2.Columns.Add(datecolumn2);
     }

     while (!csvReader1.EndOfData)
     {
      string[] fieldData1 = csvReader1.ReadFields();
      table2.Rows.Add(fieldData1);
     }
    }

    foreach (DataRow dr in table2.Rows)
    {
     foreach (DataColumn dc in table2.Columns)
     {
      if (string.IsNullOrEmpty(dr[dc.ColumnName].ToString()))
      {
       dr[dc.ColumnName] = DBNull.Value;
      }
     }
    }

   }
   catch (Exception ex)
   {
    MessageBox.Show("Select New File");
   }

   return table2;

  }
0 голосов
/ 08 января 2019

Использование String :: Split В качестве разделителей указывайте как запятую, так и символы новой строки, а в опции не указывайте пустые значения.

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