我需要從文本文件中提取數據,對其進行排序,然後使用新排序的數據保存舊數據。下面是該文本文件的格式:使用List.Sort時忽略空格()
Dog
Cow
Sheep
如果我讀課文到列表中,然後調用排序方法,我得到這個:
""
""
""
Cow
Dog
Sheep
這不是我想要的。有沒有辦法讓.Sort()忽略空白,還是我應該以不同的方式解決這個問題?
編輯當我保存迴文件時,我需要空行。輸出應該
Cow
Dog
Sheep
我需要從文本文件中提取數據,對其進行排序,然後使用新排序的數據保存舊數據。下面是該文本文件的格式:使用List.Sort時忽略空格()
Dog
Cow
Sheep
如果我讀課文到列表中,然後調用排序方法,我得到這個:
""
""
""
Cow
Dog
Sheep
這不是我想要的。有沒有辦法讓.Sort()忽略空白,還是我應該以不同的方式解決這個問題?
編輯當我保存迴文件時,我需要空行。輸出應該
Cow
Dog
Sheep
使用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());
當再次寫入數據時,您需要重新添加換行符 – Servy
File.WriteAllLines將爲每個項目添加換行符。我看到原始問題已被編輯爲「需要在保存時保留空行」。 – loopedcode
WriteAllLines將在每個項目後添加一個換行符。 OP在每個項目後需要兩個換行符,因此您需要在每個項目後添加一個換行符,可能通過一個簡單的「選擇」。 – Servy
我建議你,而不是隻與非空字符串另建List
和那種。您不僅可以節省時間(如果每對「真實」字符串之間有空白空間,您基本上無意間將數據加倍),但寫起來會更簡單。
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());
只是把所有的空行出來,做了排序,然後將它們放回
你需要,當你閱讀列表保存這些空項或者你可以忽略它們? –
爲什麼你在構建列表時忽略它們? – Tudor
@BryanCrosby查看編輯。 – broke