This is documentation for Mathematica 4, which was
based on an earlier version of the Wolfram Language.
View current documentation (Version 11.1)

 Documentation /  Mathematica /  Das Mathematica Buch /  Die Prinzipien von Mathematica /  Dateien und Ströme /

InhaltExterne Programme

2.11.1 Lesen und Schreiben von Mathematica-Dateien

Besonders wenn Sie eine textorientierte Mathematica-Schnittstelle benutzen, werden Sie oft Dateien mit Definitionen und Ergebnissen von Mathematica lesen und schreiben müssen. In Abschnitt 1.11.1 wurde allgemein beschrieben, wie dies durchgeführt werden kann. Dieser Abschnitt beschreibt weitere Einzelheiten.

Lesen von Dateien

Dies zeigt den Inhalt der Datei factors.

In[1]:= !!factors

(* Factors of x^20 - 1 *)

(-1 + x)*(1 + x)*(1 + x^2)*(1 - x + x^2 - x^3 + x^4)*

(1 + x + x^2 + x^3 + x^4)*(1 - x^2 + x^4 - x^6 + x^8)

Dies liest die Datei ein und gibt den letzten ihrer Ausdrücke zurück.

In[2]:= <<factors

Out[2]=

Sollte Mathematica die Datei, die es lesen soll, nicht finden, so wird eine Meldung ausgegeben und dann das Symbol $Failed zurückgegeben.

In[3]:= <<faxors

Out[3]=

Mathematica-Eingabedateien können eine beliebige Anzahl von Ausdrücken enthalten. Jeder Ausdruck muß jedoch auf einer neuen Zeile beginnen. Die Ausdrücke können sich über soviele Zeilen wie nötig erstrecken. Genau wie in einer normalen interaktiven Mathematica-Sitzung werden die Ausdrücke verarbeitet, sobald sie vollständig sind. Beachten Sie jedoch, daß in einer Datei, anders als in einer interaktiven Sitzung, an jeder Stelle Leerzeilen eingefügt werden können, ohne daß sich dies in irgendeiner Weise auswirkt.

Wenn mit <<datei eine Datei eingelesen wird, so gibt Mathematica den letzten Ausdruck, der in der Datei evaluiert wurde, zurück. Mit dem Trick, Null als letzten Ausdruck einer Datei anzugeben, läßt sich vermeiden, daß durch das Lesen einer Datei ein sichtbares Ergebnis produziert wird.

Wenn Mathematica beim Lesen einer Datei auf einen syntaktischen Fehler stößt, zeigt es diesen an, überspringt den Rest der Datei und gibt dann $Failed zurück. Sollte der Syntaxfehler in der Mitte eines Paketes auftreten, welches BeginPackage und andere, den Kontext manipulierende Funktionen benutzt, so versucht Mathematica, den ursprünglichen Kontext, wie er vor dem Lesen des Paketes bestanden hat, wieder herzustellen.

Ausdrücke in Dateien schreiben

Dies schreibt einen Ausdruck in die Datei tmp.

In[4]:= Factor[x^6 - 1] >> tmp

Hier ist der Inhalt der Datei.

In[5]:= !!tmp

(-1 + x)*(1 + x)*(1 - x + x^2)*(1 + x + x^2)

Dies hängt an die gleiche Datei einen weiteren Ausdruck an.

In[6]:= Factor[x^8 - 1] >>> tmp

Beide Ausdrücke befinden sich jetzt in der Datei.

In[7]:= !!tmp

(-1 + x)*(1 + x)*(1 - x + x^2)*(1 + x + x^2)

(-1 + x)*(1 + x)*(1 + x^2)*(1 + x^4)

Wenn Sie ausdr >>> datei benutzen, fügt Mathematica jeden Ausdruck, den Sie neu eingeben, am Ende Ihrer Datei hinzu. Benutzen Sie jedoch ausdr >> datei, dann löscht Mathematica stattdessen den ursprünglichen Dateiinhalt vollständig, bevor es ausdr in die Datei einfügt.

Wenn Sie >> oder >>> benutzen, um Ausdrücke in Dateien zu schreiben, so werden die Ausdrücke gewöhnlich im Mathematica-Eingabeformat gegeben, damit Sie sie wieder in Mathematica einlesen können. Manchmal möchten Sie jedoch möglicherweise auch Ausdrücke in anderen Formaten abspeichern. Dies können Sie, indem Sie den von Ihnen ausgeschriebenen Ausdruck explizit mit einer Formatanweisung wie OutputForm einhüllen.

Dies schreibt einen Ausdruck im Ausgabeformat in die Datei tmp.

In[8]:= OutputForm[ Factor[x^6 - 1] ] >> tmp

Der Ausdruck in tmp ist nun im Ausgabeformat.

In[9]:= !!tmp

2 2

(-1 + x) (1 + x) (1 - x + x ) (1 + x + x )

Zumeist werden Dateien zum Abspeichern von Definitionen von Mathematica-Objekten benutzt, damit diese auch in späteren Mathematica-Sessionen wieder eingelesen werden können. Die Operatoren >> und >>> ermöglichen die Sicherung von Mathematica-Ausdrücken in Dateien. Mit der Funktion Save können Sie vollständige Definitionen von Mathematica-Objekten in einer zur Ausführung in späteren Mathematica-Sessionen geeigneten Form sichern.

Schreiben von Definitionen

Dies weist dem Symbol a einen Wert zu.

