【问题标题】:C#: Read a text file into a 2D char arrayC#:将文本文件读入二维字符数组
【发布时间】:2020-07-08 06:04:31
【问题描述】:

就像我上面提到的,我尝试将文本文件读入 2D 字符数组。 这是我的文件:

abcde
fghij
klmno
pqrst
uvwxy

这是我的代码:

var path = @"C:text.file";
        StreamReader sr = File.OpenText(path);
        {



            char[,] arr = new char[5, 5];

            for (int i = 0; i < 5; i++)
              {
                  for (int j = 0; j < 5; j++)
                  {
                    arr[i, j] = (Char)sr.Read();
                   Console.WriteLine(arr[i, j] + " = {0},{1}", i,j);
                  }
              }

            Console.WriteLine(arr[2,1]);
        }
    }

至少是我的输出:

1 = 0,0
2 = 0,1
3 = 0,2
4 = 0,3
5 = 0,4
 = 1,0

 = 1,1
6 = 1,2
7 = 1,3
8 = 1,4
9 = 2,0
0 = 2,1
 = 2,2
...

所以我的问题是,为什么,例如arr[1,0] 或 arr[1,1] 为空?

感谢您的帮助! sno0z3

【问题讨论】:

  • 可能是因为 StreamReader.Read 还会读取每行末尾的两个换行符。 (即 \r\n)
  • 有道理,你知道我该如何解决吗?
  • 你如何解析整数“int x = Int32.Parse(sr.ReadLine());”当您输入“fghij”时。
  • 用ReadLine整体读取一行然后使用ToCharArray字符串方法
  • 正如@jdweng 指出的那样,这不能是您的输入文件,因为第一个 Int.Parse 将与该输入一起抛出,并且不清楚您如何从此处每行的第一个字符中获得 1。跨度>

标签: c# arrays file char 2d


【解决方案1】:

问题是由于每行末尾存在换行符(并且换行符由 Windows 文本文件中的两个字符组成)。
因此,您可以在添加到数组之前检查这些字符,或者简单地读取该行(从而删除换行符),然后遍历获得的字符串,逐个提取字符并将它们添加到您的数组中

char[,] arr = new char[5, 5];

for (int i = 0; i < 5; i++)
{
   string curLine = sr.ReadLine();
   for (int j = 0; j < curLine.Length; j++)
   {
      arr[i, j] = curLine[j];
      Console.WriteLine(arr[i, j] + " = {0},{1}", i,j);
   }
}

【讨论】:

  • 愚蠢的问题......当我在 Linux 中创建我的测试文件时,我不会有问题吗?
  • 在 Linux 中,换行符只是一个字符,但 ReadLine 负责删除不需要的字符
  • 请记住,此解决方案不会检查意外条件,例如对于 5 个数组条目而言行太长或文件少于 5 行。
猜你喜欢
  • 2016-01-17
  • 2015-11-21
  • 2012-11-19
  • 2013-03-11
  • 2019-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多