在csv文件的内容中读取逗号(例如$ 1,23,456)

时间:2011-09-29 12:22:01

标签: c# .net asp.net vb.net csv

使用C#程序我正在阅读CSV文件,其价值如(姓名,薪资,年龄)(A,$ 1,200,27)(B,2300,27)

在标题行中有三列。我想验证数据行中的列数也是三。 (C,28)应该是无效的文件。

目前,我通过计算逗号的数量来做到这一点。但是当内容本身有逗号($ 1,200)时,这个逻辑就失败了。我该如何解决这个问题?

3 个答案:

答案 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));