【问题标题】:Saving Text to array将文本保存到数组
【发布时间】:2014-03-13 18:00:52
【问题描述】:

我一直使用此链接作为示例,但一直遇到问题: 2d Array from text file c#

我有一个文本文件,其中包含:

1 1 0 0
1 1 1 0
0 0 0 1
0 1 0 0

我正在尝试使用该功能:

static void Training_Pattern_Coords()
{
    String input = File.ReadAllText(@"C:\Left.txt");

    int i = 0, j = 0;
    int[,] result = new int[4, 4];
    foreach (var row in input.Split('\n'))
    {
        j = 0;
        foreach (var col in row.Trim().Split(' '))
        {
            result[i, j] = int.Parse(col.Trim());
            j++;
        }
        i++;      
    }
    Console.WriteLine(result[1, 3]);

    Console.ReadLine();
}

但是我不断收到错误消息(输入字符串格式不正确):

foreach (var row in input.Split('\n'))

我认为这与文本文件中的空格有关,但我不完全确定。感谢您的帮助!

【问题讨论】:

  • 对不起,文本文件是一个 4x4 数组,它们之间有空格,但它在问题中显示为一行:
  • 这些行很可能被\r\n(回车/换行)分隔。
  • 刚刚尝试了相同的,它的工作原理。您的行没有完全由\n 分隔,而是\r\n

标签: c#


【解决方案1】:

使用File.ReadLines代替File.ReadAllText。这样做你就不需要使用Split('\n')

int[,] result = new int[4, 4];

var lines = File.ReadLines(@"C:\Left.txt")
               .Select(x => x.Split()).ToList();
for (int i = 0; i < 4; i++)
{
    for (int j = 0; j < 4; j++)
    {
        result[i, j] = int.Parse(lines[i][j]);
    }
}

【讨论】:

  • 他应该使用ReadLines 而不是ReadAllLines,因为他只使用过foreaching,以减少内存开销。
【解决方案2】:

尝试ReadAllLines 而不是ReadAllText

【讨论】:

    【解决方案3】:

    替换任何\r(回车)

    input = input.Replace('\r',' ');
    

    【讨论】:

      【解决方案4】:

      将您的 \r 替换为“\r\n”

      试试这个:

      foreach (var row in input.Split("\r\n"))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-01
        • 1970-01-01
        • 2018-06-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多