我做了一个小程序,当一个外部程序发生某些事件时,会向.txt文件写一些名字和一个整数.
问题是文档中的名称可以显示在几行中,因此我想为每个特定的人提供整数,以便我获得他/她的总分数然后对其进行排序.
例如:
原线:
Aaaa Aaa 5Bbbb Bbb 7Cccc Ccc 2Aaaa Aaa 4Cccc Ccc 4Bbbb Bbb 1dddd Ddd 1
我想要的输出:
1. Aaaa Aaa 92. Bbbb Bbb 83. Cccc Ccc 64. dddd Ddd 1
有没有办法在C#中做到这一点?
我试图读取文件中的每一行并搜索一个人的名字.但这并没有真正帮助,我不知道如何解决这个问题.
有什么建议?
IEnumerable<string> lineGroups = file.Readlines(path).Select((l,i) => new { line = l,Parts = l.Split() }).Select(x => new{ Number = x.Parts.ElementAtOrDefault(2).TryGetInt() ?? 1,Col1 = x.Parts.ElementAtOrDefault(0),Col2 = x.Parts.ElementAtOrDefault(1),x.line,x.Parts}).GroupBy(x =>new { x.Col1,x.Col2 }).Select((g,groupIndex) => string.Format("{0}. {1} {2} {3}",groupIndex + 1,g.Key.Col1,g.Key.Col2,g.Sum(x => x.Number)));
输出:
foreach (var grp in lineGroups) Console.Writeline(grp);
这是输出:
1. Aaaa Aaa 92. Bbbb Bbb 83. Cccc Ccc 2 // different than your desired ouput but seems to be correct4. dddd Ddd 1
这些是我在linq查询中使用的扩展方法,尝试将字符串解析为常见值类型,如int(如上所述).如果它不可解析,则返回可空类型:
public static class NumericExtensions{ public static bool IsBetween(this int value,int fromInclusive,int toInclusive) { return value >= fromInclusive && value <= toInclusive; } public static Decimal? TryGetDecimal(this string item) { Decimal d; bool success = Decimal.TryParse(item,out d); return success ? (Decimal?)d : (Decimal?)null; } public static int? TryGetInt(this string item) { int i; bool success = int.TryParse(item,out i); return success ? (int?)i : (int?)null; } public static bool TryGetBool(this string item) { bool b = false; Boolean.TryParse(item,out b); return b; ; } public static Version TryGetVersion(this string item) { Version v; bool success = Version.TryParse(item,out v); return v; }}总结
以上是内存溢出为你收集整理的c# – 如何读取多行到同一行?全部内容,希望文章能够帮你解决c# – 如何读取多行到同一行?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)