Я портирую какой-то код написал в IDL в C ++, но файл данных находится в F77_UNFORMATTED IEEE-неотформатированная. Я не могу открыть данные напрямую (это очень большой файл), поэтому я наивно попытался сделать что-то вроде:
std::ifstream results(dataFile);
for ( int i = 0 ; i < 200 ; i++ )
{
std::cout <<" {{"<< results.rdbuf() << "}} " << std::endl;
}
Я получил немного … печати,
B??$B?}B?5?A\?@0\???A?R???=??fdA=-???y?9@AB?N3B,TB???@t?A??!B??BS,??BX??B?l?B[B?]?A?AqB?B?B?C?B1?A2?
Я проверил, скопировав с awk
первые 200 строк, и я получил то же самое.
Я хотел бы избежать решения, такого как чтение и сохранение всего из IDL в дружеском формате.
xxd datafile | more
возвращает:
0000000: 0080 1700 6d20 10b9 17f0 1c39 d245 24b9 ....m .....9.E$.
0000010: 2535 1b39 251b 39b9 07f7 1939 bba4 4db9 %5.9%.9....9..M.
0000020: f428 1939 dfb7 63b9 7ba2 1a39 f293 7ab9 .(.9..c.{..9..z.
0000030: dc1d 1e39 1b49 89b9 bb53 2139 b3f1 94b9 ...9.I...S!9....
0000040: 7071 2639 a8e2 a0b9 1a02 2a39 79b3 acb9 pq&9......*9y...
0000050: 5092 2f39 b570 b8b9 637f 3539 66d4 c4b9 P./9.p..c.59f...
0000060: 197c 3e39 06f5 cfb9 d6cf 4639 c825 dbb9 .|>9......F9.%..
0000070: 3762 5039 42df e5b9 06e7 5739 3575 efb9 7bP9B.....W95u..
0000080: c885 6039 e6e6 f8b9 fedb 6839 54b4 00ba ..`9......h9T...
0000090: 2480 7239 bbea 04ba b1b3 7b39 902f 08ba $.r9......{9./..
00000a0: a388 8239 084c 0bba be67 8639 324c 0dba ...9.L...g.92L..
00000b0: b020 8b39 844b 0fba 4297 8e39 f38d 10ba . .9.K..B..9....
00000c0: b6ee 9239 a055 11ba 2e73 9639 640f 11ba ...9.U...s.9d...
00000d0: ed11 9939 1f33 10ba 97df 9a39 8152 0eba ...9.3.....9.R..
00000e0: 65de 9c39 863e 0cba b5b0 9e39 3fe2 08ba e..9.>.....9?...
00000f0: ae9b a039 ac81 05ba 098f a139 81d9 00ba ...9.......9....
0000100: ae04 a239 b295 f7b9 8f56 a139 315f ecb9 ...9.....V.91_..
0000110: 2c5d a139 b19f e0b9 6f2d a139 5e0e d4b9 ,].9....o-.9^...
0000120: 96e0 a039 f24e c7b9 7b36 a039 cc1d b9b9 ...9.N..{6.9....
0000130: 338d 9e39 33ff aab9 5a4e 9c39 6aa9 9cb9 3..93...ZN.9j...
0000140: 0c3a 9a39 a6b0 8eb9 7760 9839 2bd3 80b9 .:.9....w`.9+...
0000150: 94ae 9539 6ea4 67b9 6c0e 9339 60d0 4cb9 ...9n.g.l..9`.L.
0000160: cda8 8f39 3274 33b9 e11c 8c39 ac0a 1bb9 ...92t3....9....
может быть немного полезной информации:
IDL Программа читает файл данных через for
петли,
for i=0, imax do begin
ReadU, d_file, a
ReadU, d_file, b
ReadU, d_file, c
ReadU, d_file, d
ReadU, d_file, e
ReadU, d_file, f
ReadU, d_file, g
ReadU, d_file, h
.... DO MATHS AND STUFFS ....
endfor
все переменные a
в h
являются fltarr(sizeX,sizeY,sizeZ)
(3D матрица с sixeX
= 128, sizeY
= 64 и sizeZ
= 47). Так что я думаю readU
при каждом вызове читает в файле матрицу и присваивает ее соответствующей переменной.
Задача ещё не решена.