I just want to read data from a txt file,why it's unintelligible text,may anybody can help me??? thx
code :
filename='test2.txt';
fileID=fopen(filename,'r');
formatSpec='%d %d %d %d %d %d %d %d %d %s';
size=[10,inf];
A=fscanf(fileID,'%d %d %d %d %d %d %d %d %d %s',size);
fprintf(formatSpec,A);
fclose(fileID);
________________________________________________________________
txt data :
0 213 1038 241 1072 10000 1 0 0 "Biker"
0 211 1038 239 1072 10001 1 0 1 "Biker"
0 211 1038 239 1072 10002 1 0 1 "Biker"
0 211 1038 239 1072 10003 1 0 1 "Biker"
0 211 1038 239 1072 10004 1 0 1 "Biker"
0 211 1038 239 1072 10005 1 0 1 "Biker"
0 211 1038 239 1072 10006 1 0 1 "Biker"
0 211 1038 239 1072 10007 1 0 1 "Biker"
____________________________________________________________
result:

5 commentaires

madhan ravi
madhan ravi le 8 Avr 2019
Upload your text file.
wenhuan wu
wenhuan wu le 8 Avr 2019
ok ,can you help me :)
T = readtable('test2.txt');
table2cell(T)
amazing bro! but what wrong in my code?
Guillaume
Guillaume le 8 Avr 2019
As was pointed out to me by Peter recently, converting the table to a cell array is not a good idea. It's going to use a lot more memory for no useful gain. Keep the data as a table.
madhan ravi
madhan ravi le 8 Avr 2019
Noted with care :)

Connectez-vous pour commenter.

 Réponse acceptée

Guillaume
Guillaume le 8 Avr 2019

0 votes

what wrong in my code
You're using fscanf to read both numbers and text. it doesn't work very well for that. In particular, the documentation is clear:
"If formatSpec contains a combination of numeric and character specifiers, then fscanf converts each character to its numeric equivalent. This conversion occurs even when the format explicitly skips all numeric values (for example, formatSpec is '%*d %s')"
So you get a A matrix that is nothing but numbers with the text having been converted to numbers (character code of each character).
In addition, you're telling fscanf that the output should have 10 rows: 9 numbers + 1 string. Actually, in your text file, the output should have 16 rows: 9 numbers + 7 characters. However, if one of the line happened to have a string with a different number of characters, you would have a problem as you can no longer reshape the output in a matrix.
You can use indeed use readtable to read your text file. It's the simplest and most efficient way. If you want to use low-level functions, use textscan:
filename='test2.txt';
fileID=fopen(filename,'r');
formatSpec='%d %d %d %d %d %d %d %d %d %s'; %I'd use %q instead of %s
size=[10,inf];
filecontent = textscan(fileID, formatSpec);
fclose(fileID);
table(filecontent{:}) %pretty display

1 commentaire

wenhuan wu
wenhuan wu le 8 Avr 2019
thanks to tell me so much!your answer is very clearly,you have a very kind heart!

Connectez-vous pour commenter.

Plus de réponses (1)

Catégories

En savoir plus sur Creating, Deleting, and Querying Graphics Objects dans Centre d'aide et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by