load and do operations on multiple file in a loop

5 次查看(过去 30 天)
Hi,
I have my files named 'Us2asp_001.txt', 'Us2asp_002.txt, .......'Us2asp_00n.txt'.
I want to read the files and do similar operations in each of them.
I read about it and got to know that sprintf is a solution. However, the files are saved into a cell array and I am not sure how to do the further calculations.
I am rather new to matlab. Can you please help me with this?
I have attached the code which I want to write in a loop.
Thank you in advance.
Regards
Dipen
data1=readtable('Upasp2_001.txt');
data2=readtable('Upasp2_002.txt');
data3=readtable('Upasp2_003.txt');
%% Changing units
data1{:,2:end}=data1{:,2:end}*-1000;
data2{:,2:end}=data2{:,2:end}*-1000;
data3{:,2:end}=data3{:,2:end}*-1000;
%% Calculation
data1{:,7}=data1{:,3}+data1{:,5};
data1{:,8}=data1{:,4}+data1{:,6};
data1{:,9}=sqrt(data1{:,7}.^2+data1{:,8}.^2);
data1.Properties.VariableNames([7 8 9])={'Px','Py','Ptot'};
data2{:,7}=data2{:,3}+data2{:,5};
data2{:,8}=data2{:,4}+data2{:,6};
data2{:,9}=sqrt(data2{:,7}.^2+data2{:,8}.^2);
data2.Properties.VariableNames([7 8 9])={'Px','Py','Ptot'};
data3{:,7}=data3{:,3}+data3{:,5};
data3{:,8}=data3{:,4}+data3{:,6};
data3{:,9}=sqrt(data3{:,7}.^2+data3{:,8}.^2);
data3.Properties.VariableNames([7 8 9])={'Px','Py','Ptot'};
%% Plotting
figure
plot(data1.uxtop,data1.Ptot,data2.uxtop,data2.Ptot,data3.uxtop,data3.Ptot);
legend('Mesh 1','Mesh2','Mesh3');
title('Load displacement');
xlabel('ux (mm)');
ylabel('Total Load applied (P) kN');
xlim([0,10]);

采纳的回答

Luna
Luna 2019-1-11
编辑:Luna 2019-1-11
Hi Dipen,
As far as I understand you want to read all the files in a specific folder with a for loop and do the calculations.
I wrote some code for you, you can check if it works correctly.
(Please don't forget to read comments.)
%% this part gives you the txt file name list in your folder
dirName = 'C:\Users\....\Desktop\NewFolder'; % folder path (please edit this as your own)
files = dir( fullfile(dirName,'*.txt') ); % list of all *.txt files
files = {files.name}'; % file names
%pre allocation for legend for the plot
legendString = cell(1,numel(files));
%% for loop
for i = 1:numel(files) % for loop for each file
% readtable
data = readtable(files{i});
% changing units
data{:,2:end}=data{:,2:end}*-1000;
% Calculation
data{:,7}=data{:,3}+data{:,5};
data{:,8}=data{:,4}+data{:,6};
data{:,9}=sqrt(data{:,7}.^2+data{:,8}.^2);
data.Properties.VariableNames([7 8 9])={'Px','Py','Ptot'};
% plot
figure;
plot(data.uxtop,data.Ptot); % plots the ith file data
hold on; % holds the plot for the next loop
legendString{i} = ['Mesh',sprintf('%d',i)]; % creates legend string as MeshX where X is a number
end % end for loop
%% legend,title,axis properties for plotted figure
legend(legendString);
title('Load displacement');
xlabel('ux (mm)');
ylabel('Total Load applied (P) kN');
xlim([0,10]);
ps. If you want to shorten your calculations section, please share an example data(txt) and desired output.
  2 个评论
Dipen Bista
Dipen Bista 2019-1-11
Hi Luna,
It works perfectly.
Thank you very much :).
Attached files
where calculation is to be performed.
  • Upasp2_001.txt
  • Upasp2_002.txt
The plot of 'uxtotal' vs 'Ptot' from these files should be compared to
plot of 'uxtotal' vs 'Ptot' from the 'labtotal.txt'
Best Regards,
Dipen

请先登录,再进行评论。

更多回答(1 个)

madhan ravi
madhan ravi 2019-1-11
Lookup cell2mat() , horzcat() , vertcat() and cellfun() to work with cells.
  1 个评论
Dipen Bista
Dipen Bista 2019-1-11
Hi Madhan Ravi
Thank you for the answer.
My matlab skills are not that good.
Could you please write how would you wirte the code in matrix for the above problem I worte if you would have done it?
Best Regards,
Dipen

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Classical Control Design 的更多信息

产品


版本

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by