Почему в определенной строке отображаются данные другого столбца в c#? - PullRequest
0 голосов
/ 04 августа 2020

Я хочу записать certain column из input file в output file. Мой код выглядит так:

try
        {
            using (StreamWriter file = new StreamWriter(@"outputfile.csv", true))
            {
                string[] lines;
                file.WriteLine("Date,Entity, ProdFamily, ProdGroup, ProdType1, ProdTypo, ProdType, Currency, InternalFlag, B/S");
                lines = System.IO.File.ReadAllLines(@"inputfile.csv";
                    foreach (string line in lines)
                    {
                        if (line != lines[0])
                        {   
                            string[] values = line.Split(',');
                            file.WriteLine("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9}",
                                    values[43], values[0], values[11], values[12], values[13], values[15], values[14], values[28], values[22], values[9]);                  
                        }
                    }
            }
        }

Я получаю error, это некоторые из row показывают other column's data. Например, в первом столбце первой строки отображается N, тогда как должно отображаться 1-Jun-20.

enter image description here

This is the part of input file that is being used for example above.

введите описание изображения здесь

Я пытаюсь выполнить жесткое кодирование, изменив индекс столбца для дефектной строки, например, изменив values[43] на values[43+2], но это просто создает другие неожиданные данные. Пожалуйста, помогите мне.

1 Ответ

2 голосов
/ 04 августа 2020

Ваш входной файл содержит запятые в некоторых ячейках: введите описание изображения здесь

В CSV это будет представлено следующим образом:

...,BL,"BR BSS PLC,WB,",NA,...

Ваш код разделения обрабатывает каждую из этих запятых одинаково, без учета того, цитируются они или нет:

string[] values = line.Split(',');

Вам следует использовать библиотеку синтаксического анализа CSV вместо того, чтобы пытаться проанализировать ее самостоятельно.

...