2014-07-08 94 views
-1

因此,我將一個CSV文件讀入C#中,並對其進行了某些操作,最終文件名爲:retainedLines,類型爲「var」。在我將這個文件寫入硬盤之前,我想對它的第二列進行排序。我試過這個例子: Sorting csv file 但它不會工作,我得到一個處理錯誤,而不是。 這是我停留在我的代碼的一部分:對CSV文件進行排序

String inputpath = textBox1.Text; 

if (File.Exists(inputpath)) 
{ 
    //MessageBox.Show(inputpath, outputpath);  
    var retainedLines = File.ReadAllLines(inputpath) 
     .Where((x, i) => i == 0 
      || (x.Split(',')[1]).Contains(checkCritical()) 
      || (x.Split(',')[1]).Contains(checkWarning()) 
      || (x.Split(',')[1]).Contains(checkMajor()) 
      || (x.Split(',')[1]).Contains(checkClear())  
      ); 

    if (inputpath.Equals(outputpath)) 
    { 
     File.Delete(inputpath); 
    } 

    //here is where I want to sort the file alphabetically by second column 
    File.WriteAllLines(outputpath, retainedLines); 
} 
+0

文件如何能成爲'var'類型?而且,var甚至不是一種類型。此外,你不能告訴我們你得到的錯誤,而不是指定它是什麼錯誤。 – Tarec

+0

LINQ在這裏是一個解決方案。 –

回答

2

你可以做的排序是這樣的:

retainedLines = retainedLines.OrderBy(line => line.Split(',')[1]); 

但我會重構第一代碼,以便它就不叫Split方法每次進行過濾時,請改爲:

var retainedLines = File.ReadAllLines(inputpath) 
    .Select(x => x.Split(',')) 
    .Where((x, i) => i == 0 
     || (x[1]).Contains(checkCritical()) 
     || (x[1]).Contains(checkWarning()) 
     || (x[1]).Contains(checkMajor()) 
     || (x[1]).Contains(checkClear())  
     ) 
    .OrderBy(x => x[1]) 
    .Select(parts => string.Join(",", parts); 
相關問題