2012-10-02 89 views
1

我需要從文本文件中提取數據,對其進行排序,然後使用新排序的數據保存舊數據。下面是該文本文件的格式:使用List.Sort時忽略空格()

Dog 

Cow 

Sheep 

如果我讀課文到列表中,然後調用排序方法,我得到這個:

"" 
"" 
"" 
Cow 
Dog 
Sheep 

這不是我想要的。有沒有辦法讓.Sort()忽略空白,還是我應該以不同的方式解決這個問題?

編輯當我保存迴文件時,我需要空行。輸出應該

Cow 

Dog 

Sheep 
+0

你需要,當你閱讀列表保存這些空項或者你可以忽略它們? –

+0

爲什麼你在構建列表時忽略它們? – Tudor

+0

@BryanCrosby查看編輯。 – broke

回答

5

使用Linq。下面應該工作:

string[] myText = File.RealAllLines("yourfile.txt"); 
var sortedWithoutEmptyLines = myText 
    .Where(t=> !string.IsNullOrEmpty(t)) 
    .OrderBy(s=>s) 
    .Select(i => string.Concat(i, Environment.NewLine)); //Adding extra linebreak as asked 
File.WriteAllLines("yourfile.txt", sortedWithoutEmptyLines.ToArray()); 
+0

當再次寫入數據時,您需要重新添加換行符 – Servy

+0

File.WriteAllLines將爲每個項目添加換行符。我看到原始問題已被編輯爲「需要在保存時保留空行」。 – loopedcode

+0

WriteAllLines將在每個項目後添加一個換行符。 OP在每個項目後需要兩個換行符,因此您需要在每個項目後添加一個換行符,可能通過一個簡單的「選擇」。 – Servy

2

我建議你,而不是隻與非空字符串另建List和那種。您不僅可以節省時間(如果每對「真實」字符串之間有空白空間,您基本上無意間將數據加倍),但寫起來會更簡單。

2
string[] lines = File.ReadAllLines("yourInputFile.txt"); 
var outputData = lines 
     .Where(line => !string.IsNullOrEmpty(line)) //remove empty lines 
     .OrderBy(item => item) 
     .Select(line => line + Environment.NewLine); //add them back in 
File.WriteAllLines("yourOutputFile.txt", outputData.ToArray()); 

只是把所有的空行出來,做了排序,然後將它們放回