我想从文件 .GRF 中读取第一列和第三列数字。如果我用 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,我认为双精度的大小是正确的,8 字节。主要问题是我不写文件,它是其他程序的输出,我必须用 c++ 获取第一列和第三列的值。我只知道该文件有 273 行,其中 CR+LF 和 9 列。
正如您在输出中看到的,我保存在 mat 中的值比文件值小得多:
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
那么,我怎样才能正确阅读呢?只有第一列和第三列的数字编辑:目前我正在尝试将文件作为文本文件读取。