2015-08-03 56 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。这适用于小文件,但对于我的31 MB TXT文件非常慢。然后我试着用自己的黑客方式遍历fullText中的所有字符并检查"\"",因为所有字符串在TXT中都包含引号,但这也需要很长时间(~10分钟)。 我也不能使用https://stackoverflow.com/a/3148691/1870760,因为我的字符串列值有时包含\n这会导致读者认为这是一个新行,事实并非如此。

那么,我是否必须接受一段时间才能阅读31 MB TXT文件并将这些值拆分为列或者是否有更多性能高效的方法来执行此操作?

+0

一个简单的事情,你可以做的事情是加速使用RegexOptions.Compiled。其他的东西包括,得到一个更快的正则表达式查询(可能不是真的可能),使用线程。 – Vajura

+2

'TextFieldParser'处理所有 - [在C#中解析逗号分隔的字符串并发症](http://stackoverflow.com/questions/30078054/parse-comma-seperated-string-with-compression-in- c-sharp) –

+0

@AlexK。正如问题所述,我不能使用'TextFieldParser',因为它读取每个换行符的值,而我的字符串可以包含'\ n'。 –

回答

0

有一个项目,据说csv阅读/分裂比内存使用率低的正则表达式要快15倍。如果您想稍后显示数据,则即使数据绑定也受支持。来源可用。

您可以自定义许多参数(包括换行选项),因此我假设它足够智能以处理您的值\n,它明确处理参数值中的逗号。

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