C# Пока l oop пропуск первой строки при разборе csv - PullRequest
0 голосов
/ 17 февраля 2020

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

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

Первая проблема, с которой я сталкиваюсь, заключается в том, что мой l oop начинает читать со строки 2. Это потому, что TextFieldParser предполагает наличие заголовка?

Вторая проблема заключается в том, что мои операторы if, кажется, оцениваются неправильно. Если я изменяю порядок строк в файле, мой первый, если в порядке, должен анализировать строки «Освещение» (независимо от того, какие строки в файле содержат «Освещение»).

Как примечание, я работаю в среде net 3,5

Вот что я получил до сих пор:

namespace CSV_Handler_Console
{
    public class Program
    {

        public static void Main(string[] args)
        {
            //Console.WriteLine("Press Enter");

            string filePath  = "C:\\Users\\chris\\Desktop\\ConfigFile.csv";



            string subLight = "Lighting";
            string subPin = "PIN";
            string subProc = "Processor";
            string subFab = "Fabuloso";
            string subQuirky = "Quirky";

            //string[] fields = csvParser.ReadFields();
            string category = string.Empty;
            string index = string.Empty;
            string load1 = string.Empty;
            string load2 = string.Empty;
            string load3 = string.Empty;
            string load4 = string.Empty;
            string value = string.Empty;

            string light1 = string.Empty;
            string light2 = string.Empty;
            string light3 = string.Empty;
            string pin = string.Empty;
            string processor1 = string.Empty;
            string processor2 = string.Empty;
            string processor3 = string.Empty;
            string processor4 = string.Empty;
            string processor5 = string.Empty;
            string processor6 = string.Empty;
            string processor7 = string.Empty;
            string processor8 = string.Empty;
            string display1 = string.Empty;
            string display2 = string.Empty;
            string display3 = string.Empty;
            string display4 = string.Empty;
            string display5 = string.Empty;
            string display6 = string.Empty;
            string display7 = string.Empty;
            string display8 = string.Empty;


            var path = String.Format("{0}", filePath);

            using (TextFieldParser csvParser = new TextFieldParser(path))
            {

                csvParser.SetDelimiters(new string[] { "," });
                //csvParser.HasFieldsEnclosedInQuotes = false;

                string row = csvParser.ReadLine();

                while (!csvParser.EndOfData)
                {                   
                        if (row.Contains(subLight))
                        {
                            string[] fields = csvParser.ReadFields();

                            category = fields[0];
                            index = fields[1];
                            load1 = fields[2];
                            load2 = fields[3];
                            load3 = fields[4];
                            load4 = fields[5];

                            if(index.Contains("1"))
                            {
                                light1 = row;
                            }
                            else if (index.Contains("2"))
                            {
                                light2 = row;
                            }
                            else if (index.Contains("3"))
                            {
                                light3 = row;
                            }

                            string rowData = string.Format("{0},{1},{2},{3},{4},{5}", category, index, load1, load2, load3, load4);
                            Console.WriteLine(rowData);
                            //Console.ReadLine();
                        }
                        else if (row.Contains(subPin))
                        {
                            string[] fields = csvParser.ReadFields();

                            category = fields[0];
                            index = fields[1];
                            value = fields[2];
                            string rowData = string.Format("{0},{1},{2}", category, index, value);
                            Console.WriteLine(rowData);
                        }
                        else if (row.Contains(subProc))
                        {
                            string[] fields = csvParser.ReadFields();


                            category = fields[0];
                            index = fields[1];
                            value = fields[2];

                            if (index.Contains("A"))
                            {
                                processor1 = row;
                            }
                            else if (index.Contains("B"))
                            {
                                processor2 = row;
                            }
                            else if (index.Contains("C"))
                            {
                                processor3 = row;
                            }
                            else if (index.Contains("D"))
                            {
                                processor4 = row;
                            }
                            else if (index.Contains("E"))
                            {
                                processor5 = row;
                            }
                            else if (index.Contains("F"))
                            {
                                processor6 = row;
                            }
                            else if (index.Contains("G"))
                            {
                                processor7 = row;
                            }
                            else if (index.Contains("H"))
                            {
                                processor8 = row;
                            }
                            string rowData = string.Format("{0},{1},{2}", category, index, value);
                            Console.WriteLine(rowData);
                        }
                        else if (row.Contains(subQuirky) || row.Contains(subFab))
                        {
                            string[] fields = csvParser.ReadFields();


                            category = fields[0];
                            index = fields[1];
                            value = fields[2];

                            if (index.Contains("A"))
                            {
                                display1 = row;
                            }
                            else if (index.Contains("B"))
                            {
                                display2 = row;
                            }
                            else if (index.Contains("C"))
                            {
                                display3 = row;
                            }
                            else if (index.Contains("D"))
                            {
                                display4 = row;
                            }
                            else if (index.Contains("E"))
                            {
                                display5 = row;
                            }
                            else if (index.Contains("F"))
                            {
                                display6 = row;
                            }
                            else if (index.Contains("G"))
                            {
                                display7 = row;
                            }
                            else if (index.Contains("H"))
                            {
                                display8 = row;
                            }
                            string rowData = string.Format("{0},{1},{2}", category, index, value);
                            Console.WriteLine(rowData);
                        }
                        else
                        {
                            Console.WriteLine("No Match Found");
                        }
                    }

                Console.ReadLine();

                }
        }

}  

Будем признательны за любые рекомендации.

1 Ответ

2 голосов
/ 17 февраля 2020

Это ваша реализация. Сначала вы берете первую строку с помощью ReadLine, которая перемещает курсор на следующую строку. Затем, если строка содержит ваше свойство поиска, вы выполняете ReadFields, который является второй строкой документа.

Если ваши данные всегда гарантированно имеют категорию, вы можете просто использовать ReadFields и сравнить с первым элемент. Вы можете посмотреть на PeekChars, если хотите просмотреть содержимое текущей строки без перемещения курсора.

TextFieldParser.ReadLine: возвращает текущую строку в виде строки и перемещает курсор на следующую строку .

TextFieldParser.ReadFields: считывает все поля в текущей строке, возвращает их в виде массива строк и перемещает курсор на следующую строку, содержащую данные.

TextFieldParser.PeekChars: считывает указанное количество символов без перемещения курсора.

...