我的文本数据格式为:
OrderID:100,ItemID:1,Price:1000 //Row1
OrderID:101,ItemID:2,Price:200 //Row2
OrderID:102,ItemID:3,Price:100 //Row3
我需要Totalitems:3
和totalPrice:1300
我不知道用哪种方法来获得这个问题的输出使用Indexof
访问或其他东西
任何帮助都是感激的。
一种方法是首先使用File.ReadAllLines(fileName)
读取文件中的所有行。然后你可以遍历这些行,解析并聚合你需要的信息。
var lines = File.ReadAllLines(fileName);
int totalItems = 0;
decimal totalPrice = 0;
foreach (var line in lines)
{
var columns = line.Split(',');
var priceColumn = columns[2];
var price = decimal.Parse(priceColumn.Split(':')[1]);
totalItems++;
totalPrice += price;
}
Console.WriteLine($"Total items: {totalItems}");
Console.WriteLine($"Total price: {totalPrice}");
对于更复杂的CSV文件或更高级的功能,您可以查看CsvHelper,它对我来说工作得很好。
// parse the price
const string sep = ",Price:";
// initial tuple for sum&count, aka "seed"
(decimal sum, int count) = (0,0);
var lines = File.ReadAllLines(someCsvFilePath);
var result = lines.Aggregate((sum, count),
(curr, line) => line?.IndexOf(sep) is {} pos and > -1
&& decimal.TryParse(line.Substring(pos + sep.Length), out var prc)
? (curr.sum + prc, curr.count + 1) : curr);
Console.WriteLine("Sum: {0:N0}, TotalItems: {1:N0}", result.sum, result.count);