我建议使用锯齿状数组,这样如果您遇到一行中有超过 10 列的情况,它不会抛出超出范围的错误。
我还建议使用File.ReadAllLines
,因为它将返回文件中所有行的数组。
像这样的东西(未经测试)应该让你去:
string[] fileData = File.ReadAllLines(@"C:\Users\apr13mpsip\Documents\Visual Studio 2010\Projects\iStellarMobile\iStellarMobile\Puzzle\educational.txt");
string[] lineValues;
int row = 0;
int col;
string[][] rowcol = new string[fileData.Length][];
foreach (string line in fileData)
{
lineValues = line.Split(new string[]{ ',' }, StringSplitOptions.None);
rowcol[row] = new string[lineValues.Length];
col = 0;
foreach (string value in splits)
{
rowcol[row][col] = value;
col++
}
row++;
}
这段代码的作用如下:
1. 用文本文件中的行填充数组`fileData`。
2. 设置一个数组来保存每一行的分割结果。
3. 为 row 和 col 声明变量,并将 row 设置为 0。
4. 将锯齿状数组“rowcol”的第一维设置为从“ReadAllLines”返回的行数组的长度(即行数)。
5. 遍历 `fileData` 中的每一行,执行以下操作:
一个。在 ',' 上拆分当前行,并将结果放在 `lineValues` 中。
湾。将当前行的第二个`rowcol`数组设置为等于长度
数组`lineValues`(列数)。
C。将 `col` 变量设置为 0(第一列)。
d。循环遍历 `lineValues` 中的每个值,将当前值分配给
当前行的正确列,然后增加列计数器。
6. 一旦内部循环完成,增加行计数器。
Edit
rowcol
是一个锯齿状数组(数组的数组),这基本上意味着您有一个数组,其中每个元素都是另一个数组引用。这些数组引用中的每一个都可以(但不必)具有不同的长度(在您的情况下它们没有)。
string rowcol[][] = new string[fileData.Length][];
这会将锯齿状数组 rowcol 初始化为长度等于文件中的行数 (10)。现在数组中有 10 个元素,但它们都是空的。
rowcol[row] = new string[lineValues.Length];
这会将当前元素(行)的数组引用初始化为等于拆分值的长度(数量)。继续您的示例,您知道数组中元素“row”处有“x”个元素(拆分中的值的数量),但它们为空。
rowcol[row][col] = value;
您知道有一个可以访问的值(字符串)。
因此,如果您在内部循环中,并且您的代码将打印 and 的值rowcol[0][0]
,rowcol[1][0]
那么在第一次通过内部循环之后,您将获得 in 的值rowcol[0][0]
,但您不会进入,rowcol[1][0]
因为您还没有到第 1 行,你还在第 0 行。
我在控制台应用程序中对此进行了测试,并在外循环完成后使用以下代码段打印了锯齿状数组的值:
for (int i = 0; i < rowcol.GetLength(0); i++)
{
for (int j = 0; j < rowcol[i].GetLength(0); j++)
{
Console.WriteLine("Row {0}, Col {1}: {2}", i, j, rowcol[i][j]);
}
}
这导致以下输出(未显示整个输出,仅足以给出一般概念):
第 0 行,第 0 列:h
第 0 行,第 1 列:e
第 0 行,第 2 列:l
第 0 行,第 3 列:l
第 0 行,第 4 列:o
第 0 行,第 5 列:
第 0 行,第 6 列:
第 0 行,第 7 列:
第 0 行,第 8 列:
第 0 行,第 9 列:
第 1 行,第 0 列:o
第 1 行,第 1 列:
第 1 行,第 2 列:
第 1 行,第 3 列:
第 1 行,第 4 列:
第 1 行,第 5 列:
第 1 行,第 6 列:
第 1 行,第 7 列:
第 1 行,第 8 列:
第 1 行,第 9 列:
第 2 行,第 0 列:l
第 2 行,第 1 列:我
第 2 行,第 2 列:v
第 2 行,第 3 列:e
第 2 行,第 4 列:
第 2 行,第 5 列:
第 2 行,第 6 列:
第 2 行,第 7 列:
第 2 行,第 8 列:
第 2 行,第 9 列:
……
第 9 行,第 0 列:
第 9 行,第 1 列:
第 9 行,第 2 列:
第 9 行,第 3 列:d
第 9 行,第 4 列:
第 9 行,第 5 列:
第 9 行,第 6 列:
第 9 行,第 7 列:
第 9 行,第 8 列:
第 9 行,第 9 列: