У меня есть файл 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-файл и разделять значения на столбцы или есть ли более эффективные способы для этого?
Простая вещь, которую вы можете сделать, чтобы ускорить процесс является использование RegexOptions.Compiled. Другие вещи включают в себя, получить более быстрый запрос регулярного выражения (возможно, это не реально), использовать потоки. – Vajura
'TextFieldParser' имеет дело со всем этим - [Разделяемая строка с разделителями-запятыми с осложнением в C#] (http://stackoverflow.com/questions/30078054/parse-comma-seperated-string-with-a-complication-in- c-sharp) –
@AlexK. Как отмечено в вопросе, я не могу использовать 'TextFieldParser', потому что он считывает значения для новой строки, а мои строки могут содержать' \ n'. –