You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用字典统计文本文件多行列数据的条目总数与价格总和

订单文本统计实现方案

不推荐纯靠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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 07:45:44