我想从文本文件中对数据进行排序并将其保存到另一个文本文件
这是我的文本文件" employee.txt"我想使用"员工代码排序数据"
员工代码:107 名字:swapnil 姓氏:dehjhja 电话号码:6727672
员工代码:106 名字:fhsgbf 姓氏:dehjhja 电话号码:909888
员工代码:102 名字:xyz 姓氏:dehjhja 电话号码:098778
答案 0 :(得分:1)
您需要将数据导入可排序的实体,在集合中调用sort方法(即List<T>
),然后将数据导出为您想要的任何格式。
对于导入/导出内容,我建议使用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
}
答案 1 :(得分:1)
对于文件的读/写,您只需使用File.ReadAllLines将行读入字符串数组,然后使用File.WriteAllLines将它们写回文件。这些函数将处理所有文件的打开/关闭,因此您不必这样做。
为了处理排序,我们可以使用LINQ中的orderby keyword和静态帮助函数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);