как заставить readfield читать следующее поле - PullRequest
0 голосов
/ 31 октября 2018

Мой CSV-файл содержит 8 столбцов и 300 тыс. Строк. Вот пример моего CSV-файла "0195153448"; "Классическая мифология"; "Марк П. Морфорд"; "2002"; "Оксфорд юниверсити пресс"; "http://images.amazon.com/images/P/0195153448.01.THUMBZZZ.jpg";" http://images.amazon.com/images/P/0195153448.01.MZZZZZZZ.jpg";" http://images.amazon.com/images/P/0195153448.01.LZZZZZZZ.jpg"
"0002005018"; "Клара Каллан"; "Ричард Брюс Райт"; "2001"; "HarperFlamingo Canada"; "http://images.amazon.com/images/P/0002005018.01.THUMBZZZ.jpg";" http://images.amazon.com/images/P/0002005018.01.MZZZZZZZ.jpg";" http://images.amazon.com/images/P/0002005018.01.LZZZZZZZ.jpg"

Теперь у меня есть этот код для чтения

string path = @"C:\Users\SEMRUK\Desktop\exceller\kitaplik.csv";
public DataTable GetDataTabletFromCSVFile(string PathFile)
    {
        DataTable csvData = new DataTable();

        TextFieldParser csvReader = new TextFieldParser(PathFile);

                csvReader.SetDelimiters(new string[] {";"});
                csvReader.HasFieldsEnclosedInQuotes = true;
                string[] colFields = csvReader.ReadFields();
                foreach (string column in colFields)
                {
                    DataColumn datecolumn = new DataColumn(column);
                    datecolumn.AllowDBNull = true;
                    csvData.Columns.Add(datecolumn);
                }               
                string[] fieldData = csvReader.ReadFields();
                while (!csvReader.EndOfData)
                {
                    for (int i = 0; i < fieldData.Length; i++)
                    {
                        if (fieldData[i] == "")
                        {
                            fieldData[i] = null;
                        }
                MessageBox.Show(fieldData[i]);
                    }
            csvData.Rows.Add(fieldData);

        }
        return csvData;
    }

Таким образом, я могу прочитать первые 8 строк. Но я не могу ничего читать после этого. Он просто читает сначала 8. Как я могу сказать коду, что он должен читать и после табуляции. Я попытался добавить \ t к установить ограничители, но не сработало. Есть предложения?

1 Ответ

0 голосов
/ 31 октября 2018
static void Main(string[] args)
        {


            string path = "your_file_path";

            string text = System.IO.File.ReadAllText(path);

            string[] parsedText= text.Split(';');

            foreach (var item in parsedText)
            {
                //do some
            }

        }
...