阅读逗号(如$ 1,23,456)
使用C#程序我读CSV与像(姓名,薪水,年龄)(A,$ 1,200 27)(B,2300,27)值文件
在标题行中有三列。我想验证数据行中的列数也是三。 (C,28)应该是无效的文件。
目前我正在通过计算逗号数来完成此操作。但是,当内容本身带有逗号($ 1,200)时,这种逻辑失败。我该如何解决这个问题?
使用库来读取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文件....
反正....
这可能适用于像'A'和'B'这样的名称,但不适用于'Smith,Bob'这样的名称。 – Gabe
什么是转储()方法? – pmcilreavy
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));
像Smith,Bob这样的名字怎么样? – Gabe
使用了合适的工具:[A CSV解析器(http://*.com/questions/3507498/reading-csv-file/3508572#3508572) –
功课或类似的东西?如果没有,您可以在商业应用中使用库,而无需支付费用。 –
你是什么意思,第三方?这是在.NET BCL中。或者这可能是一个家庭作业? –