如何使用字典统计文本文件多行列数据的条目总数与价格总和
订单文本统计实现方案
不推荐纯靠IndexOf硬截字符串实现需求,这种写法容错性极低,一旦文本出现空格偏移、字段顺序调整、新增字段就容易出解析错误,仅适合格式100%固定、追求极致性能的超大文件处理场景,常规场景优先选结构化解析的方式,实现逻辑更清晰、可维护性更强。
推荐实现:逐行结构化解析
处理流程如下:
- 按行读取目标文本文件,自动跳过空行
- 对每一行内容,先切除
//RowX格式的尾部注释,只保留逗号分隔的有效键值对片段 - 将有效片段按逗号拆分为独立的键值段,再按冒号拆分每个段的键名和值,做结构化存储
- 每解析到1条有效订单数据,总条目计数+1,同时提取
Price对应的数值累加到总价变量中 - 所有行处理完成后,按要求格式输出统计结果即可
参考实现代码(C#):
int totalItems = 0; decimal totalPrice = 0m; // 替换为你的文本文件实际路径 foreach (string rawLine in File.ReadLines("order_data.txt")) { // 移除行尾注释、首尾空白字符 string validContent = rawLine.Split("//").First().Trim(); if (string.IsNullOrWhiteSpace(validContent)) continue; // 解析键值对为字典,不用关心字段顺序 var fieldDict = validContent.Split(',') .Select(segment => segment.Trim().Split(':')) .ToDictionary(kv => kv[0].Trim(), kv => kv[1].Trim()); // 累加统计值,建议加TryParse做格式校验,避免脏数据导致程序崩溃 if (decimal.TryParse(fieldDict["Price"], out decimal price)) { totalItems++; totalPrice += price; } } Console.WriteLine($"Totalitems:{totalItems}"); Console.WriteLine($"totalPrice:{totalPrice}");
这个方案不需要硬编码字段位置,哪怕后续调整OrderID、ItemID、Price的排列顺序,只要键名不变就能正常解析,比硬写IndexOf截位的方案稳定很多。
IndexOf方案的适用场景
如果你处理的是GB级别的超大订单文本,需要极致压缩解析耗时,可以用IndexOf快速定位价格字段位置减少拆分开销,核心逻辑是:逐行查找Price:字符串的起始索引,向后偏移6位(Price:的字符长度)截取后续数字子串转成数值累加,同时统计有效行数即可。
注意这种写法必须提前确认文本格式完全固定,没有多余字符、字段顺序不会变化,否则很容易出现解析错误。
上述代码运行后,针对你给出的示例数据,会输出预期结果:
Totalitems:3 totalPrice:1300
内容的提问来源于stack exchange,提问作者John_Martin
相关产品推荐
相关产品推荐

