필터 지우기
필터 지우기

Read multiple txt files and save them according to their name

조회 수: 3 (최근 30일)
Mathew Smith
Mathew Smith 2023년 8월 30일
편집: Mathieu NOE 2023년 8월 31일
Hello,
I would like to read multiple text files with names like A16.txt, B64.txt and save them like matrices in Matlab. Each of the files look like this below:
Time [s] Deformation Probe (X) [mm] Deformation Probe (Y) [mm] Deformation Probe (Z) [mm] Deformation Probe (Total) [mm]
1 1. -2.05900494e-002 9.53490478e-002 -5.00916689e-002 9.67559114e-002
2 2. -9.77241325e-003 0.06292072e-002 0.94899105e-003 5.13229044e-002
3 3. 5.98193922e-003 -8.41211991e-003 6.169048816 4.169208785
4 4. 2.79957587e-003 -8.3195684e-004 5.185089469 2.185214371
5 5. 4.77241325e-003 -5.06292072e-002 -1.94899105e-003 3.13229044e-002
6 6. 5.05900494e-002 -2.53490478e-002 2.00916689e-002 3.67559114e-002
7 7. -4.03850328e-003 5.24337929e-003 -5.280406982 5.280571362
8 8. -1.38934723e-003 3.12915198e-003 -2.274678171 2.274854119
Could you help me with it? Below is an example of script which reads it, but incorrently and I was not able to correct it.
d=dir('*.txt'); % all .txt files in working directory
N=length(d) % how many did we find?
A=zeros(24,N); % allocate for 24 points of data 1 column/file
for k=1:N
[fid,msg]=fopen(d(k).name,'r'); % open for read permission
if fid<0, error(['Failed fopen: ' d(k).name msg]),end % check opened it
A(:,k)=cell2mat(textscan(fid, '%*d %f', ...
'headerlines',1, 'collectoutput', 1));
fid=fclose(fid);
end
;
A

채택된 답변

Mathieu NOE
Mathieu NOE 2023년 8월 30일
hello
maybe this is what you want
A is now a cell array of structure that you can further expand if you need , for the time being you get the info of what txt file it's related and the data
for example here we have one file so
>> A{1}
struct with fields:
name: 'A16.txt'
data: [8×6 double]
and the data :
>> A{1}.datas =
1.0000 1.0000 -0.0206 0.0953 -0.0501 0.0968
2.0000 2.0000 -0.0098 0.0006 0.0009 0.0513
3.0000 3.0000 0.0060 -0.0084 6.1690 4.1692
4.0000 4.0000 0.0028 -0.0008 5.1851 2.1852
5.0000 5.0000 0.0048 -0.0506 -0.0019 0.0313
6.0000 6.0000 0.0506 -0.0253 0.0201 0.0368
7.0000 7.0000 -0.0040 0.0052 -5.2804 5.2806
8.0000 8.0000 -0.0014 0.0031 -2.2747 2.2749
d = dir('*.txt'); % all .txt files in working directory
N = length(d) % how many did we find?
for k=1:N
filename = d(k).name;
A{k}.name = filename;
A{k}.data =readmatrix(filename);
end
A{1}
  댓글 수: 4
Stephen23
Stephen23 2023년 8월 30일
편집: Stephen23 2023년 8월 30일
Rather than creating an inefficient cell array of scalar structures, you can simply use the structure array which already exists in your code:
d = dir('*.txt'); % d is a structure array
for k = 1:numel(d)
d(k).data =readmatrix(d(k).name);
end
This is more robust, uses less memory, creates fewer variables, no data duplication, and is more versatile:
Mathieu NOE
Mathieu NOE 2023년 8월 31일
편집: Mathieu NOE 2023년 8월 31일
yes indeed ! my brain wasn't working well that day
you're always right !

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Text Data Preparation에 대해 자세히 알아보기

태그

제품


릴리스

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by