删除文本文件中的空行

时间:2017-03-14 08:33:17

标签: c#

我想导出一个文件文件,由某些PLC读取,该文件无法处理空行或空行。 WriteLine中的\ r \ n在文本文件的末尾生成一个空行,我无法想办法不生成它或删除它。

这是我生成和编写行的方式:

List<string> lines = new List<string>();
lines.Add(...);
foreach (string line in lines)
{
    file.WriteLine(line);
}

我尝试使用以下代码删除该行,但结束空行仍为:

List<string> lines = File.ReadAllLines(path).Where(arg => !string.IsNullOrWhiteSpace(arg)).ToList();
File.WriteAllLines(path, lines);

我也试过删除最后一行,但当然它删除了最后一行而不是回车..

lines = lines.GetRange(0, lines.Count - 1);

图像以图形方式展示了问题(左)和我想要实现的目标(右)

enter image description here

4 个答案:

答案 0 :(得分:4)

首先不生成空白行将解决您的问题,因为您每次都在调用WriteLine,它会在每行的末尾添加\r\n,包括最后一行。您可以使用for循环来检查您是否正在编写最后一行,请调用Write方法而不是WriteLine

for(int i=0; i < lines.Length; i++)
{
    if(i == lines.Length - 1)
    {
        file.Write(line);
    }
    else 
    {
        file.WriteLine(line);
    }
}

答案 1 :(得分:2)

每当您使用WriteLine时,它会在行尾添加行尾

使用Write代替WriteLine

,您需要避免上一行结束

例如:

file.Write(string.Join(Environment.NewLine, lines));

答案 2 :(得分:1)

这是你的解决方案:

  var lst = new List<string> { "jkl", "rueioqwp", "JKL:", "reqwdasf" };

   for (int i = 0; i < lst.Count; i++)
       {
            string newLine = "";
            if (i != lst.Count - 1)
                newLine = Environment.NewLine;
            File.AppendAllText("c:\\temp\\tmp.txt", lst[i] + newLine);
        }

答案 3 :(得分:0)

如果您还想删除仅包含空格的行,请使用

resultString = Regex.Replace(subjectString,@“^ \ s + $ [\ r \ n] *”,“”,RegexOptions.Multiline);

^ \ s + $将删除从第一个空白行到最后一行(在连续的空行块中)的所有内容,包括仅包含制表符或空格的行。

[\ r \ n] *将删除最后一个CRLF(或者只是LF,这很重要,因为.NET正则表达式引擎匹配\ r和\ n之间的$,非常有趣)