我想导出一个文件文件,由某些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);
图像以图形方式展示了问题(左)和我想要实现的目标(右)
答案 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)
如果您还想删除仅包含空格的行,请使用
^ \ s + $将删除从第一个空白行到最后一行(在连续的空行块中)的所有内容,包括仅包含制表符或空格的行。
[\ r \ n] *将删除最后一个CRLF(或者只是LF,这很重要,因为.NET正则表达式引擎匹配\ r和\ n之间的$,非常有趣)