2013-11-21 3 views
-3

EDIT:Как я могу заполнить многомерный массив из текстового файла?

Исходные значения таковы:

 mArray[0, 0] = 0; 
     mArray[0, 1] = 1; 
     mArray[0, 2] = 2; 
     mArray[0, 3] = 3; 
     mArray[1, 0] = 0; 
     mArray[1, 1] = 1; 
     mArray[1, 2] = 2; 
     mArray[1, 3] = 3; 
     mArray[2, 0] = 0; 
     mArray[2, 1] = 2; 
     mArray[2, 2] = 2; 
     mArray[2, 3] = 3; 
     mArray[3, 0] = 0; 
     mArray[3, 1] = 1; 
     mArray[3, 2] = 3; 
     mArray[3, 3] = 3; 

Тогда я хранить все значения в текстовом файле, поэтому у меня есть все мои ценности, как это внутри текстового файла ...

0 
1 
2 
3 
0 
1 
2 
3 
0 
2 
2 
3 
0 
1 
3 
3 

Моя настоящая проблема заключается в том, как пополнить тот же массив из текстового файла?

int mArray[,]; 

Как это сделать, чтобы заполнить мой массив из данных, хранящихся в текстовом файле? Как всегда, используя C# и в этом случае WPF.

+0

Итак, это двухмерный массив, в котором второе измерение имеет размер одного, потому что у вас есть только одномерные данные. – Servy

+1

Почему это многомерное? Я вижу только одно измерение. – EkoostikMartin

+0

Вы пытаетесь «развязать» эти строки текста (превратите их из одномерных в двумерные)? Если это так, из вашего примера не совсем ясно, как это должно быть сделано ... что здесь ждет? –

ответ

1

Возможно, вы имеете в виду что-то вроде этого? эта функция заполняет двумерный массив как можно лучше. если у вас есть массив 5x5 и 7 строк, функция возвращает массив 5 * 5, у которого есть первая ячейка ({0,0}, {0,1}, {0,2}, {0,3}, {0 , 4}, {1,0}, {1,1}), установленное для всего, что есть в вашем текстовом файле. оставшаяся ячейка равна нулю.

public static string[,] GetData(int row, int column, string filePath) 
    { 
     int[,] data = new string[row, column]; 
     using (StreamReader reader = File.OpenText(filePath)) 
     { 
      for (int r = 0; r < data.GetLength(0); r++) 
      { 
       for (int c = 0; c < data.GetLength(1); c++) 
       { 
        if (reader.EndOfStream) 
        { 
         return data; 
        } 

        //Note that Parse throw error if the string is not a valid int 
        //use it only if you anticipate that your file contain int only and other 
        //string should be considered as errors. otherwise use TryParse 
        data[r, c] = int.Parse(reader.ReadLine()); 
       } 
      } 
     } 

     return data; 
    } 
+0

Это действительно сработало, мне пришлось немного изменить его, но это сработало !!! Спасибо! –

1

Я не совсем уверен в вашем вопросе.
Вы просто пытаетесь заполнить массив строками файла?
Это просто, и это будет сделать это:

int[] mArray = File.ReadAllLines("pathAndFilename").Select(x => int.Parse(x)).ToArray(); 

Достаточно ли этого? Если нет, пожалуйста, уточните свой вопрос.

Используя больше информации я думаю, что вы хотите что-то более, как это:

 private static int[,] FillArrays(string file, int rightLength) 
     { 
      int[] mArray = File.ReadAllLines(file).Select(x => int.Parse(x)).ToArray(); 
      int size = mArray.Length/rightLength; 
      if (((mArray.Length^rightLength) >= 0) && (mArray.Length % rightLength != 0)) 
      { 
       size++; 
      } 
      int[,] arrayDos = new int[size, rightLength]; 
      int counter = 0; 
      int arrayNum = 0; 
      foreach (int i in mArray) 
      { 
       arrayDos[arrayNum, counter] = i; 
       counter++; 
       if (counter == rightLength) 
       { 
        counter = 0; 
        arrayNum++; 
       } 
      } 
      return arrayDos; 
     } 

И называть это так:

int[,] mArray = FillArrays(@"Z:\testnums.txt", 4); 

Вы можете перейти в нужном размере стороны:

{int[8, 2]} 
    [0, 0]: 0 
    [0, 1]: 1 
    [0, 2]: 2 
    [0, 3]: 3 
    [1, 0]: 0 
    [1, 1]: 1 
    [1, 2]: 2 
    [1, 3]: 3 
    [2, 0]: 0 
    [2, 1]: 2 
    [2, 2]: 2 
    [2, 3]: 3 
    [3, 0]: 0 
    [3, 1]: 1 
    [3, 2]: 3 
    [3, 3]: 3 

2 также будет работать с вашими данными примера.

{int[8, 2]} 
    [0, 0]: 0 
    [0, 1]: 1 
    [1, 0]: 2 
    [1, 1]: 3 
    [2, 0]: 0 
    [2, 1]: 1 
    [3, 0]: 2 
    [3, 1]: 3 
    [4, 0]: 0 
    [4, 1]: 2 
    [5, 0]: 2 
    [5, 1]: 3 
    [6, 0]: 0 
    [6, 1]: 1 
    [7, 0]: 3 
    [7, 1]: 3 
+0

'ReadAllLines' не возвращает' int' ... – Servy

+0

Doh! Вы правы, сэр. –

+0

и должен быть int [,] mArray; , а не int [] mArray; –

Смежные вопросы