可能重复:
在CSV文件中处理逗号
我自己写了一个CSV解析器,它工作正常,直到我打到这个记录:
B002VECGTG,B002VECGTG,HAS_17131_spaceshooter,"4,426",0.04%,"4,832",0.03%,0%,1,0.02%,$20.47 ,1
逃脱,在"4,426"和"4,426"制动我的解析器.
这就是我用来解析文本行的内容:
char[] comma = { ',' };
string[] words = line.Split(comma);
Run Code Online (Sandbox Code Playgroud)
如何防止我的程序破坏?
And*_*bel 11
你不能只用逗号分开.要为该情况实现正确的解析器,您需要自己遍历字符串,跟踪是否在引号内.如果你在一个带引号的字符串中,你应该继续,直到你找到另一个引用.
IEnumerable<string> LineSplitter(string line)
{
int fieldStart = 0;
for(int i = 0; i < line.Length; i++)
{
if(line[i] == ',')
{
yield return line.SubString(fieldStart, i - fieldStart);
fieldStart = i + 1;
}
if(line[i] == '"')
for(i++; line[i] != '"'; i++) {}
}
}
Run Code Online (Sandbox Code Playgroud)
我建议使用CSV解析器而不是尝试自己解析.
正如您已经发现的那样,正确解析CSV有一些细微差别.
有许多第三方(其中一些是免费的),甚至一个内置在Visual Basic命名空间中 - TextFieldParser在Microsoft.VisualBasic.FileIO命名空间中.
| 归档时间: |
|
| 查看次数: |
11613 次 |
| 最近记录: |