我正在使用C#读取~120 MB纯文本CSV文件.最初我通过逐行读取来进行解析,但最近确定首先将整个文件内容读入内存的速度要快几倍.解析已经非常慢了,因为CSV在引号中嵌入了逗号,这意味着我必须使用正则表达式拆分.这是我发现的唯一可靠的工作方式:
string[] fields = Regex.Split(line,
@",(?!(?<=(?:^|,)\s*\x22(?:[^\x22]|\x22\x22|\\\x22)*,)
(?:[^\x22]|\x22\x22|\\\x22)*\x22\s*(?:,|$))");
// from http://regexlib.com/REDetails.aspx?regexp_id=621
Run Code Online (Sandbox Code Playgroud)
为了在将整个内容读入内存后进行解析,我在换行符上进行字符串拆分以获得包含每一行的数组.但是,当我在120 MB文件上执行此操作时,我得到了一个System.OutOfMemoryException.当我的计算机有4 GB RAM时,为什么内存耗尽?有没有更好的方法来快速解析复杂的CSV?
你会如何将这一行拆分为字符串数组?
问题是Rutois,因为你不能直接用','分隔符拆分..
543472,"36743721","Rutois, a.s.","151","some name","01341",55,"112",1
Run Code Online (Sandbox Code Playgroud)
谢谢