从文件中读取值,在 12 次 "," 之后

Read value from file, after 12 times ","

我有文件,其中我用“,”分隔值 - 但它不是 .csv 扩展名。
我正在尝试从每一行获取 C# 总和,从 0 开始。

对于这个总和,应始终取“,”的第 12 位之后的值

0,P2CZ,1,0,400,400,802,802,18,18,1299,,5,248721,2487221,2
1,1,2487221,1,1_EG_3ST2_1/22,,0,460,18,0
0,,2,0,400,400,982,982,18,18,13999,,9,2321,248731,24878/121,24872021,,,,,,
1,1,2482021,1,1_EG_9_ST2_1/22,,0,460,18,0
1,3,2487821,1,1_EG_U9_ST2_1/22,,0,1042,18,0
1,4,248781,1,1_EG_U9_ST2_1/22,,0,1042,18,0
0,,3,0,2000,2000,80,80,18,18,14/0999,,1,,,,,,,,,,2000,80,1.3,,,,0,0,,,

所以采用这种风格:

所以总和是 5 + 9 + 1 = 15。

我已经输入了带有补丁的读取行+从标签中获取的数据和+扩展名。

但是接下来呢?我该如何处理?

int count = File.ReadLines(patch + label97.Text + ".ext").Count(line => !line.All(char.IsWhiteSpace));

您应该先对字符','进行字符串拆分,并将拆分后的字符串保存为数组。然后可以访问第0个元素看是0还是1,然后访问第12个元素求和。

对于初学者,您应该这样做:

File.ReadLines(patch + label97.Text + ".ext")
    .Where(line => !line.StartsWith("1") // get lines that do not start with 1
    .ToArray(); 

然后,使用您选择的循环语句:

var desiredPart = line.Split(new[] { ',' })[11]; // get whatever is at the twelveth position
int value = int.Parse(desiredPart);

当然,你需要检查Split是否真的给了你12个位置,是否是一个数字。

如果我们假设文件格式正确,并且在每第 12 个位置你会找到整数,你可以只用一行(快速而肮脏)

var sum = File.ReadLines(patch + label97.Text + ".ext")
    .Where(l =>!l.StartsWith("1"))
    .Sum(l => int.Parse(l.Split(',')[11]);

请记住,如果只有一件事不符合预期(错误的文件名、错误的位置、第 12 位的字符串而不是数字等),这将引发异常。


如果在这个文件中,在第 11 或第 12 个位置,我有例如不是“16”而是“1:59”(所以 1 分 59 秒?
VS 给我的信息是不正确的输出并进行故障排除怎么办日期。
我尝试了 decimal.Parse 和 DateTime.TryExact 但同样的问题。

var test2 = File.ReadLines(path + label97.Text + ".ptn")
    .Where(l => l.StartsWith("SUM1"))
    .Sum(l => DateTime.ParseExact(l.Split(',')[11]));