Octave Stapel- oder Batchverarbeitung von Dateien
1 Batchverarbeitung
Programme wie MATLAB oder Octave sind schon recht hilfreiche Programme, wenn es darum geht Daten mathematisch auszuwerten oder zu visualisieren. Dabei ist es oftmals extrem nervig, wenn mehrere Dateien des gleichen Typs verarbeitet werden – also mittels Stapel- oder Batchverarbeitung – sollen um bspw. Trainingsdaten für einen Klassifikator zu verarbeiten etc.. Für MATLAB ist mir dazu mal eine 32-Bit-DLL untergekommen, aber leider funktioniert diese nicht unter Octave.
2 Oct-Files - Funktionsumfang
Daher habe ich mir ein oct-File geschrieben, welches genau diese Aufgabe übernimmt. Oct-Files sind dabei das Pendant zu den mex-Files von Matlab und stellen eine C++-API bereit um den Funktionsumfang von Octave zu erhöhen.
DEFUN_DLD ( scandir , args, , "-*- texinfo -*-\n\
@deftypefn {Scan Dir} {} scandir (@var{n}, @var{m})\n\
A function that scans the passed directory for files with the given files extension.\n\
This could be helpfull for writing applications where serveral files schould be proccessed in batchmode.\n\
@end deftypefn" )
{
/* return values */
octave_value_list retval;
/* number of input arguments */
int nargin = args.length ();
/* do something fancy */
/* return results */
return retval;
}
Dabei habe ich mir ein entsprechendes octfile geschrieben, um einen angegebenen Pfad nach Dateien einer bestimmten Endung durchsucht und eine Liste dieser Dateien als CharMatrix zurück liefert. Dabei kann die so kreierte Funktion „scandir“ – sofern im Suchpfad von Octave – wie jede andere Funktion aufgerufen werden:
[~/Dokumente/Projekte/Messdaten/Volumen]$ ls
Tauchtechnik_Schallfeld_ZEUS WS1232-10KK200-03.3d
[~/Dokumente/Projekte/Messdaten/Volumen]$ octave -q
octave:1> dir = pwd
dir = /home/daniel/Dokumente/Projekte/Messdaten/Volumen
octave:2> name = scandir (dir, '3d' )
name = /home/daniel/Dokumente/Projekte/Messdaten/Volumen/WS1232-10KK200-03.3d
Somit ist es möglich mehrere Dateien (plus Pfad) automatisch in einer Liste zu verwalten und ggf. an seine Octave-Skripte übergeben und somit recht viel Zeit gespart werden. Damit ist nun die Batchverarbeitung recht einfach möglich. Ich hoffe das Ganze ist für den ein oder anderen nützlich.