read multiple .csv files in 'for loop', extract and write data to .txt
14 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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 comentarios
Stephen23
el 4 de Oct. de 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.
Respuestas (2)
Benjamin Thompson
el 4 de Oct. de 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 comentarios
Benjamin Thompson
el 5 de Oct. de 2022
Without having all the data files I was only guessing but glad you ended up with a good result anyway.
Ver también
Categorías
Más información sobre Data Import and Analysis en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!