阅读逗号(如$ 1,23,456)

问题描述:

使用C#程序我读CSV与像(姓名,薪水,年龄)(A,$ 1,200 27)(B,2300,27)值文件

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

目前我正在通过计算逗号数来完成此操作。但是,当内容本身带有逗号($ 1,200)时,这种逻辑失败。我该如何解决这个问题?

+2

使用了合适的工具:[A CSV解析器(http://*.com/questions/3507498/reading-csv-file/3508572#3508572) –

+0

功课或类似的东西?如果没有,您可以在商业应用中使用库,而无需支付费用。 –

+0

你是什么意思,第三方?这是在.NET BCL中。或者这可能是一个家庭作业? –

使用库来读取CSV文件。为什么当有人已经为你做了这件事的时候,你是否已经在自己的身上发牢骚?上次我读csv时,我用CsvHelper

作为一个快速的答案为什么不通过你拆(“”)

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

这可能适用于像'A'和'B'这样的名称,但不适用于'Smith,Bob'这样的名称。 – Gabe

+0

什么是转储()方法? – pmcilreavy

+0

Dump(),方法是Linqpad添加的扩展方法 – jjchiw

你能也许这样做吗?...其中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)); 
+0

像Smith,Bob这样的名字怎么样? – Gabe