0

4 つのファイルに 4*4 マトリックスがあります。各ファイルから最初の 2 つの要素を読み取り、それを列に表示する必要があります。以下に例を示します。

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();
               }
            }
          }
        }
}

各ファイルの最初の行の 2 つの要素をループに入れることができません。ファイルが閉じられるたびに、プログラムは最初のファイルの 1 行から再び開始されます。

4

2 に答える 2

0

行列全体をメモリ バッファに読み込んで、そこから必要なフィールドを取得してみませんか? それぞれ 16 のエントリを持つ 4 つのファイルのみである場合は、それほどコストがかからず、ファイルを読み回す手間もありません。

于 2013-07-01T06:58:42.043 に答える
0

ループの前にファイルを開きたいと思います。これにより、ファイル内のデータポインターが最後に読み取られたポイントに保持されます。

于 2013-07-01T05:18:31.467 に答える