필터 지우기
필터 지우기

how to load multiple files and do the computation for each of them and write the output in consequent rows

조회 수: 1 (최근 30일)
i have a list of engine data files and im supposed to automate the process of decoding them and finding the average and etc. the average output is supposed to be directly written to an excel sheet. this process is to be done for all the files in the folder.
the codes i used are the following:
to read multiple files
numfiles = 6;
mydata = cell(1,numfiles);
for k = 1:numfiles
myfilename = dlmread(sprintf('test%d.xlsx',k));
mydata{k} = importdata(myfilename);
end
to compute
T.message=categorical(T.message);
B = T(T.message=='18FF0803x',:);
columns = B(:,7:end);
%accessing the first column
engine_temperature = columns{:,1};
engine_temperature = hex2dec(engine_temperature);
engine_temperature(:,1) = 1*engine_temperature(:,1) - 40;
mean_engine_temperature = mean(engine_temperature);
%accessing the second column
engine_oil_pressure = columns{:,2};
engine_oil_pressure = hex2dec(engine_oil_pressure);
engine_oil_pressure(:,1) = 0.02*engine_oil_pressure(:,1);
mean_engine_pressure = mean(engine_oil_pressure);
to write the output to the excel sheet
writecell(mean_engine_temperature,filename,'Sheet','Temperatures','Range','B');
can anyone please help me to put this code in a loop such that all the files are opened and decoded one after the other and the mean temperature and pressure values are printed in consequent rows and columns.

채택된 답변

Jakob B. Nielsen
Jakob B. Nielsen 2020년 2월 24일
Your loop will want to start with grabbing all files in a folder. uigetfile with the MultiSelect option will work wonders here:
[Name,Path]=uigetfile({'*.xlsx*'},'MultiSelect','on');
entirefile=fullfile(Paths,Names);
Then start your loop. It wants to run a number of times equal to the number of elements in your entirefile cell, as you also have in your own code. Within this loop, do all your loading, calculation and writing. To avoid cluttering the workspace, you might want to look into a structure and dot indexing.
for i=1:numel(entirefile);
%your entire code including
enginedata(i).raw=importdata(entirefile{i});
enginedata(i).temperature = your temperature calculation
enginedata(i).oilpressure = oil pressure calculation
%and so on
%finally, to write in consecutive fields the results, simply keep indexing your things:
celltarget=['B',num2str(i)]; %B1 first run, B2 2nd run etc.
writecell(mean_engine_temperature,filename,'Sheet','Temperatures','Range',celltarget);
end
  댓글 수: 5
Jakob B. Nielsen
Jakob B. Nielsen 2020년 2월 26일
Ah right. I think you can loop it in like this;
for j=1:size(columns,1)
data(i).temperature(j) = mean((hex2dec(columns{j,1}))-40);
end
that way you give hex2dec just one input at a time. Although your column there contains a bunch of 60 entries which is not a valid input for hex2dec either, so you will need to fix that somehow, as well.
Padmamalini  T H
Padmamalini T H 2020년 2월 26일
Thank you so much sir. You solved my problem. Thanks for sparing your time for this.

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Data Type Conversion에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by