2013-07-01 80 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 

我需要顯示從文件1中,第一行從文件2 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(); 
       } 
      } 
      } 
     } 
} 

我無法從每個文件的第一行兩個元素進入循環。每次文件關閉時,程序都會從​​第一個文件的第一行開始。

+0

爲什麼不從每個文件中讀取所需的所有元素,隨時存儲它們,然後進行計算? – Borgleader

+0

爲4個ifstream變量創建並且不要在程序結束前關閉它們。 –

+0

如果你關閉並打開一個文件,你將再次從第一個 – banarun

回答

0

爲什麼不將整個矩陣讀入內存緩衝區,並從那裏獲取所需的字段?如果它實際上只有四個文件,每個文件有16個條目,那不是太昂貴,而且你沒有在文件中閱讀的麻煩。

0

我想你想在循環之前打開文件,這將保持文件內的數據指針到最後讀取的點。