Matlab: Hromadné spracovanie dát
**Prečítajte si aj:**
[Zber akcelerometrických dát 2.0](/zber-akcelerometrickych-dat/)
**Úloha:**
Hromadný export .csv súborov obsahujúcich akcelerometrické dáta do Matlab-u pomocou funkcie **datacsvread***.
**Možné riešenia:**
csv_struct = dir('*.csv');
NMdata = {};
for i = 1:length(csv_struct)
NMdata{i} = datacsvread(csv_struct(i).name);
end
Prvý príkaz v poradí nám vráti **zoznam všetkých .csv súborov** nachádzajúcich sa v aktuálnom adresári. Názvy týchto súborov sú uložené v premennej csv_struct typu "struct array", konkétne v poli s názvom **name**. Druhým príkazom vytvoríme prázdny "cell array". Pomocou for slučky naplníme prázdny "cell array" výstupmi z funkcie datacsvread. Vstupnými argumentami do tejto funkcie sú názvy jednotlivých .csv súborov, ku ktorým pristupujeme pomocou **indexovania cez okrúhle zátvorky a operátora "."**.
NMdata = {};
for i = 1:30
filename = sprintf('NM%d.csv', i);
NMdata{i} = datacsvread(filename);
end
Na začiatku vytvoríme prázdny "cell array". Prvým príkazom vo for slučke priradíme pomocou funkcie **sprintf** premennej **filename** názov konkrétneho .csv súboru nachádzajúceho sa v adresári. Druhým príkazom vo for slučke naplníme prázdny "cell array" výstupmi z funkcie datacsvread. Vstupným argumentom do funkcie je stále názov .csv súboru.
NM_data = [];
for i = 1:30
NM.name = 'Natalia Mikusova';
NM.datetime = datestr(now);
filename = sprintf('NM%d.csv', i);
NM.data = datacsvread(filename);
NM_data = [NM_data, NM];
end
Prvým príkazom vytvoríme prázdne pole. Vo for slučke budeme pridávať obsah premennej NM typu "struct array". NM bude obsahovať tri samostatné polia: **name, datetime a data**. Polia plníme hodnotami pomocou **operátora "."**. Funkcia **datestr** uloží do poľa datetime aktuálny čas a dátum. Vstupný argument do funkcie datacsvread opäť meníme pomocou funkcie **sprintf**. V predposlednom riadku budeme jednotlivými iteráciami plniť premennú definovanú na začiatku.
*Funkcia datacsvread:
function data = datacsvread(fname)
data = [];
fid = fopen(fname, 'r');
fgets(fid); % skip initial empty line
fgets(fid); % skip labels
fgets(fid); % skip next empty line
while ~feof(fid)
line = fgets(fid); % get one data line
line = line(26:end); % kick out the time stamp
parsed = textscan(line, '%f,%f,%f,%f,%f,%f');
% parse the string: anglex, angley, anglez, accx, accy, accz
data = [data; cat(2, parsed{:})];
% add the parsed data to the matrix
fgets(fid); % skip next empty line
end
fclose(fid);
end