求助:如何在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
相关产品推荐
相关产品推荐

