从文件中删除\ r从文件中读取
我有一个奇怪的问题。我读了一个文本文件,然后用\ n作为分隔符分割它。我注意到分割线在最后包含'\ r'。所以我试图删除它,我试图使用String.Replace,但没有运气。这里是我的代码:从文件中删除 r从文件中读取
string fileOutput = File.ReadAllText(location);
SettingsManager.proxies.Clear();
foreach (string line in fileOutput.Split('\n'))
{
string cleanLine = line;
if (cleanLine.Contains("\r")) cleanLine.Replace("\r", "");
SettingsManager.proxies.Add(cleanLine);
}
编辑:在1分钟的代码盯着后,我发现,我没有分配替代值原始字符串。
cleanLine.Replace("\r",""); //assigns a value to nothing
我应该分配cleanLine cleanLine.Replace();
cleanLine = cleanLine.Replace("\r","");
我敢肯定,运行fileOutput.Replace("\r","")
会比要求每个分割后获得的字符串替换更好。它也可以解决你的问题。
在Windows中,行指示符实际上是\r\n
,因此您最好的选择可能是在文件其他位置找不到其他字符(比如“| r”)来替换“\ r \ n”。 “),然后然后拆分被替换的字符。否则,如果你只是替换“\ r”,你最终可能会替换一个实际不在行尾的“\ r”(尽管这很可疑)。
你是如何在第一个地方读取文件的? .Net TextReader
类有一个ReadLine()
方法,使用它可以让你完全避免这个特殊问题。
我想这并不需要。我错过了一些非常简单的东西,我没有将替换的字符串分配给原来的字符串,这就是为什么它不起作用。感谢您的评论虽然=] – deadlock 2011-01-23 05:01:06
我认为你误解了C#中字符串的工作方式,以及文本文件如何在Windows上工作。
在Windows上,新行由回车符(\ r)和换行符(\ n)分隔?所以,这是“正常的”。其次,在C#中字符串是不可改变的。
if (cleanLine.Contains("\r")) cleanLine.Replace("\r", "");
未分配'已清除'值。
您将需要使用cleanLine = cleanLine.Replace("\r","");
第三,在C#中的风格视角 - 另一条线路上,你应该地方代码块,并用括号包围他们。这不是有效的语法,但它降低了可读性。
作为最后一件事 - 您可以简单地打开文本文件并调用ReadLine,而不需要像现在这样执行字符串替换。
当然,我知道我应该使用cleanLine = cleanLine.Replace();我也知道这是我的主要问题,并导致我的代码不工作。我错过了它,因为我没有睡很多时间。谢谢你们的建设性意见。Will =] +1 – deadlock 2011-01-23 04:59:15
如果您拨打:
string[] lines = File.ReadAllLines(location);
它将从各行同时删除 '\ r' 和 '\ n' 你。
Arghhh,刚才也这么说:) +1 – leppie 2011-01-23 04:47:38
正如其他人所建议的,改为使用File.ReadAllLines()
。它将分成\n
以及\r\n
。您的示例可以被重写为:
SettingsManager.proxies.Clear();
foreach (string line in File.ReadAllLines(location))
SettingsManager.proxies.Add(line);
其实我不知道我怎么没那么做。我需要休息一下。谢谢弗拉德,它解决了问题=] – deadlock 2011-01-23 04:37:10
谢谢。休息总是好于几个小时追逐你不会在第一时间做出的错误;)P.S.如果您将我的答案标记为解决问题的答案,我会很高兴。 – Vlad 2011-01-23 04:43:37