【问题标题】:Trying to parse a text file line by line and split lines into a jagged array of words尝试逐行解析文本文件并将行拆分为锯齿状的单词数组
【发布时间】:2017-12-20 14:04:29
【问题描述】:

我正在尝试逐行读取文件的每一行,并将这些单独的行进一步划分为一个由它们各自的“单词”组成的数组,形成一个锯齿状数组,以便我可以进一步操作它们。如果有人熟悉我正在尝试代码挑战的第 12 天,所以我的输入看起来像

0 <-> 780, 1330
1 <-> 264, 595, 1439
2 <-> 296, 531, 1440

我希望每一行都是

array[0][0] = 0
array[0][1] = <-> 
array[0][2] = 780
array[0][3] = 1330
array[1][0] = 1 
... etc

我已经为此工作了一天,但我似乎无法让 C# 来执行此操作。这是我一直在尝试的解决方案的最新尝试

 static void Main(string[] args)
 {
     string[][] input = new string[2000][];
     string line;
     System.IO.StreamReader file = 
     System.IO.StreamReader(@"c:/theFilePath.txt");
     while ((line = file.ReadLine()) != null)
     {
         for (int i = 0; i < 2000; i++)
         {
             string[] eachArray = line.Split(null);
             input[i] = new string[] { eachArray };
         }
      }
      for (int i = 0; i < input.Length; i++)
      {
          for (int j = 0; j < input[i].Length; j++)
          {
             Console.WriteLine(input[i][j]);
          }
       }
   }

我得到的错误是“无法将类型字符串[]隐式转换为字符串”

但是锯齿状数组的每一行不应该是string[],而不是string吗?

我一定错过了这里幕后发生的事情的一些基本方面。 我曾尝试使用File.ReadAllLinesFile.ReadLines 并将它们解析为字符串数组,但问题总是归结为在循环中实例化数组。似乎无法做到这一点。

也欢迎任何其他在 C# 中解决此问题的方法,我只是想更好地理解这个问题。

【问题讨论】:

  • 我想应该是简单的input[i] = eachArray;。数组初始值设定项 (new string[] { }) 在 { } 内只能有 string
  • 我也试过了,但问题是它会一遍又一遍地继续打印同一行。正确分隔为索引,但它永远不会前进到文件的下一行。
  • line = file.ReadLine(); 应该在 for 循环中。
  • 成功了,谢谢!
  • input[i] = GetWords(line), (GetWords 是 here) 并且你不需要嵌套循环。

标签: c# jagged-arrays


【解决方案1】:

System.IO 中的File 类有方法ReadAllLines,可以在这里使用。 要拆分每一行并转换为数组,请使用 SelectToArray Linq 扩展方法(添加必需的 usings 以访问上述方法)

using System.IO;
using System.Linq;

string[][] input = File.ReadAllLines(@"c:/theFilePath.txt")
                       .Select(x => x.Split(' '))
                       .ToArray();

【讨论】:

  • 这个就更简洁了。感谢您的帮助!
  • @MikeWeiss,是的,Linq 通常有助于缩短代码,以前是用循环编写的。如果我的回答有帮助,请将其标记为已接受
  • 抱歉,对这一切还有点新意,现在标记为已接受,我一定会仔细研究 Linq
  • 祝你好运,看这里introduction-to-linq-queries
猜你喜欢
  • 2015-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2022-01-19
  • 2017-09-27
相关资源
最近更新 更多