我正在使用此列表:
List<string[]> parserData = ReadParserData(@"C:/File.csv", ',');
Run Code Online (Sandbox Code Playgroud)
在我的文件里面我有:
2,Sam,500.00
6,Mike,400.00
8,Robert,156.00
3,Steve,100.85
9,Anderson,234.90
Run Code Online (Sandbox Code Playgroud)
在意义顺序中: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;
}
Run Code Online (Sandbox Code Playgroud)
我如何通过提升到降薪来排序?我正在以这种方式保存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());
}
}
Run Code Online (Sandbox Code Playgroud)
您只需解析薪水(行中的第三项)并使用OrderBy或OrderByDescending方法来订购行:
parsedData.OrderBy(row => Decimal.Parse(row[2]))
Run Code Online (Sandbox Code Playgroud)
但我建议你创建一些Person以可读方式存储数据的类
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Salary { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
解析
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])
};
Run Code Online (Sandbox Code Playgroud)
然后你就可以用这种方式按工资对人员列表进行排序
people.OrderBy(p => p.Salary)
Run Code Online (Sandbox Code Playgroud)
更具可读性.
注意:有方便的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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |