У меня есть двоичный файл с заголовком 3600 байт, 13483 трассы (столбца), каждая с заголовком 240 байт. Я хочу пропустить заголовки и прочитать значения данных в матрице.
Я могу получить некоторые значения из файла, но от seismicDataNH[50][40] до seismicDataNH[50][54] должно быть [13, 17, 12, 5, 19, 51, 29, -118, - 127, -127, -50, 126, 126, 126, -32], чего я не понимаю.
Я не уверен, что правильно понимаю fread(), читает ли он файл как одну длинную строку значений или как несколько строк? Я предполагаю один длинный ряд, может быть, поэтому он не работает.
Вот код, который я написал для чтения файла:
#include <iostream>
using namespace std;
#define N_SAMP 1990
#define M_TR 13483
char tempArray [N_SAMP*M_TR];
char seismicData[1990][13483];
char seismicDataNH[1750][13483];
int main()
{
FILE*seismicFile;
seismicFile = fopen("NVGT-88-06.sgy","rb");
if (seismicFile!=NULL)
{
fseek(seismicFile, 3600*sizeof(char), SEEK_CUR);
fread(tempArray, sizeof(char), N_SAMP*M_TR, seismicFile);
puts("\n\nRead File successfully");
int c = 0;
for (int in=0; in<N_SAMP; in++)
{
for (int im=0; im<M_TR; im++)
{
seismicData[in][im] = tempArray[c];
c++;
}
}
puts("\nStored in matrix");
// Make matrix values without header values
for (int in=240; in < N_SAMP; in++)
{
for(int im=0; im < M_TR; im++)
{
seismicDataNH[in-240][im] = seismicData[in][im];
}
}
puts("Removed header");
puts("Test values: \n");
for (int it = 40; it<55; it++)
{
printf("%d\n", seismicDataNH[50][it]);
}
fclose(seismicFile);
}
return 0;
}
и вот файл данных (.sgy), если кто-то хочет взглянуть на него: https://www.dropbox.com/s/y8aa99yqhfyacc8/NVGT-88-06.sgy?dl=0
using
вверху. Остальное могло быть получено из программы на чистом C. - person Some programmer dude   schedule 22.09.2015M_TR
снаружи и петляN_SAMP
внутри. - person Sander De Dycker   schedule 22.09.2015seismicData[in][im] = tempArray[c];
больше не будет работать. Здесь я предполагаю, чтоfread()
читает двоичный файл как один длинный массив строк. - person vhflat   schedule 22.09.2015