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
现在,我想将这些信息写入另一个文本文件中,输出将是按顺序排列的,第一个是"中最后一列的记录;2,5〃;,像这样的东西:
contract1;pdf3;2
contract1;pdf2;5
contract1;pdf1;63
contract1;pdf4;00
contract2;pdf1;2
contract2;pdf3;5
contract2;pdf2;30
contract2;pdf4;80
我该怎么办?感谢
您可以在阅读后使用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)));
然后把它们写进一个文件。
我不会为您编写程序,但我建议使用此库来读取和写入分隔文件:https://joshclose.github.io/CsvHelper/getting-started/
当你新建阅读器时,请确保指定你的分号分隔符:
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
}
您的";行";类(为了清楚起见,请选择一个更合适的名称(将指定平面文件的模式。听起来你好像没有标题?如果没有,则可以指定每个项目的顺序。
public class Row
{
[Index(1)]
public string MyValue1 { get; set; }
[Index(2)]
public string MyValue2 { get; set; }
}
在中读取数据后,您可以根据需要对其进行操作。如果输出格式与输入格式不同,则应将输入类转换为输出类。如果愿意,可以使用自动映射程序库。然而,对于一个简单的项目,我建议只手动将输入类转换为输出类。
最后,写回数据:
using (var writer = new StreamWriter("path\to\output_file.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(records);
}