2013-06-02 2 views
0

У меня есть файл csv, который мне нужно отсортировать. Файл выглядит следующим образом:Сортировка файла csv

 
ID Name Surname Age Salary 
1 John Asben 33 1000 
2 Adam Smith 22 1200 
3 Amanda J  22 2000 
4 George Villis 36 2300 

Моего код чтение данных из CSV-файл сортирует их и записывает в другой файл CSV, но когда он считывает и записывает данные после сортировки, он записывает только данные не название. Есть ли какое-либо решение для чтения только данных, а не названия, и для записи отсортированных данных с заголовком (ID Name Surnae Age Salary) в другой файл.

Коула выглядит

private void buttonAlterSave_Click(object sender, EventArgs e) 
     { 
      var sorted = 
    File.ReadLines(@"C:\Users\data.csv") 
     .Select(line => new 
     { 
      SortKey = Int32.Parse(line.Split(',')[3]), 
      Line = line 
     }) 
     .OrderBy(x => x.SortKey) 
     .Select(x => x.Line); 
      File.WriteAllLines(@"C:\Users\sorteddata.csv", sorted); 
     } 

ответ

3

Использование Skip удалить строку заголовка для сортировки. Используйте Take + Concat, чтобы снова собрать заголовок и отсортированные данные.

string[] lines = File.ReadAllLines(path); 
var data = lines.Skip(1); 
var sorted = data.Select(line => new 
      { 
       SortKey = Int32.Parse(line.Split(',')[3]), 
       Line = line 
      }) 
      .OrderBy(x => x.SortKey) 
      .Select(x => x.Line); 
File.WriteAllLines(@"C:\Users\sorteddata.csv", lines.Take(1).Concat(sorted)); 
+0

Может также сортировать его на месте с помощью [ 'Array.sort()'] (http://msdn.microsoft.com/en-us/library/system.array.sort.aspx). Или, если список, ['List.Sort()'] (http://msdn.microsoft.com/en-us/library/8ce6t5ad.aspx). –

+0

@Tim Schmelter Спасибо, что это было отличное решение –

Смежные вопросы