【问题标题】:Unity C# Recognizing \n when reading in from text file从文本文件中读取时,Unity C#识别\ n
【发布时间】:2014-07-26 21:53:58
【问题描述】:

我有一个包含多行字符串的文本文件,例如“Commander”和“44105”。我正在将它们读入一个文件,然后将它们显示在屏幕上。我需要在某些点创建换行符,但是当我在文本文件中使用 \n 时,程序似乎不会将其识别为换行符,而只是在字符串中显示 \n 时显示在字符串中。

Reader = new StreamReader("Assets/CorrectAnswers.txt", Encoding.Default);
while (!Reader.EndOfStream && turnOff == false)
{
    lineReader = Reader.ReadLine();
    if (problemIndex == questionIndex)
    {
        answer = lineReader;
        turnOff = true;
    }
    questionIndex += 1;
}

那里的一切都很好,它只是不承认 \n 是一个特殊字符。我将非常感谢您在解决此问题方面的帮助。

【问题讨论】:

    标签: c# io unity3d text-files


    【解决方案1】:

    好的,在澄清问题后,这可能对您有用

    List<string> lines = new List<string>();
    using (StreamReader reader = new StreamReader("Assets/test.txt"))
    {
        string lines = reader.ReadToEnd();
        Debug.Log(lines);
    
        var splitText = lines.Split(new string[] { "|" }, // "\\n" in your case 
            System.StringSplitOptions.RemoveEmptyEntries);
    
        string result = String.Empty;
        foreach (var dataEntry in splitText)
        {
            string dataToParse = dataEntry.Trim();
            result += dataToParse + Environment.NewLine;
        }
    
        Debug.Log(result);
    }
    

    请注意,如果您尝试读取的文件非常大,ReadToEnd 可能对您不起作用,但为了举例,它会起作用。所以这里的逻辑是读取字符串中的文本文件,然后使用字符串的Split方法将初始字符串通过给定的分隔符数组拆分并返回一个字符串数组,RemoveEmptyEntries表示不会有空结果数组中的字符串。现在您已经确定了您的条目,您可以对它们进行所需的操作,在这种情况下,我们 Trim 它们(因此将没有前导和结尾空格)并且我们将 dataEntry 附加到结果中并添加一个新行(请注意如果您有大量数据,使用 StringBuilder 附加结果会更好,因为它比在此处附加更多信息的字符串要快:http://support.microsoft.com/kb/306822)

    编辑前

    从文本文件读取时,流阅读器会识别换行符,如果您有包含一些文本行的文本文件,您的方法将准确读取它们,但是如果您有一个带有“\n”的单行文本文件,它将与任何其他两个字符没有什么不同,例如,如果您的文本文件包含如下行:

    “文本\n更多文本”

    您的方法将只得到该字符串的一行。因此,如果您愿意,您可以手动解析以下字符串,将其拆分为“\n”并手动将新行添加到您的显示字符串中(如果这是您想要实现的,我可以帮助您)。

    但如果我是你,我只会将数据保存在带有标准换行符的文本文件中,读者可以识别,例如,你可以执行以下操作:

    List<string> dataToWrite = new List<string>(){
        "firstLine", "secondLine", "thirdLine"};
    
    using (StreamWriter writer = new StreamWriter("Assets/testWrite.txt"))
    {
        foreach (var line in dataToWrite)
        {
            writer.WriteLine(line);
            //writer.Write(line + Environment.NewLine);
            //writer.Write(line + "\r\n");
        }
    }
    

    请注意,这两个注释行也适用于您,有关新行的更多信息,您可以查看以下链接:http://social.msdn.microsoft.com/Forums/en-US/47af2197-26b4-4b9e-90e8-bfa9d5cd05b4/what-is-the-deference-between-r-n-and-rn-?forum=csharplanguage

    希望对你有帮助,问候:)

    【讨论】:

    • 我想你可能误解了我的问题——我不想将多个字符串写入一个文本文件,每个字符串都在自己的行上。相反,我试图读入一个包含换行符的长字符串,并让程序识别出在字符串中的这一点上,我想显示一个换行符。抱歉,如果我误解了您所介绍的内容。
    • 是的,我误解了这个问题,实际上我想知道您尝试实现的这两件事中的哪一件:) 我已经更新了我的答案,请注意分隔符设置为“|”但是没有理由它不能与 "\n" 或任何其他字符串一起使用,只要确保该字符串不存在于您的数据中的某个位置,并且如果您使用反斜杠,则必须像 " \\n" 问候 ;)
    猜你喜欢
    • 2016-07-14
    • 2020-07-01
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多