【问题标题】:C# read from text File and add to string arrayC# 从文本文件读取并添加到字符串数组
【发布时间】:2018-08-26 07:54:20
【问题描述】:

我需要从一个文本文件中读取并将这些行添加到一个数组中,但是,有一个问题。当我在记事本中打开文本文件时,一切看起来都很好

1
2
3

但如果我使用 notepad++、textpad 或任何其他文本编辑器打开,甚至进行复制粘贴,它会看起来像这样

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

【问题讨论】:

  • 这与 C# 无关,您的文本文件存在格式问题,可能文本文件中的字符在粘贴到记事本时会被剥离,但是当您复制时并粘贴到 Notepad++ 或 Textpad 中保留那些“隐藏”字符,只需复制并粘贴到记事本中,记事本将删除任何“惊喜”字符,然后从记事本复制到 Notepad++ 或 Textpad,如果你开始,在所有 3 个编辑器中应该是相同的带记事本
  • 您可以尝试在十六进制编辑器中打开文件,看看多余的字符是什么
  • 当我从记事本复制粘贴并粘贴到另一个编辑器时,结果仍然很糟糕
  • 有时记事本不显示一些特殊字符,在这种情况下我会更信任记事本++,如果只是这种情况,这似乎不是一个与编程相关的问题。
  • 我投票结束这个问题,因为这不是一个编程问题

标签: c#


【解决方案1】:

文本文件可能包含 windows 行结尾。尝试使用

string[] temp= reader.ReadToEnd().Split(new[] { "\r\n", "\r", "\n"},StringSplitOptions.None);

说明: 对于文本文件,Unix 和 Windows 使用不同的字符来表示换行符。 Windows 使用两个字符,称为回车符 (\r) 和换行符 (\n),而 Unix 仅使用换行符。您的文本文件可能有一些奇怪的东西,并且包含两种格式的行尾。因此,当您在 notepad++ 中打开它时,以 Windows 结尾的行显示为空行。

您的旧程序仅检测到 Unix 行尾。通过使用我提供的代码,程序会在看到以下 3 个行尾中的任何一个时拆分字符串:换行符、回车符或两者兼而有之。

【讨论】:

  • 我无法使用它:无法从 string[] 转换为 char
  • 它现在可以工作了 :) 你能告诉我为什么做 new[] { "\r\n", "\r", "\n"} 修复它而 '\n' 没有?
【解决方案2】:

当 EOL 控制字符不正确时会发生这种情况。 Windows 用回车和换行表示换行。 (CRLF)

在 Notepad++ 中,您可以通过选择来检查这些字符:

查看 > 显示符号 > [x] 显示行尾

验证您的文件中有哪些额外字符或坏字符,然后您需要修改脚本替换或删除这些字符。

【讨论】:

  • 我在“CR”或“CRLE”行的末尾看到
【解决方案3】:

跳过空行

using (var reader = ...){
    while(!reader.EndOfStream){
        var line = reader.ReadLine();
        if(!string.IsNullOrWhitespace(line))
            //add line 
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 2016-07-27
    • 1970-01-01
    相关资源
    最近更新 更多