2013-07-01 4 views
0

У меня есть 4 * 4 матрица в 4 файлах. Мне нужно прочитать первые два элемента из каждого файла и отобразить его в столбце. Ниже приведен пример:Прочитайте первые два элемента из нескольких файлов C++

File 1  File 2  File 3  File 4 
1 2 3 4  2 3 4 5  3 5 8 9  1 4 6 9 
3 4 4 5  3 4 5 6  6 7 9 2  6 0 8 6 
1 2 4 5  4 5 6 6  8 7 6 5  4 5 6 7 
1 2 3 4  4 4 7 9  3 4 5 6  5 6 7 9 

мне нужно отобразить первую строку 2 элементов столбцов из файла 1, первый ряд элементов 2 столбцов из файла 2 и так далее:

1 + 2 (File 1, 1st row 2 elements) 
2 + 3 (File 2, 1st row 2 elements) 
3 + 5 (File 3, 1st row 2 elements) 
1 + 4 (File 4, 1st row 2 elements) 
3 + 4 (file 1, 2nd row 2 elements) 
3 + 4 (file 2, 2nd row 2 elements) 
6 + 7 (File 3, 2nd row 2 elements) 

и так далее ..

//std::fstream infile; 
string st1 = "file_"; 
string st2 = ".txt"; 
string st3 = "_"; 
string filename; 
string mystring; 
float fading[16][16]; 


     for(int row = 0 ; row < 5 ; ++row) 
     { 
     for(int column = 0 ; column < 5 ; ++column) 
      { 

      for (int i = 1; i < 3; i++) 
      { 
       for(int j = 1; j < 3 ;j++) 
       { 
       stringstream ss, ss1; 
       ss << i; 
       ss1 << j; 
       filename = st1 + ss.str() + st3 + ss1.str() + st2; 
       std::fstream infile; 
       infile.open(filename.c_str()); 
       if(infile.is_open()) 
       { 
       infile >> fading[row][column]; 
       cout << "fading[" << row << "][" << column << "] " << fading[row][column] << std::endl; 
       } 
       else 
        std::cout << " file " << filename << " not open" << std::endl; 
       infile.close(); 
       } 
      } 
      } 
     } 
} 

Я не могу получить первую строку из двух элементов из каждого файла в цикл. Каждый раз, когда файл закрывается, программа снова запускается из 1 строки первого файла.

+0

Почему бы не прочитать все элементы, которые вам нужны из каждого файла, сохранить их, когда вы идете, а затем выполнить ваши вычисления? – Borgleader

+0

Создайте для 4 'ifstream' переменных и не закрывайте их до конца программы. –

+0

Если вы закрываете и открываете файл, вы снова будете читать с первого – banarun

ответ

0

Почему бы не прочитать все матрицы в буферах памяти и извлечь нужные вам поля? Если на самом деле это всего четыре файла по 16 записей, это не слишком дорого, и у вас нет проблем с чтением в вашем файле.

0

Я предполагаю, что вы хотите открыть файл перед циклом, который будет хранить указатели данных внутри файла до точки, где он был в последний раз прочитан.

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