Borrar filtros
Borrar filtros

skip data when reading binary

34 visualizaciones (últimos 30 días)
Shane
Shane el 1 de Jul. de 2016
Comentada: Image Analyst el 1 de Jul. de 2016
I have a binary data file, and I am reading it as such.
fileID = fopen('2016.06.27_15.12.07_1.A.bin');
SDDdata = fread(fileID, 1E6, 'uint16' , 'ieee-le');
fclose all;
However, I want to skip every other data point, or every 3, etc. As the file is incredibly large and I want to to some testing with ignoring data. Looking up the fread command I can see there is a skip options, but I could not get it to work for this? It seemed to do nothing?
  2 comentarios
James Tursa
James Tursa el 1 de Jul. de 2016
Please show the code you are using for skipping. Are you sure you are inputting the number of bytes to skip and not the number of values?
Walter Roberson
Walter Roberson el 1 de Jul. de 2016
Good point about it being in bytes .

Iniciar sesión para comentar.

Respuestas (1)

Walter Roberson
Walter Roberson el 1 de Jul. de 2016
In R2016b I tested by writing out uint8(0:255) repeatedly, and then doing several tests
bytes = uint8(0:255);
fid = fopen('testfread.bin', 'w');
for K = 1 : 4096; fwrite(fid, bytes, 'uint8'); end
fclose(fid);
fid = fopen"testfread.bin', 'r');
skip = 0; frewind(fid); data0 = fread(fid, [1 100], 'uint8', skip, 'ieee-le')
skip = 1; frewind(fid); data1 = fread(fid, [1 100], 'uint8', skip, 'ieee-le')
skip = 2; frewind(fid); data2 = fread(fid, [1 100], 'uint8', skip, 'ieee-le')
fclose(fid)
The output was exactly what I expected: first consecutive bytes [0 1 2 3 ...] for skip 0, then every second byte [0 2 4 6 ...] for skip 1, then every third byte [0 3 6 9 ...] for skip 2. Skip seems to work correctly on my system.
  2 comentarios
James Tursa
James Tursa el 1 de Jul. de 2016
Worked for me too, which is why I want OP to post the exact code being used.
Image Analyst
Image Analyst el 1 de Jul. de 2016
Why didn't you try it for uint16? for completeness, I do that below:
% Create sample data file.
bytes = uint16(0:255);
fid = fopen('testfread.bin', 'w');
for K = 1 : 4096; fwrite(fid, bytes, 'uint16'); end
fclose(fid);
% Read it back in.
fid = fopen('testfread.bin', 'r');
numbersToSkip = 0;
bytesToSkip = numbersToSkip * 2; % Multiply by 2 for uint16, which is 2 bytes
frewind(fid);
data0 = fread(fid, [1 100], 'uint16', bytesToSkip, 'ieee-le')
numbersToSkip = 1;
bytesToSkip = numbersToSkip * 2; % Multiply by 2 for uint16, which is 2 bytes
frewind(fid);
data1 = fread(fid, [1 100], 'uint16', bytesToSkip, 'ieee-le')
numbersToSkip = 2;
bytesToSkip = numbersToSkip * 2; % Multiply by 2 for uint16, which is 2 bytes
frewind(fid);
data2 = fread(fid, [1 100], 'uint16', bytesToSkip, 'ieee-le')
fclose(fid)
It's a little bit trickier since you have to multiply the number to skip by 2 since there are two bytes in a uint16 number.

Iniciar sesión para comentar.

Categorías

Más información sobre Text Data Preparation en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by