Read a Special Text File

9 vues (au cours des 30 derniers jours)
AEW
AEW le 22 Avr 2022
Commenté : AEW le 23 Avr 2022
I was wondering if there is a quick way to read the following text file sample where the first data line starts with a bracket. I would like to avoid the hassle of manually removing the bracket from every file I obtain. I use the following command for now after I remove the bracket.
Thanks.
data = textscan(Fopen, '%d %f %d %d %d;', 'HeaderLines',2)
file.txt
  1 commentaire
Stephen23
Stephen23 le 23 Avr 2022
A simple and very efficient approach would be to simply define the square bracket as whitespace, which you can do using TEXTSCAN's WHITESPACE option. Another good approach would be to use a fixed-width import via READTABLE.
Using STR2NUM is not very efficient.

Connectez-vous pour commenter.

Réponse acceptée

Stephen23
Stephen23 le 23 Avr 2022
Modifié(e) : Stephen23 le 23 Avr 2022
Here are two much more efficient approaches.
The first is exactly like you are doing now, just adding the WHITESPACE option to efficiently ignore the square bracket:
fnm = 'textfile.txt';
fmt = '%d%f%d%d%d;';
opt = {'HeaderLines',2, 'Whitespace',' \t['};
fid = fopen(fnm,'rt');
data = textscan(fid, fmt, opt{:})
data = 1×5 cell array
{11130×1 int32} {11130×1 double} {11130×1 int32} {11130×1 int32} {11130×1 int32}
fclose(fid);
The second is to import the file as table, which has headers and may be more convenient to access:
opt = detectImportOptions(fnm, 'FileType','fixedwidth', ...
'VariableWidths',[6,9,16,16,16], 'VariableNamesLine',1, ...
'VariableNamingRule','preserve', 'Range',3, 'Whitespace',' [', ...
'ExtraColumnsRule','ignore');
tbl = readtable(fnm,opt)
tbl = 11130×5 table
Sample Time Commanded Pos Encoder 1 Pos Encoder 2 Pos ______ _____ _____________ _____________ _____________ 0 0 0 0 0 1 0.001 0 0 0 2 0.002 0 0 0 3 0.003 0 1 0 4 0.004 0 4 0 5 0.004 0 7 0 6 0.005 0 14 0 7 0.006 0 20 0 8 0.007 0 27 0 9 0.008 0 37 0 10 0.009 0 47 0 11 0.01 0 57 1 12 0.011 0 66 3 13 0.012 0 76 4 14 0.012 0 87 6 15 0.013 0 98 7
  1 commentaire
AEW
AEW le 23 Avr 2022
Thank you!

Connectez-vous pour commenter.

Plus de réponses (2)

Voss
Voss le 22 Avr 2022
Modifié(e) : Voss le 22 Avr 2022
% read file into character vector data
data = fileread('textfile.txt');
% remove the first two lines
idx = find(data == newline(),2);
data(1:idx(end)) = [];
% convert to numeric
M = str2num(data);
% show some results
format long
disp(M(1:10,:));
0 0 0 0 0 1.000000000000000 0.001000000000000 0 0 0 2.000000000000000 0.002000000000000 0 0 0 3.000000000000000 0.003000000000000 0 1.000000000000000 0 4.000000000000000 0.004000000000000 0 4.000000000000000 0 5.000000000000000 0.004000000000000 0 7.000000000000000 0 6.000000000000000 0.005000000000000 0 14.000000000000000 0 7.000000000000000 0.006000000000000 0 20.000000000000000 0 8.000000000000000 0.007000000000000 0 27.000000000000000 0 9.000000000000000 0.008000000000000 0 37.000000000000000 0
disp(M(end-9:end,:));
1.0e+05 * 0.111200000000000 0.000098460000000 0 1.003280000000000 0.222970000000000 0.111210000000000 0.000098470000000 0 1.002280000000000 0.222750000000000 0.111220000000000 0.000098480000000 0 1.001270000000000 0.222530000000000 0.111230000000000 0.000098480000000 0 1.000280000000000 0.222310000000000 0.111240000000000 0.000098490000000 0 0.999280000000000 0.222090000000000 0.111250000000000 0.000098500000000 0 0.998290000000000 0.221870000000000 0.111260000000000 0.000098510000000 0 0.997310000000000 0.221640000000000 0.111270000000000 0.000098520000000 0 0.996330000000000 0.221420000000000 0.111280000000000 0.000098530000000 0 0.995360000000000 0.221190000000000 0.111290000000000 0.000098540000000 0 0.994390000000000 0.220970000000000
  2 commentaires
AEW
AEW le 23 Avr 2022
Thank you!
Voss
Voss le 23 Avr 2022
You're welcome!

Connectez-vous pour commenter.


David Hill
David Hill le 22 Avr 2022
r=readmatrix('file.txt');%see if this will work
  3 commentaires
David Hill
David Hill le 22 Avr 2022
If you attach the text file, I would be able to help better.
AEW
AEW le 22 Avr 2022
Please find it attached.
Thanks.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Data Import and Export dans Help Center et File Exchange

Produits


Version

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by