我正在使用此列表:
List<string[]> parserData = ReadParserData(@"C:/File.csv", ',');
在我的档案中,我有:
2,Sam,500.00
6,Mike,400.00
8,Robert,156.00
3,Steve,100.85
9,Anderson,234.90
的含义顺序:ID,Name,Salary。
private static List<string[]> ReadParserData(string path, char delimiter)
{
var parserData = new List<string[]>();
using (var sr = new StreamReader(path))
{
string line;
while ((line = sr.ReadLine()) != null)
{
string[] row = line.Split(delimiter);
parserData.Add(row);
}
}
return parserData;
}
我如何通过提升到降薪来排序? 我正在以这种方式保存CSV文件......
using (var sw = new StreamWriter(@"C:/AscendingSalary.csv"))
{
foreach (string[] row in parserData)
{
var sb = new StringBuilder();
foreach (string s in row)
{
sb.Append(s + ",");
}
sb.Remove(sb.Length - 1, 1);
sw.WriteLine(sb.ToString());
}
}
答案 0 :(得分:6)
您只需解析薪水(行中的第三项)并使用OrderBy或OrderByDescending方法订购行:
parsedData.OrderBy(row => Decimal.Parse(row[2]))
但我建议您创建一些Person
类,它将以可读的方式存储您的数据
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Salary { get; set; }
}
解析
var people = from line in File.ReadLines(path)
let parts = line.Split(delimiter)
select new Person {
Id = Int32.Parse(parts[0]),
Name = parts[1],
Salary = Decimal.Parse(parts[2])
};
然后,您将能够按工资对人员列表进行排序
people.OrderBy(p => p.Salary)
更具可读性。
注意:有方便的File.ReadLines方法。
对于保存人员数据,您只需编写格式化的行:
var lines = from p in people
orderby p.Salary
select String.Format("{0},{1},{2}", p.Id, p.Name, p.Salary);
File.WriteAllLines(@"C:/AscendingSalary.csv", lines);