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 /

Externe ProgrammeBenennen und Finden von Dateien

2.11.3 Fortgeschrittenes Thema: Ströme und Ein- und Ausgabe auf elementarer Ebene

Dateien und Pipes sind Beispiele für allgemeine Mathematica-Objekte, die als Ströme bezeichnet werden. In Mathematica wird ein Strom als Quelle für Ein- oder Ausgabe verstanden. Es gibt viele Operationen, die Sie auf Strömen anwenden können.

Sie können sich >> und << als Mathematica-Ein- und -Ausgabefunktionen auf einer „höheren Ebene" vorstellen. Sie basieren auf einem Satz Ein- und Ausgabeprimitiven auf elementarer Ebene, die direkt mit Strömen arbeiten. Mit diesen Primitiven können Sie mehr Kontrolle darüber ausüben, wie im Detail Mathematica die Ein- und Ausgabe vornimmt. Sie müssen dies zum Beispiel häufig tun, wenn Sie Mathematica-Programme schreiben, die Zwischenwerte in Dateien oder Pipes speichern oder von dort wiedergewinnen.

Auf elementarer Stufe sieht das Grundschema zum Schreiben einer Ausgabe in einen Strom folgendermaßen aus: Zuerst rufen Sie zum „Öffnen des Stroms" OpenWrite oder OpenAppend auf, um Mathematica mitzuteilen, daß Sie eine Ausgabe in eine bestimmte Datei oder in ein externes Programm schreiben wollen, und außerdem in welcher Form die Ausgabe geschrieben werden soll. Wenn der Strom geöffnet wurde, können Sie Write oder WriteString aufrufen, um eine Folge von Ausdrücken oder Zeichenketten zum Strom zu schreiben. Wenn Sie damit fertig sind, rufen Sie Close zum „Schließen des Stroms" auf.

Ströme in Mathematica

Wenn Sie eine Datei oder eine Pipe öffnen, so erzeugt Mathematica ein „Strom-Objekt", das den mit der Datei oder der Pipe verknüpften offenen Strom spezifiziert. Das Strom-Objekt enthält im allgemeinen den Namen der Datei oder den in einer Pipe verwendeten externen Befehl, dies jeweils zusammen mit einer eindeutigen Zahl.

Das Strom-Objekt muß eine eindeutige Zahl enthalten, weil es im allgemeinen mehrere Ströme geben kann, die gleichzeitig mit derselben Datei oder demselben Programm verbunden sind. Es können zum Beispiel mehrere verschiedene Exemplare desselben externen Programms gestartet werden, wobei jedes mit einem anderen Strom verbunden ist.

Haben Sie einen Strom geöffnet, so können Sie dennoch mit einem einfachen Datei- oder externen Befehlsnamen auf ihn verweisen, solange nur ein Strom mit diesem Objekt verknüpft ist.

Hiermit wird ein Ausgabestrom zur Datei tmp geöffnet.

In[1]:= stmp = OpenWrite["tmp"]

Out[1]=

Hiermit wird eine Folge von Ausdrücken in die Datei geschrieben.

In[2]:= Write[stmp, a, b, c]

Da nur ein Strom mit der Datei tmp verknüpft ist, kann einfach mit dem Dateinamen auf ihn verwiesen werden.

In[3]:= Write["tmp", x]

Hiermit wird der Strom geschlossen.

In[4]:= Close[stmp]

Out[4]=

Dies wurde in die Datei geschrieben.

In[5]:= !!tmp

abc

x

Ausgabefunktionen auf unterer Ebene

Wenn Sie Write[strom, ausdr] aufrufen, dann wird dadurch ein Ausdruck in den angegebenen Strom geschrieben. In der Voreinstellung wird der Ausdruck in Mathematica-Eingabeform geschrieben. Wird Write mit einer Folge von Ausdrücken aufgerufen, so werden diese Ausdrücke der Reihe nach in den Strom geschrieben. Zwischen den Ausdrücken wird im allgemeinen kein Zwischenraum gelassen. Sobald jedoch alle Ausdrücke geschrieben worden sind, beendet Write seine Ausgabe immer mit Zeilenvorschub.

Hier wird die Datei tmp erneut geöffnet.

In[6]:= stmp = OpenWrite["tmp"]

