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

求助:如何在C#中按姓氏对逗号分隔的成员数据文件排序

按姓氏排序CSV成员列表的解决方案

你的问题出在Split()方法没有指定分隔符——默认它会按空白字符分割,所以整行的逗号分隔内容都被当成了单个元素,自然没法拆分出姓氏字段。下面是修正后的完整代码,实现按姓氏排序并写回文件:

private void btnSort_Click(object sender, EventArgs e)
{
    // 读取文件所有行
    string[] listOfMembers = File.ReadAllLines(@"D:\sirslist\data.txt");
    
    // 按逗号分割每行,转换为二维列表(跳过空行避免报错)
    List<string[]> members = listOfMembers
        .Where(line => !string.IsNullOrWhiteSpace(line))
        .Select(line => line.Split(','))
        .ToList();
    
    // 按姓氏(数组索引1的元素)进行字母排序
    members.Sort((a, b) => string.Compare(a[1], b[1], StringComparison.OrdinalIgnoreCase));
    
    // 将排序后的内容重新拼接为逗号分隔的字符串
    string[] sortedLines = members.Select(row => string.Join(",", row)).ToArray();
    
    // 写回原文件(也可以指定新文件路径)
    File.WriteAllLines(@"D:\sirslist\data.txt", sortedLines);
}

关键说明:

  • Split(','):明确指定按逗号分割每行,这样每个字段会被拆分到数组的对应索引位置,比如row[0]是工号,row[1]是姓氏,row[2]是名字
  • Sort((a, b) => string.Compare(a[1], b[1], StringComparison.OrdinalIgnoreCase)):使用自定义比较器,按姓氏的字母顺序排序,OrdinalIgnoreCase表示忽略大小写,避免大小写影响排序结果
  • Where(line => !string.IsNullOrWhiteSpace(line)):过滤空行,避免分割后出现空数组导致排序报错
  • string.Join(",", row):把排序后的字段数组重新拼接成逗号分隔的行,再写回文件

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:12:10