Distinguish between ASCII and Binary
16 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Tero
el 5 de Nov. de 2020
Respondida: DGM
el 25 de Mzo. de 2024
What could be an elegant way to distinguish an ASCII file from a Binary one? Specifically, I'm working with STL files that can be both, and I need a solution how to seperate those two
Thanks,
Tero
2 comentarios
Stephen23
el 5 de Nov. de 2020
Editada: Stephen23
el 5 de Nov. de 2020
The elegent way is to read the file format description. Wikipedia gives an outline:
Apparently STL text files must start with the string "solid", whereas STL binary files must NOT start with that string. So to know the difference, you just need to read the first five characters. And testing those five characters is easy in "an elegant way", certainly much faster and more elegant than parsing the entire file.
Chris Hooper
el 25 de Mzo. de 2024
I read a claim that some binary .stl files can still begin with "solid". not sure if its true.
Respuesta aceptada
Bruno Luong
el 5 de Nov. de 2020
I don't know if it's an elegant way but I just test if any charater is > 255
fid = fopen(stlfilename,'rt');
if fid > 0
try
c = textscan(fid,'%s','delimiter','\n');
fclose(fid);
catch ME
message = ME.message;
h = errordlg(message);
waitfor(h);
OK = -2;
return
end
else
OK = -2;
message = 'Cannot open STL file';
h = errordlg(message);
waitfor(h);
return
end
c = c{1};
c(cellfun(@isempty,c)) = [];
if max(cellfun(@max,c)) > 255
% Binary
...
else
% Ascii
...
end
3 comentarios
Ameer Hamza
el 5 de Nov. de 2020
This test can produce false negatives. For example
fid = fopen('file.bin', 'w');
fwrite(fid, [65 66 67 68], 'uint8')
fclose(fid)
Test
fid = fopen('file.bin','rt');
c = textscan(fid,'%s','delimiter','\n');
fclose(fid);
c = c{1};
c(cellfun(@isempty,c)) = [];
Result
>> max(cellfun(@max,c)) > 255
ans =
logical
0
Bruno Luong
el 5 de Nov. de 2020
We are talking about STL file, that can be ascii/binary, no any binary file.
Más respuestas (1)
Ver también
Categorías
Más información sobre Text Files 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!