Out[6]=

Hier wird eine Folge von Ausdrücken in die Datei geschrieben und dann die Datei geschlossen.

In[7]:= Write[stmp, a^2, 1 + b^2]; Write[stmp, c^3]; Close[stmp]

Out[7]=

Alle Ausdrücke sind in der Eingabeform geschrieben. Die Ausdrücke aus einem einzelnen Write werden auf die gleiche Zeile gelegt.

In[8]:= !!tmp

a^21 + b^2

c^3

Mit Write können Sie vollständige Mathematica-Ausdrücke herausschreiben. Manchmal möchten Sie jedoch möglicherweise weniger strukturierte Daten herausschreiben. Mit WriteString können Sie eine beliebige Zeichenfolge herausschreiben. Im Unterschied zu Write fügt WriteString keinen Zeilenvorschub oder andere Zeichen hinzu.

Hier wird der Strom geöffnet.

In[9]:= stmp = OpenWrite["tmp"]

Out[9]=

So schreibt man zwei Zeichenketten in einen Strom.

In[10]:= WriteString[stmp, "Beliebige Ausgabe.\n", "Mehr Ausgabe."]

Hier wird ein weiterer String geschrieben und anschließend der Strom geschlossen.

In[11]:= WriteString[stmp, " Zweite Zeile.\n"]; Close[stmp]

Out[11]=

Hier ist der Dateiinhalt. Die Zeichenketten wurden, genau wie angegeben, nur mit den Zeilenvorschüben geschrieben, die explizit angegeben wurden.

In[12]:= !!tmp

Beliebige Ausgabe.

Mehr Ausgabe. Zweite Zeile.

Schreiben von Ausgaben in Listen von Strömen

Eine wichtige Eigenschaft der Funktionen Write und WriteString ist, daß sich mit ihnen Ausgaben nicht nur in einzelne Ströme, sondern auch in eine Liste von Strömen schreiben lassen.

Bei der Benutzung von Mathematica ist es oft vorteilhaft, einen Kanal zu definieren, der aus einer Strömeliste besteht. Auf diese Weise brauchen Sie Mathematica einfach nur mitzuteilen, daß es in den Kanal schreiben soll, und automatisch wird dann das gleiche Objekt in verschiedene Ströme geschrieben.

In einer normalen, interaktiven Mathematica-Session sind gewöhnlich mehrere Ausgabekanäle definiert. Sie bestimmen, wohin spezielle Arten der Ausgabe gesendet werden sollen. So bestimmt zum Beispiel $Output, wohin die Standardausgabe gehen soll, während $Messages bestimmt, wohin Meldungen gehen sollen. Die Funktion Print ruft bei der Arbeit im wesentlichen Write mit dem $Output-Kanal auf. Message arbeitet auf die gleiche Weise, indem es Write mit dem $Messages-Kanal aufruft. Abschnitt 2.13.1 enthält eine Liste der Kanäle, die in einer typischen Mathematica-Session benutzt werden.

Beachten Sie, daß gewöhnlich eine andere Vorgehensweise benutzt wird, wenn Sie Mathematica durch MathLink laufen lassen. Jede Ausgabe wird normalerweise in einen einzelnen MathLink-Link geschrieben, doch jeder Teil der Ausgabe erscheint in einem „Paket", welches den Typ anzeigt.

In den meisten Fällen entsprechen die Dateinamen oder externen Anweisungen, die Sie in Mathematica benutzen, exakt denen Ihres Betriebssystems. Auf einigen Systemen unterstützt Mathematica jedoch auch diverse Ströme mit Spezialnamen.

Besondere Ströme, die auf manchen Computersystemen benutzt werden

Mit dem besonderen Strom "stdout" können Sie eine Ausgabe an die „Standardausgabe" des Betriebssystems übergeben. Beachten Sie jedoch, daß dieser Strom nur bei einfachen textorientierten Schnittstellen zu Mathematica benutzt werden kann. Wenn Ihre Mathematica-Interaktion komplizierter ist, wird dieser Strom nicht funktionieren. Der Versuch, ihn dennoch zu benutzen, kann zu beträchtlichen Störungen führen.

Einige Optionen für Ausgabeströme

