2015-08-03 4 views
1

У меня есть файл CSV, который я читал, и я конвертирую его в файл TXT, выписывая значения, разделенные запятыми в столбце. Я хочу, чтобы программа также могла конвертировать TXT-файл обратно в CSV, поэтому я создаю класс TXTReader. У меня возникли проблемы с чтением больших файлов TXT. Я впервые попробовал его с помощью String.Split:Сплит txt-файл быстрее

string fullText = File.ReadAllText(fileName); 
string[] values = fullText.Split(','); 

Это работало на первый, но начал возникают проблемы, когда столбцы со строками, которые были запятые в них обнаружились, что делает программу думаю, что это еще один столбец, в то время как это просто строка. Я нашел решение и нашел https://stackoverflow.com/a/3147901/1870760. Это отлично работает с небольшими файлами, но очень медленно с моими файлами TXT объемом 31 МБ. Затем я попробовал свой собственный взломанный способ, повторив все символы в fullText и проверив для "\"", потому что все строки имеют кавычки, обернутые вокруг них в TXT, но это также занимало много времени (~ 10 минут). Я также не могу использовать https://stackoverflow.com/a/3148691/1870760, потому что мои значения столбцов строки иногда содержат \n, что заставляет читателя думать, что это новая строка, а это не так.

Итак, нужно ли просто принять, что потребуется некоторое время, чтобы прочитать 31-мегабайтный TXT-файл и разделять значения на столбцы или есть ли более эффективные способы для этого?

+0

Простая вещь, которую вы можете сделать, чтобы ускорить процесс является использование RegexOptions.Compiled. Другие вещи включают в себя, получить более быстрый запрос регулярного выражения (возможно, это не реально), использовать потоки. – Vajura

+2

'TextFieldParser' имеет дело со всем этим - [Разделяемая строка с разделителями-запятыми с осложнением в C#] (http://stackoverflow.com/questions/30078054/parse-comma-seperated-string-with-a-complication-in- c-sharp) –

+0

@AlexK. Как отмечено в вопросе, я не могу использовать 'TextFieldParser', потому что он считывает значения для новой строки, а мои строки могут содержать' \ n'. –

ответ

0

Существует проект, который, как говорят, в 15 раз быстрее для чтения/разделения csv, чем регулярное выражение с низким использованием памяти. Даже привязка данных поддерживается, если вы хотите отобразить данные позже. Доступные источники.

Вы можете настроить многие параметры (в том числе варианты разрыва строки), поэтому я предполагаю, что он будет достаточно интеллектуальным для обработки ваших значений \n, он деформирует запятые в значениях параметров.

http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader