read multiple .csv files in 'for loop', extract and write data to .txt
16 ビュー (過去 30 日間)
古いコメントを表示
I am having some difficulties reading multiple .csv files in a 'for loop', extracting and writing data to .txt My code is below. There are ~150 .csv files in a single folder. I want to extract selected rows/columns from each file (the same row and column #'s in every file) then write the extracted data to .txt file with ~150 readings in 3 columns for processing. Any help or advice is appreciated. My code below only extracts one data point.
% Read multiple .csv noise files (LD831) LCeq-LAeq values and 1/3-OB
files = dir('*.csv');
% Then iterate over the files struct to read each file.
for i=1:length(files)
%data = readmatrix(files(i).name); % or csvread(files(i).name)
% process data
data = xlsread(files(i).name, 'B81:AK82'); % read noise file 1/3-OB data
LC_LA = xlsread(files(i).name, 'B63:B63'); % LCeq - LAeq reading
% Extract dB values for VLFN and LFN
VLFN = 10*log10(10.^(data(2,1)/10)+10.^(data(2,2)/10)+10.^(data(2,3)/10)+10.^(data(2,4)/10)+10.^(data(2,5)/10)+10.^(data(2,6)/10));
LFN = 10*log10(10.^(data(2,7)/10)+10.^(data(2,8)/10)+10.^(data(2,9)/10)+10.^(data(2,10)/10)+10.^(data(2,11)/10)+10.^(data(2,12)/10)+10.^(data(2,13)/10)+10.^(data(2,14)/10));
%MFN =
%HFN =
writematrix(LC_LA,'deltaC_Rox.txt'); % save to txt file
% need to add VLFN, LFN values to .txt file ...HOW?
end
2 件のコメント
Stephen23
2022 年 10 月 4 日
You can set the WRITEMATRIX option 'WriteMode' to 'append' and then carefully specify the range you wish to write to each time:
But most likely it would be simpler to collect the data into one array within the loop and save it once after the loop.
回答 (2 件)
Benjamin Thompson
2022 年 10 月 4 日
So building on Stephen's comment. You may also get better results using readmatrix or readtable than xlsread.
% Read multiple .csv noise files (LD831) LCeq-LAeq values and 1/3-OB
files = dir('*.csv');
outputmatrix = zeros(length(files),3) % Not sure how many columns here but you said three
% Then iterate over the files struct to read each file.
for i=1:length(files)
%data = readmatrix(files(i).name); % or csvread(files(i).name)
% process data
data = xlsread(files(i).name, 'B81:AK82'); % read noise file 1/3-OB data
LC_LA = xlsread(files(i).name, 'B63:B63'); % LCeq - LAeq reading
% Extract dB values for VLFN and LFN
VLFN = 10*log10(10.^(data(2,1)/10)+10.^(data(2,2)/10)+10.^(data(2,3)/10)+10.^(data(2,4)/10)+10.^(data(2,5)/10)+10.^(data(2,6)/10));
LFN = 10*log10(10.^(data(2,7)/10)+10.^(data(2,8)/10)+10.^(data(2,9)/10)+10.^(data(2,10)/10)+10.^(data(2,11)/10)+10.^(data(2,12)/10)+10.^(data(2,13)/10)+10.^(data(2,14)/10));
%MFN =
%HFN =
outputmatrix(i,:) = [data LC_LA];
% need to add VLFN, LFN values to .txt file ...HOW?
end
writematrix(outputmatrix,'deltaC_Rox.txt'); % save to txt file
2 件のコメント
Benjamin Thompson
2022 年 10 月 5 日
Without having all the data files I was only guessing but glad you ended up with a good result anyway.
参考
カテゴリ
Help Center および File Exchange で Data Import and Analysis についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!