【发布时间】:2015-08-03 10:49:35
【问题描述】:
我读入了一个 CSV 文件,并通过写出每列以逗号分隔的值将其转换为 TXT 文件。我希望程序也能够将 TXT 文件转换回 CSV,所以我正在创建一个 TXTReader 类。我在阅读大 TXT 文件时遇到问题。我第一次尝试使用String.Split:
string fullText = File.ReadAllText(fileName);
string[] values = fullText.Split(',');
这起初可行,但当出现带有逗号的字符串的列时开始引起问题,使程序认为它是另一列,而它只是一个字符串。我继续寻找解决方案并找到https://stackoverflow.com/a/3147901/1870760。这适用于小文件,但对于我的 31 MB TXT 文件来说真的很慢。然后我尝试了自己的hacky方法,遍历fullText中的所有字符并检查"\"",因为所有字符串在TXT中都有引号,但这也需要很长时间(约10分钟)。
我也不能使用https://stackoverflow.com/a/3148691/1870760,因为我的字符串列值有时包含\n,这会导致读者认为这是一个新行,其实不是。
那么,我是否必须接受读取 31 MB TXT 文件并将值拆分为列需要一段时间,还是有更高效的方法来做到这一点?
【问题讨论】:
-
使用 RegexOptions.Compiled 可以加快速度。其他事情包括,获得更快的正则表达式查询(可能不太可能),使用线程。
-
TextFieldParser处理所有这些 - Parse comma seperated string with a complication in C# -
@AlexK。如问题所述,我不能使用
TextFieldParser,因为它读取每个换行符的值,并且我的字符串可以包含\n。 -
所以用另一个字符交换 \n、解析、交换回来?
-
@AlexK。嗯,这听起来像是一个解决方案.. 但这意味着我需要用一个在任何字符串中其他地方都没有使用过的字符来交换它,那会是什么 ASCII 值?