Я хотел бы предложить использовать зазубренный массив, таким образом, если вы столкнулись с ситуацией, когда у вас есть более 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. Populates the array `fileData` with the lines from the text file.
2. Sets up an array to hold the split result on each line.
3. Declares variables for row and col, and sets row to 0.
4. Sets the first dimension of the jagged array `rowcol` to the length of the array of lines returned from `ReadAllLines` (i.e., the number of rows).
5. Loop through each line in `fileData`, doing the following:
a. split the current line on ',' and put the results in `lineValues`.
b. Set the second array of `rowcol` for the current row equal to the length
of the array `lineValues` (number of columns).
c. Set the `col` variable to 0 (first column).
d. Loop through each value in `lineValues`, assigning the current value to
the proper column for the current row, and then increment the column counter.
6. Once the inner loop is done, increment the row counter.
Редактировать rowcol
является зазубренный массив (массив массивов), что в основном означает, что у вас есть массив, где каждый элемент является другой ссылкой на массив. Каждая из этих ссылок массива может (но не обязательно) иметь разную длину (в вашем случае они этого не делают).
string rowcol[][] = new string[fileData.Length][];
Это инициализирует массив jcged rowcol с длиной, равной количеству строк в вашем файле (10). Теперь у вас есть 10 элементов массива, но все они равны нулю.
rowcol[row] = new string[lineValues.Length];
Это инициализирует ссылку на массив для текущего элемента (строки), чтобы равняться длине (число) значений от раскола. Продолжая свой пример, вы знаете, что в элементе «строка» есть элементы «x» (количество значений из раскола), но они равны нулю.
rowcol[row][col] = value;
У вас есть значение (строка), к которому вы можете получить доступ.
Так что, если вы во внутреннем цикле, и у вас есть код, который будет печатать значение rowcol[0][0]
и rowcol[1][0]
, после того, как в первый раз через внутренний цикл вы будете иметь значение в rowcol[0][0]
, но вы не будете в rowcol[1][0]
, потому что вы не получили в строку-все же, вы все еще на строке 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]);
}
}
Это приводит следующий вывод (весь выход не отображается, просто достаточно, чтобы дать общее представление):
Row 0, Col 0: h
Row 0, Col 1: e
Row 0, Col 2: l
Row 0, Col 3: l
Row 0, Col 4: o
Row 0, Col 5:
Row 0, Col 6:
Row 0, Col 7:
Row 0, Col 8:
Row 0, Col 9:
Row 1, Col 0: o
Row 1, Col 1:
Row 1, Col 2:
Row 1, Col 3:
Row 1, Col 4:
Row 1, Col 5:
Row 1, Col 6:
Row 1, Col 7:
Row 1, Col 8:
Row 1, Col 9:
Row 2, Col 0: l
Row 2, Col 1: i
Row 2, Col 2: v
Row 2, Col 3: e
Row 2, Col 4:
Row 2, Col 5:
Row 2, Col 6:
Row 2, Col 7:
Row 2, Col 8:
Row 2, Col 9:
....
Row 9, Col 0:
Row 9, Col 1:
Row 9, Col 2:
Row 9, Col 3: d
Row 9, Col 4:
Row 9, Col 5:
Row 9, Col 6:
Row 9, Col 7:
Row 9, Col 8:
Row 9, Col 9:
Вы пытаетесь получить доступ к 'rowcol' как 2-мерный массив, когда вы объявили это как одномерный массив. – Tim
Что вы пытаетесь сделать с линиями? то есть, почему вы используете 2-мерный массив? – Tim
, потому что у меня есть txtfile, у которого есть 10 строк и 10 запятых в каждой строке, поэтому я разделяю запятые, я получаю 10 столбцов. – user2376998