我需要从文本文件中提取数据,对其进行排序,然后使用新排序的数据保存旧数据。下面是该文本文件的格式:使用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