In[10]:= a = 2 - x^2

Out[10]=

Mit Save können Sie die Definition von a in eine Datei schreiben.

In[11]:= Save["eineDatei", a]

Hier ist die in der Datei gespeicherte Definition von a.

In[12]:= !!eineDatei

a = 2 - x^2

Wenn Sie in Mathematica ein neues Objekt definieren, so wird Ihre Definition oft von anderen Objekten abhängig sein, die Sie vorher definiert haben. Damit Sie die Definition Ihres neuen Objektes auch in einer späteren Mathematica-Session rekonstruieren können, ist es wichtig, daß Sie nicht nur die Definition des Objektes, sondern auch die Definitionen der anderen Objekte speichern, von denen es abhängig ist. Die Funktion Save durchsucht alle Definitionen der Objekte, die gespeichert werden sollen, und speichert auch automatisch alle Definitionen anderer Objekte mit ab, von denen sie erkennt, daß eine Abhängigkeit besteht. Um jedoch eine übergroße Ansammlung unwichtigen Materials zu vermeiden, erfaßt Save niemals Definitionen für Symbole mit dem Attribut Protected. Es wird angenommen, daß die Definitionen für diese Symbole bereits eingebaut sind. Unter Berücksichtigung solcher Definitionen sollte es immer so sein, daß beim Einlesen der durch Save erzeugten Ausgabe in eine neue Mathematica-Session die Definitionen Ihrer Objekte genau so aufgestellt werden, wie sie ursprünglich waren.

Dies definiert eine Funktion f, die von dem oben definierten Symbol a abhängig ist.

In[13]:= f[z_] := a^2 - 2

Dies sichert die gesamte Definition von f in einer Datei.

In[14]:= Save["fDatei", f]

Diese Datei enthält nicht nur die Definition von f selbst, sondern auch die Definition des Symbols a, von dem f abhängig ist.

In[15]:= !!fDatei

f[z_] := a^2 - 2



a = 2 - x^2

Die Funktion Save verwendet die Ausgabeformen Definition und FullDefinition, mit denen Definitionen von Mathematica-Symbolen gedruckt werden. In einigen Fällen könnte sich die direkte Verwendung dieser Ausgabeformen als nützlich erweisen.

Die Ausgabeform Definition[f] druckt die Folge von Definitionen, die für f erstellt wurden.

In[16]:= Definition[f]

Out[16]=

FullDefinition[f] führt die Definitionen von Objekten auf, von denen f abhängig ist.

In[17]:= FullDefinition[f]

Out[17]=

Wenn Sie Dateien für Mathematica-Eingabe erstellen, wollen Sie gewöhnlich, daß diese nur „reinen Text" enthalten, der direkt gelesen oder modifiziert werden kann. Manchmal möchte man aber vielleicht auch, daß der Inhalt einer Datei „verschlüsselt" wird, so daß diese zwar nicht direkt wie reiner Text gelesen oder modifiziert werden kann, aber trotzdem in Mathematica geladen werden kann. Mit der Mathematica-Funktion Encode läßt sich eine verschlüsselte Datei erzeugen.

Erzeugen und Lesen verschlüsselter Dateien

Hiermit wird ein Ausdruck in Reintext in die Datei tmp geschrieben.

In[18]:= Factor[x^2 - 1] >> tmp

Damit wird eine verschlüsselte Version der Datei tmp in die Datei tmp.x geschrieben.

In[19]:= Encode["tmp", "tmp.x"]

Dies sind die Inhalte der verschlüsselten Datei. Der einzig erkennbare Teil ist der spezielle Mathematica-Kommentar am Anfang.

In[20]:= !!tmp.x

(*!1N!*)mcm

_QZ9tcI1cfre*Wo8:) P

Verschlüsselte Dateien können mit dem Operator << in Mathematica eingelesen werden.

In[21]:= <<tmp.x

Out[21]=

Definitionen im internen Mathematica-Format speichern

Wenn sehr große oder komplizierte Definitionen eingelesen werden müssen, so wird man es häufig effizienter finden, diese Definitionen im internen Mathematica-Format statt als Text zu speichern. Dies wird mit DumpSave erreicht.

Dies speichert die Definition für f im internen Mathematica-Format.

In[22]:= DumpSave["fdatei.mx", f]

Out[22]=

Mit << können Sie immer noch die Definition einlesen.

In[23]:= <<fdatei.mx

<< erkennt, wenn eine Datei Definitionen im internen Mathematica-Format enthält, und verfährt entsprechend. Eine Feinheit besteht darin, daß sich das interne Mathematica-Format von einem Rechnersystem zum anderen unterschiedlich ist. Deshalb können .mx-Dateien, die auf einem Rechner erstellt werden, in der Regel nicht auf einem anderen gelesen werden.

Wird DumpSave["paket`", ... ] verwendet, dann werden Mathematica Definitionen in eine Datei mit einem Namen wie paket.mx/system/paket.mx geschrieben, wobei system den Typ des Computersystems identifiziert.

Dies erzeugt eine Datei, deren Name den Namen des gerade eingesetzten Rechnersystems enthält.

In[24]:= DumpSave["gffile`", f]

Out[24]=

<< wählt automatisch die Datei mit dem für Ihr Rechnersystem geeigneten Namen.

In[25]:= <<gffile`

Speicherung des vollständigen Zustandes einer Mathematica-Session

InhaltExterne Programme