Read a Special Text File

조회 수: 9 (최근 30일)
AEW
AEW 2022년 4월 22일
댓글: AEW 2022년 4월 23일
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
Stephen23
Stephen23 2022년 4월 23일
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.

댓글을 달려면 로그인하십시오.

채택된 답변

Stephen23
Stephen23 2022년 4월 23일
편집: Stephen23 2022년 4월 23일
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
AEW
AEW 2022년 4월 23일
Thank you!

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Voss
Voss 2022년 4월 22일
편집: Voss 2022년 4월 22일
% 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
AEW
AEW 2022년 4월 23일
Thank you!
Voss
Voss 2022년 4월 23일
You're welcome!

댓글을 달려면 로그인하십시오.


David Hill
David Hill 2022년 4월 22일
r=readmatrix('file.txt');%see if this will work
  댓글 수: 3
David Hill
David Hill 2022년 4월 22일
If you attach the text file, I would be able to help better.
AEW
AEW 2022년 4월 22일
Please find it attached.
Thanks.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Data Import and Export에 대해 자세히 알아보기

제품


릴리스

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by