0

ファイル .GRF から 1 列目と 3 列目の数値を読み取りたい。openoffice でファイルを開くと、正しい値が表示されます。

 0,9415818      0      0      0      5,927979      0     -2,397739      0     -5,052835     
 0,9792913      0     -1,915871E-03      0      0,032      0     -2,397739      0     -5,052835     
 1,149846      0     -1,220657E-03      0      1,229596      0     -2,397739      0     -5,052835     
 1,445044      0      4,183967E-07      0      0,2993191      0     -2,397739      0     -5,052835     
 1,825022      0      2,269486E-03      0      0,362183      0     -2,397739      0     -5,052835     
 2,320204      0      4,960121E-03      0      0,1981004      0     -2,397739      0     -5,052835     
 2,719088      0      7,585314E-03      0      0,1872567      0     -2,397739      0     -5,052835     
 3,125158      0      0,0103124      0      0,1614714      0     -0,4537098      0     -4,165784     
 3,494056      0      1,281744E-02      0      0,1635456      0     -0,4537098      0     -4,165784

[... more rows]



507,287      0      0,6060305      0      4,375222      0      219,7832      0      7,147406     
 453,6478      0      0,585957      0      4,592038      0      219,7832      0      7,147406     
 357,4476      0      0,5346767      0      5,044852      0      219,7832      0      7,147406     
 226,6828      0      0,4426026      0      5,784178      0     -211,0841      0     -4,519847     
 135,4868      0      0,3230323      0      6,631006      0     -163,2869      0     -7,731806     
 75,26476      0      0,1839096      0      7,556637      0     -78,28072      0     -8,599443     
 1,750205      0      4,814587E-02      0      8,456      0     -11,77379      0     -10,12357     
 0,1572775      0     -0,1142587      0      9,47      0     -2,074077      0     -9,702723     
 0,2199499      0     -0,2657275      0      10,343      0      3,000968E-02      0     -10,00545 

ファイルを読み取ろうとしているコードは次のとおりです(以前はファイルのサイズと行数を計算していました)

    //Matrix ROWSx2 where I save the values
    double **mat = new double * [numRows]; 
    for (int i = 0; i < numRows; i++) 
       mat[i] = new double [numCol];

    double dataNumber = 00.00;
    std::ifstream fileStream(nombreFich, std::ios::in | std::ios::binary);
    fileStream.seekg (0, ios::beg);
    if (fileStream.is_open()) {
                    for(int i=0; i<numRows; i++) {
                            for(int j=0; j<numCol; j++) {
                                    fileStream.read((char*)&dataNumber, sizeof(double));  //read and move the pointer 8bytes
                                    mat[i][j] = dataNumber;
                                    fileStream.seekg (sizeof(double), ios::cur); //move 8bytes more (read third column)
                            }
                            //put the pointer at the beginning of the next row 
                            // 5 columns + 2bytes (\n=CR+LF)
                            fileStream.seekg ((sizeof(double)*5)+2, ios::cur);
                    }
                    fileStream.close();
    } else
      cout << "Error opening the file"; 

フロートを使用して実行しようとしましたが、機能しません。私はwindows64bitsを使用していますが、doubleのサイズは8バイトで正しいと思います。主な問題は、ファイルを書き込まないことです。これは他のプログラムの出力であり、c ++で1列目と3列目の値を取得する必要があります。ファイルには273行があり、これらの間にCR + LFがあり、9列しかありません。

出力でわかるように、マットに保存した値はファイルの値よりもはるかに小さいです。

    size of the file (20266)
    position   value        position   value
    Row:0   0    num 6.22783e-038 16   num 1.00408e-264
    Row:1   74   num 1.20267e-153 90   num 1.00482e-264
    Row:2   148  num 1.20267e-153 164  num 1.00482e-264
    Row:3   222  num 1.00506e-264 238  num 1.26392e-076
    Row:4   296  num 1.83054e-076 312  num 5.94315e-038
    Row:5   370  num 3.42701e-062 386  num 1.72238e-047
    Row:6   444  num 2.9507e-260 460   num 2.34245e-154
    Row:7   518  num 2.00661e-052 534  num 2.34247e-154
    Row:8   592  num 9.51165e-043 608  num 1.65633e-153
    Row:9   666  num 2.31282e-057 682  num 5.87605e-062
    Row:10   740  num 2.34247e-154 756  num 2.9507e-260
    Row:11   814  num 2.00359e-076 830  num 6.82018e-038
    Row:12   888  num 5.15436e-062 904  num 2.31696e-052
    Row:13   962  num 9.6363e-092 978  num 9.6363e-092
    Row:14   1036  num 1.00482e-264 1052  num 1.00604e-264
    Row:15   1110  num 1.83087e-076 1126  num 6.52861e-038
    Row:16   1184  num 7.54927e-096 1200  num 2.71478e-033
    Row:17   1258  num 1.00408e-264 1274  num 1.00408e-264
    Row:18   1332  num 1.00458e-264 1348  num 2.34246e-154
    [...]

しかし...ファイルを完全に読み取り、すべての情報をchar *に保存すると、結果は次のようになります。

    20266buffer
    0,9415818       0       0       0       5,927979        0      -2,397739        0      -5,052835
    0,9792913       0      -1,915871E-03    0       0,032   0      -2,397739        0      -5,052835
    1,149846        0      -1,220657E-03    0       1,229596        0      -2,397739        0      -5,052835
    1,445044        0       4,183967E-07    0       0,2993191       0      -2,397739        0      -5,052835
    1,825022        0       2,269486E-03    0       0,362183        0      -2,397739        0      -5,052835
    2,320204        0       4,960121E-03    0       0,1981004       0      -2,397739        0      -5,052835
    2,719088        0       7,585314E-03    0       0,1872567       0      -2,397739        0      -5,052835
    3,125158        0       0,0103124       0       0,1614714       0      -0,4537098       0      -4,165784
    3,494056        0       1,281744E-02    0       0,1635456       0      -0,4537098       0      -4,165784
    [...more rows]
    0,2199499       0      -0,2657275       0       10,343          0       3,000968E-02    0      -10,00545
    ²²²²½½½½½½½½¯■
    File complete in memory

では、どうすれば正しく読めるのでしょうか。1 列目と 3 列目の数字のみ 編集: 現時点では、ファイルをテキスト ファイルとして読み取ろうとしています。

4

1 に答える 1