3 Scilab |
Datei öffnen und schließen |
Text lesen schreiben |
Vektoren binär lesen und schreiben |
Matrizen binär lesen und schreiben |
Weitere Funktionen |
Die Funktion
mopen(Dateiname, Zugriff)
öffnet eine Datei. Der Zugriffsmode ist ein String, dieser muss
einen der drei Buchstaben "r" (read, Datei lesen), "w" (write,
Datei schreiben) oder "a" (append, an bestehende Datei anhängen)
enthalten. Soll sowohl gelesen als auch geschrieben werden, wird
der Kennbuchstabe für die zuerst durchzuführende Operation
verwendet, daran wird der Buchstabe "+" angehangen.
Um Binärdateien zu verarbeiten, wird ein Buchstabe "b"
angehangen.
Die Funktion gibt eine Liste aus 2 Elementen zurück: Filedeskriptor
(bei Erfolg ein positiver Integer-Wert) und Fehlercode.
Der Filedeskriptor fd wird in den folgenden Operationen
benutzt, um anzugeben, mit welcher Datei gearbeitet werden
soll.
Eine erfolgreiche geöffnete Datei muss nach Verwendung geschlossen werden, z.B. mit:
mclose(fd);
Diese Funktion liefert einen Fehlercode zurück.
Mit
mclose('all');
werden alle noch offenen Dateien geschlossen.
Mit
mfprintf(fd, Format [, Argument(e)]);
werden Daten als Text geschrieben.
Der Format-String kann Platzhalter enhalten, anstelle der
Platzhalter werden dann die entsprechenden Argumente eingefügt.
Details zu Platzhaltern finden Sie im Abschnitt Werte anzeigen /
mprintf-Anweisung.
Mit
mfscanf([Anzahl,] fd, Format);
werden Daten aus einer Textdatei gelesen.
Zurückgegeben wird eine Liste. Diese enthält als erstes Element die
Anzahl der erfolgreich verarbeiteten Platzhalter aus dem
Format-String. Daran schließen sich die gelesenen Werte an.
Im Beispiel werden zwei Zahlen in eine Datei ausgegeben, anschließend werden die Zahlen aus der Datei gelesen.
[ fd, ec ] = mopen('test.dat', 'w');
if fd > 0 then
mfprintf(fd, '%g\t%010.3g\n', %pi, 2*%pi);
mclose(fd);
else
mprintf('Datei kann nicht geschrieben werden.\n');
mprintf('Fehlercode = %d.\n', ec);
end
[ fd, ec ] = mopen('test.dat', 'r');
if fd > 0 then
[ n, v1, v2 ] = mfscanf(fd, '%e %e');
if n == 2 then
mprintf('2 Werte gelesen: %e %e\n', v1, v2);
else
if n == 1 then
mprintf('1 Wert gelesen: %e\n', v1);
else
mprintf('Kein Wert gelesen!\n');
endif
end
mclose(fd);
else
mprintf('Datei kann nicht gelesen werden.\n');
mprintf('Fehlercode = %d.\n', ec);
end
Mit
mput(Werte, Type, fd);
wird ein Vektor von Gleitkomma- oder Integerwerten in die Datei
fd geschrieben.
Der Typ (Standard: "l") wird durch einen der folgenden Strings
beschrieben:
Kennbuchstabe | Bedeutung |
---|---|
l | long (langer Integerwert) |
i | int (Integerwert) |
s | short (kurzer Integerwert) |
ul | unsigned long (vorzeichenloser langer Integerwert) |
ui | unsigned int (vorzeichenloser Integerwert) |
us | unsigned short (vorzeichenloser kurzer Integerwert) |
f | float (Gleitkommazahl mit einfacher Genauigkeit) |
d | double (Gleitkommazahl mit doppelter Genauigkeit) |
c | char (vorzeichenbehaftetes Byte) |
uc | unsigned char (vorzeichenloses Byte) |
Standardmäßig werden die Werte in Little-Endian-Byteorder gespeichert, um portable Binärdaten zu erzeugen. Durch Anhängen eines "l" oder "b" kann little- oder big-endian gezielt angefordert werden.
Mit
mget(Anzahl, Typ, fd) mgeti(Anzahl, Typ, fd)
wird ein Vektor von Gleitkommazahlen (mget()) oder
Integerwerten (mgeti()) mit der vorgegebenen Anzahl
an Werten eingelesen. Zurückgegeben wird der eingelesene
Vektor.
Mit der Anzahl 1 werden einzelne Werte geschrieben und gelesen.
Im Beispiel wird ein Vektor in Datei geschrieben, anschließend wieder eingelesen und angezeigt.
Vektor = [ 1.5 2.3 7.8 ]';
// Daten speichern
[ fd, err ] = mopen('test.dat', 'wb');
if fd > 0 then
mput(Vektor, 'd', fd);
mclose(fd);
else
mprintf('Fehler: Datei kann nicht geschrieben werden!\n');
end
// Daten lesen
[ fd, err ] = mopen('test.dat', 'rb');
if fd > 0 then
V2 = mget(3, 'd', fd);
mclose(fd);
disp(V2);
else
mprintf('Fehler: Datei kann nicht gelesen werden!\n');
end
Mit den Funktionen
fprintfMat(Dateiname, Matrix, [Format, Text]) [Matrix, Text] = fscanfMat(Dateiname [, Format])
kann eine Matrix in die angegebene Datei geschrieben bzw. aus einer Datei gelesen werden.
Der Format-String gibt das Datenformat zum Speichern an: %[Weite].[Genauigkeit]Typ
Typ-String | Bedeutung |
---|---|
lf | double (Gleitkommazahl mit doppelter Genauigkeit), immer mit Exponenten |
lg | double (Gleitkommazahl mit doppelter Genauigkeit), Darstellung nach Möglichkeit ohne Exponenten |
e | Gleitkommazahl mit einfacher Genauigkeit, Darstellung mit Exponenten |
f | Gleitkommazahl mit einfacher Genauigkeit, Darstellung ohne Exponenten |
g | Gleitkommazahl mit einfacher Genauigkeit, Darstellung nach Möglichkeit ohne Expontenten |
d i |
Integerwert |
Im Beispiel wird eine Matrix zuerst in Datei geschrieben, anschließend wieder gelesen.
Matrix = [ 1.3 1.4 1.5
2.3 2.4 2.5
3.3 3.7 3.9 ];
// Daten speichern
fprintfMat('test2.dat', Matrix, '%lg');
// Daten lesen
[M2, T2] = fscanfMat('test2.dat', '%lg');
Für Ein-/Ausgabe in Datei ist eine ganze Reihe weiterer Funktionen verfügbar. Diese werden im Abschnitt "Files: Input/Output functions" der Online-Hilfe beschrieben.