C# C-LinQ-读取文本文件,按第一列分组,按最后一列排序?
hi有一个包含3列的文本文件,如下所示:C# C-LinQ-读取文本文件,按第一列分组,按最后一列排序?,c#,linq,C#,Linq,hi有一个包含3列的文本文件,如下所示: contract1;pdf1;63 contract1;pdf2;5 contract1;pdf3;2 contract1;pdf4;00 contract2;pdf1;2 contract2;pdf2;30 contract2;pdf3;5 contract2;pdf4;80 contract1;pdf3;2 contract1;pdf2;5 contract1;pdf1;63 contract1;pdf4;00 contract2;pdf1;2 c
contract1;pdf1;63
contract1;pdf2;5
contract1;pdf3;2
contract1;pdf4;00
contract2;pdf1;2
contract2;pdf2;30
contract2;pdf3;5
contract2;pdf4;80
contract1;pdf3;2
contract1;pdf2;5
contract1;pdf1;63
contract1;pdf4;00
contract2;pdf1;2
contract2;pdf3;5
contract2;pdf2;30
contract2;pdf4;80
现在,我想将这些信息写入另一个文本文件,输出将按顺序放在第一个记录中,最后一列在2,5中,如下所示:
contract1;pdf1;63
contract1;pdf2;5
contract1;pdf3;2
contract1;pdf4;00
contract2;pdf1;2
contract2;pdf2;30
contract2;pdf3;5
contract2;pdf4;80
contract1;pdf3;2
contract1;pdf2;5
contract1;pdf1;63
contract1;pdf4;00
contract2;pdf1;2
contract2;pdf3;5
contract2;pdf2;30
contract2;pdf4;80
我该怎么办?
谢谢我不打算为您编写程序,但我建议您使用此库来读取和写入分隔文件: 新建读卡器时,请确保指定分号分隔符:
using (var reader = new StreamReader("path\\to\\input_file.csv"))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
csv.Configuration.Delimiter = ";";
var records = csv.GetRecords<Row>();
// manipulate the data as needed here
}
在中读取数据后,可以根据需要对其进行操作。如果输出格式与输入格式不同,则应将输入类转换为输出类。如果愿意,您可以使用Automapper库。但是,对于一个简单的项目,我建议只手动将输入类转换为输出类
最后,将数据写回:
using (var writer = new StreamWriter("path\\to\\output_file.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(records);
}
阅读后,您可以使用LINQ对行进行分组和排序,然后将它们重新组合在一起:
var output = File.ReadAllLines(@"path-to-file")
.Select(s => s.Split(';'))
.GroupBy(s => s[0])
.SelectMany(sg => sg.OrderBy(s => s[2] == "2" ? "-" : s[2] == "5" ? "+" : s[2]).Select(sg => String.Join(";", sg)));
然后将它们写入一个文件。我会从阅读开始。然后呢,啊。您的数据不同。在第一个示例中,您有一行contract1;pdf1;第63条和第1条;pdf3;2在第二次你有合同1;pdf1;2和合同1;pdf3;63因此pdf1和pdf3切换了它们的值。为什么?这样的方法应该让您开始:File.ReadAllLinesPath to File.Selectline=>line.Split;;-这将返回数组数组,其中每个元素表示CSV文件中的单个单元格。请从现在开始重新写句子,我想写得更清楚。这非常适合我!!谢谢,你是一个顶级程序员!非常感谢