Sie können Ausgabeströmen eine Anzahl Optionen zuordnen. Festlegen können Sie diese Optionen, wenn Sie mit OpenWrite oder OpenAppend einen Strom erstmals öffnen.

Dies öffnet einen Strom und legt fest, daß das Vorgabe-Ausgabeformat das zweidimensionale Mathematica-Standardausgabeformat sein soll.

In[13]:= stmp = OpenWrite["tmp", FormatType -> OutputForm]

Out[13]=

Dies schreibt Ausdrücke in den Strom und schließt ihn anschließend.

In[14]:= Write[stmp, x^2 + y^2, " ", z^2]; Close[stmp]

Out[14]=

Die Ausdrücke wurden im Mathematica-Standardausgabeformat in den Strom geschrieben.

In[15]:= !!tmp

2 2 2

x + y z

Beachten Sie, daß Sie sich jederzeit über das für einen speziellen Strom spezifizierte Ausgabeformat hinwegsetzen können, indem Sie einen bestimmten Ausdruck, den Sie in einen Strom schreiben, mit einer expliziten Mathematica-Formatanweisung wie OutputForm oder TeXForm einhüllen.

Die Option PageWidth gibt die Breite der Seite an, die für Textausgabe aus Mathematica zur Verfügung steht. Alle Ausgabezeilen werden so umgebrochen, daß sie in diese Breite passen. Möchten Sie nicht, daß irgendeine Zeile umgebrochen wird, so setzen Sie PageWidth -> Infinity. Normalerweise werden Sie jedoch PageWidth auf einen für Ihr spezielles Ausgabegerät geeigneten Wert setzen wollen. Auf vielen Systemen werden Sie ein externes Programm laufen lassen müssen, um diesen Wert herauszufinden. Mit SetOptions können Sie als voreingestellte Regel für PageWidth zum Beispiel PageWidth :> <<"!devicewidth" wählen; dadurch wird automatisch ein externes Programm gestartet, um den Wert der Option zu bestimmen.

Dies öffnet einen Strom und gibt an, daß die Seitenbreite 20 Zeichen beträgt.

In[16]:= stmp = OpenWrite["tmp", PageWidth -> 20]

Out[16]=

Hier wird ein Ausdruck herausgeschrieben und dann der Strom geschlossen.

In[17]:= Write[stmp, Expand[(1 + x)^5]]; Close[stmp]

Out[17]=

Alle Zeilen im ausgeschrieben Ausdruck sind so umgebrochen, daß sie höchstens 20 Zeichen lang sind.

In[18]:= !!tmp

1 + 5*x + 10*x^2 +

10*x^3 + 5*x^4 +

x^5

Mit der Option CharacterEncoding können Sie eine Zeichen-Verschlüsselung spezifizieren, die auf alle Zeichenketten mit Sonderzeichen angewendet wird, welche entweder mit Write oder WriteString zu einem bestimmten Ausgabestrom geschickt werden. Sie werden in der Regel CharacterEncoding benutzen müssen, wenn Sie einen nationalen Zeichensatz modifizieren oder ein spezielles Ausgabegerät davor schützen wollen, daß es Zeichen erhält, mit denen es nicht umgehen kann.

Manipulieren der Optionen für Ströme

Dies öffnet einen Strom mit den Vorgabe-Einstellungen für die Optionen.

In[19]:= stmp = OpenWrite["tmp"]

Out[19]=

Dies ändert die Option FormatType für den offenen Strom.

In[20]:= SetOptions[stmp, FormatType -> TeXForm];

Options zeigt die von Ihnen für den offenen Strom gesetzten Optionen.

In[21]:= Options[stmp]

Out[21]=

Dies schließt den Strom wieder.

In[22]:= Close[stmp]

Out[22]=

Manipulieren der Optionen für den Standardausgabekanal

Zu jedem Zeitpunkt während Ihrer Session führt Mathematica eine Liste Streams[ ] über alle gegenwärtig geöffneten Ein- und Ausgabeströme zusammen mit deren Optionen. In einigen Fällen mag es nützlich sein, sich diese Listen direkt anzusehen. Mathematica erlaubt Ihnen jedoch nicht, diese Liste zu modifizieren, außer indirekt durch OpenRead usw.

Externe ProgrammeBenennen und Finden von Dateien