使用C#程序我正在阅读CSV文件,其价值如(姓名,薪资,年龄)(A,$ 1,200,27)(B,2300,27)
在标题行中有三列。我想验证数据行中的列数也是三。 (C,28)应该是无效的文件。
目前,我通过计算逗号的数量来做到这一点。但是当内容本身有逗号($ 1,200)时,这个逻辑就失败了。我该如何解决这个问题?
答案 0 :(得分:1)
使用库来读取csv文件。当有人为你做过时,你为什么要自己写呢?上次我正在阅读csv我使用CsvHelper
。
答案 1 :(得分:0)
快速回答为什么你要分开(“,”)
var s = "Name, Salary, Age";
var t = "A, $1,200, 27";
var x = "B, 2300, 27";
string[] stringSeparators = new string[] {", "};
s.Split(stringSeparators, StringSplitOptions.None).Dump();
t.Split(stringSeparators, StringSplitOptions.None).Dump();
x.Split(stringSeparators, StringSplitOptions.None).Dump();
不是最好的解决方案,但它适合....
@Tim Pietzcker评论说它不是一个有效的csv文件......
反正....
答案 2 :(得分:0)
你可以这样做吗?... fileLine将是“A,$ 1,200,27”。这假设每个列都用逗号描述,然后用空格描述。
int lastCommaIdx = fileLine.LastIndexOf(",");
string agePart = fileLine.Substring(lastCommaIdx + 1, fileLine.Length - (lastCommaIdx + 1)).Trim();
int age = Convert.ToInt32(agePart);
fileLine = fileLine.Substring(0, lastCommaIdx);
int dollarIdx = fileLine.LastIndexOf("$");
string salary = fileLine.Substring(dollarIdx, fileLine.Length - dollarIdx).Trim();
string name = fileLine.Substring(0, dollarIdx).Trim().TrimEnd(new char[1] { ',' });
Debug.WriteLine(string.Format("Name={0}, Salary={1}, Age={2}", name, salary, age));