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

时间:2017-07-04 19:19:41

标签: c# count sum readlines

我有文件,我通过“,”分隔值 - 但它不是.csv扩展名。
我试图从每一行开始输入C#sum,从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,,,

所以这种风格:

  • 第1行,第12行“之后”,“值为”5“,
  • 跳过第二行,因为开头为1,
  • 第3行,在第12个“之后”,“是”值“9”,
  • 跳过4-6行,因为开头是1,
  • 第7行,在第12个“之后”,“是值”1“

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

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

但接下来呢?我应该怎么处理这个?

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

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

当然,您需要检查分组实际上是否为您提供了12个位置以及它是否为数字。

答案 2 :(得分:0)

如果我们假设文件的格式正确,而且每12个位置都会找到整数,那么只需一行就可以完成(快速和脏)

th.changeLabel.connect(label1.setText)

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

答案 3 :(得分:0)


如果在这个文件中,在11或12位,我有例如#34; 16"但是" 1:59" (所以1分59秒?左边的VS给了我一些不正确输出的信息以及关于日期的故障排除。
我尝试了decimal.Parse和DateTime.TryExact但同样的问题。

page.viewportSize = { width: 1024, height: 768 };