-2

我想对文本文件中的数据进行排序并将其保存到另一个文本文件中

这是我的文本文件“employee.txt”我想使用“员工代码”对数据进行排序

员工代码:107 名字:swapnil 姓氏:dehjhja 电话号码:6727672


员工代码:106 名字:fhsgbf 姓氏:dehjhja 电话号码:909888


员工代码:102 名字:xyz 姓氏:dehjhja 电话号码:098778


4

2 回答 2

1

您需要将数据导入到可排序的实体中,在您的集合(即List<T>)上调用 sort 方法,然后将数据导出为您想要的任何格式。

对于导入/导出的东西,我推荐 FileHelpers lib http://www.filehelpers.com/downloads.html

对于排序的东西,IComparable<>在您的实体上实施。

ICompable 的示例:

using System;
using System.Collections;
public class Person : IComparable<Person>
{
    #region Private Members
    private string _firstname;
    private string _lastname;
    private int _age;
    #endregion
    #region Properties
    public string Firstname
    {
        get { return _firstname; }
        set { _firstname = value; }
    }
    public string Lastname
    {
        get { return _lastname; }
        set { _lastname = value; }
    }
    public int Age
    {
        get { return _age; }
        set { _age = value; }
    }
    #endregion
    #region Contructors
    public Person (string firstname, string lastname, int age)
    {
        _firstname = firstname;
        _lastname = lastname;
        _age = age;
    }
    #endregion
    public override string ToString()
    {
        return String.Format(“{0} {1}, Age = {2}“, _firstname,
             _lastname, _age.ToString());
    }
    #region IComparable Members
    public int CompareTo(Person obj)
    {
        return _firstname.CompareTo(p2.Firstname);
    }
    #endregion
}
于 2012-06-08T11:47:31.667 回答
1

对于文件的读/写,您可以简单地使用File.ReadAllLines将行读入字符串数组,并使用 File.WriteAllLines将它们写回文件。这些函数将处理文件的所有打开/关闭,因此您不必这样做。

为了处理排序,我们可以使用 LINQ 中的orderby 关键字和静态辅助函数GetEmployeeCode来获取 EmployeeCode。我们可以如下定义我们的辅助函数:

public static int GetEmployeeCode(string line)
{
    // Get the substring starting after "Employee code:"
    // ... and stopping at the first space.
    string employeeCode = line.Substring(14).Split(' ')[0];
    int code;
    Int32.TryParse(employeeCode, out code);
    return code;
}

然后,以下代码将按 EmployeeCode 对文件中的所有行进行升序排序,然后将它们写入新文件:

string[] lines = File.ReadAllLines(@"C:\original.txt");

// Sort the rows in lines by EmployeeCode
lines = (from line in lines
        orderby GetEmployeeCode(line) ascending
        select line).ToArray();

File.WriteAllLines(@"C:\sorted.txt", lines);
于 2012-06-08T12:02:55.213 回答