从文件中读取值,在 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,,,
所以采用这种风格:
- 第 1 行,在第 12 个“,”之后是值“5”,
- 跳过第 2 行,因为开头是 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));
您应该先对字符','进行字符串拆分,并将拆分后的字符串保存为数组。然后可以访问第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]));
我有文件,其中我用“,”分隔值 - 但它不是 .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,,,
所以采用这种风格:
- 第 1 行,在第 12 个“,”之后是值“5”,
- 跳过第 2 行,因为开头是 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));
您应该先对字符','进行字符串拆分,并将拆分后的字符串保存为数组。然后可以访问第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]));