ファイル .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 列目の数字のみ 編集: 現時点では、ファイルをテキスト ファイルとして読み取ろうとしています。