hey,
I have a very weird problem with trying to read in a binary file. it contains data in a matrix format. the number of rows and columns varies. So say in a given file you have 4 rows and 3columns. At the beginning of each row there is a flag that shows which positions in the row are filled. So the whole file would look something like this:when I read it, it would read and interprit the first two rows properly and the others it screws up.Code:Flag: 101 data: 1 3 Flag: 111 data: 1 2 3 flag: 001 data: 3 flag: 010 data: 2
here's the main read function:
Sorry it's so long.Code:int FlagBits, FlagBytes; unsigned char *Flag, *BinFlag; FlagBits = (vars.NumColumns/32)*32 + 32; // Flag size in bits FlagBytes = FlagBits/8; // Flag size in bytes Flag = new unsigned char[FlagBytes]; BinFlag =new unsigned char[FlagBits]; long Temp; float Value; int q, k, j, p=0, a,b; unsigned int num; float **mtxVicVals; mtxVicVals = new float*[vars.NumScan]; for(i=0; i<vars.NumRows; i++) mtxVicVals[i] = new float[vars.vectParmSelected.size()]; for (i=0; i<vars.NumRows; i++) // -> mega loop to go down rows, i= number of scan { for (j=0; j< FlagBytes; j++) // Reads in the flag fread(&Flag[j],sizeof(unsigned char), 1, inp); k=0; // bin flag position counter for (q=0 ; q<FlagBytes ; q++) // Flag is converted to binary { // in correct order for interpritation num = Flag[q]; for (j=0;j<8;j++) { a = num/2; b = num%2; if (b == 0) BinFlag[k] = 0; else BinFlag[k]=1; num = a; k++; } } for (j=0;j<vars.NumColumns; j++) // -> Second big loop to go across columns, { if (BinFlag[j] == 1) // checks if the parameter is on in the flag { // and scans in the value fread(&Temp, sizeof(long), 1, inp); fprintf(out, "temp = %d ", Temp); Temp = ((Temp & 0xFFFF) << 16) | ((Temp & 0xFFFF0000) >> 16); Value = (*(float*)&Temp) /4; /*if(Mask[j] == 1) { mtxVicVals[i][p] = Value; p++; }*/ } else if (BinFlag[j] ==0) Value = -99; /*else if (Mask[j] == 1 && BinFlag[j] == 0) { mtxVicVals[i][p] = -9999; p++; }*/ fprintf(out, "Val = %f ", Value); Value = 0; } fprintf(out, "\n\n======================\n\n"); } for(i=0; i<vars.NumRows; i++) delete mtxVicVals[i]; delete mtxVicVals; delete Flag; delete BinFlag;
also the mtxVicVals, the matrix that's commented out, it gives me a runtime error that memory could not be written.
The input file I provided is an example, I actually work with much bigger files and stops working at different points in the matrix.



LinkBack URL
About LinkBacks


