read multiple .csv files in 'for loop', extract and write data to .txt
17 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Stephen23
le 4 Oct 2022
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.
Réponses (2)
Benjamin Thompson
le 4 Oct 2022
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 commentaires
Benjamin Thompson
le 5 Oct 2022
Without having all the data files I was only guessing but glad you ended up with a good result anyway.
Voir également
Catégories
En savoir plus sur Data Import and Analysis dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!