我需要从文本文件读取并将行添加到数组中,但是存在一个问题。当我在记事本中打开文本文件时,一切看起来都很好
1
2
3
但是,如果我使用记事本++,文本板或任何其他文本编辑器打开,甚至进行复制粘贴,它将看起来像这样
1
2
3
4
代码如下:
using (var reader = new StreamReader(@"C:\Users\username\Desktop\Example\text1.txt".Replace("username", Environment.UserName)))
{
// Read the User Regex Format and add it to List
string[] temp = reader.ReadToEnd().Split('\n');
foreach (string s in temp)
RegexFormat.Add(s);
}
答案 0 :(得分:2)
文本文件可能包含Windows行尾。尝试使用
string[] temp= reader.ReadToEnd().Split(new[] { "\r\n", "\r", "\n"},StringSplitOptions.None);
说明:
对于文本文件,Unix和Windows使用不同的字符来表示换行符。 Windows使用两个字符,称为回车符(\r
)和换行符(\n
),而Unix仅使用换行符。您的文本文件可能有些奇怪,并且包含两种格式的行尾。因此,当您在notepad ++中打开它时,带有Windows结尾的行显示为空行。
您的旧程序仅检测到Unix行结尾。通过使用我提供的代码,程序在看到3个行尾中的任何一个时都会对字符串进行拆分:换行,回车或同时出现这两种情况。
答案 1 :(得分:0)
当EOL控制字符不正确时,会发生这种情况。 Windows用回车和换行符表示换行符。 (CRLF)
在Notepad ++中,您可以通过选择以下字符来检查这些字符:
查看>显示符号> [x]显示行尾
验证文件中还有哪些多余的字符或坏字符,然后需要修改脚本来替换或删除这些字符。
答案 2 :(得分:0)
只需跳过空行
using (var reader = ...){
while(!reader.EndOfStream){
var line = reader.ReadLine();
if(!string.IsNullOrWhitespace(line))
//add line
}
}