从文件中删除\ 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","")会比要求每个分割后获得的字符串替换更好。它也可以解决你的问题。

+0

其实我不知道我怎么没那么做。我需要休息一下。谢谢弗拉德,它解决了问题=] – deadlock 2011-01-23 04:37:10

+0

谢谢。休息总是好于几个小时追逐你不会在第一时间做出的错误;)P.S.如果您将我的答案标记为解决问题的答案,我会很高兴。 – Vlad 2011-01-23 04:43:37

在Windows中,行指示符实际上是\r\n,因此您最好的选择可能是在文件其他位置找不到其他字符(比如“| r”)来替换“\ r \ n”。 “),然后然后拆分被替换的字符。否则,如果你只是替换“\ r”,你最终可能会替换一个实际不在行尾的“\ r”(尽管这很可疑)。

你是如何在第一个地方读取文件的? .Net TextReader类有一个ReadLine()方法,使用它可以让你完全避免这个特殊问题。

+0

我想这并不需要。我错过了一些非常简单的东西,我没有将替换的字符串分配给原来的字符串,这就是为什么它不起作用。感谢您的评论虽然=] – 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,而不需要像现在这样执行字符串替换。

+0

当然,我知道我应该使用cleanLine = cleanLine.Replace();我也知道这是我的主要问题,并导致我的代码不工作。我错过了它,因为我没有睡很多时间。谢谢你们的建设性意见。Will =] +1 – deadlock 2011-01-23 04:59:15

如果您拨打:

string[] lines = File.ReadAllLines(location); 

它将从各行同时删除 '\ r' 和 '\ n' 你。

+0

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);