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

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

Fortgeschrittenes Thema: Ströme und Ein- und Ausgabe auf elementarer EbeneDateien für Pakete

2.11.4 Benennen und Finden von Dateien

Die genauen Einzelheiten der Benennung von Dateien variieren von einem Computersystem zum anderen. Dennoch bietet Mathematica einige allgemeine Mechanismen, die auf allen Systemen funktionieren.

Mathematica setzt voraus, daß die Dateien in einer Hierarchie von Verzeichnissen angeordnet sind (siehe Abschnitt 1.11.2). Damit Mathematica eine spezielle Datei findet, muß es sowohl den Namen der Datei als auch die Verzeichnisfolge, in der sie sich befindet, kennen.

Zu jedem Zeitpunkt existiert ein aktuelles Arbeitsverzeichnis. Man kann sich auf Dateien oder andere Verzeichnisse beziehen, indem man angibt, wo sie sich relativ zu diesem Verzeichnis befinden. In der Regel kann man auf Dateien oder Verzeichnisse verweisen, die in diesem Verzeichnis stehen, indem man einfach ihren Namen ohne Information über das Verzeichnis angibt.

Manipulation von Verzeichnissen

Dies liefert einen String, der Ihr aktuelles Arbeitsverzeichnis repräsentiert.

In[1]:= Directory[ ]

Out[1]= /users/sw

Dadurch wird Ihr aktuelles Arbeitsverzeichnis zum Packages-Unterverzeichnis Ihres aktuellen Arbeitsverzeichnisses.

In[2]:= SetDirectory["Packages"]

Out[2]= /users/sw/Packages

Nun hat sich Ihr aktuelles Arbeitsverzeichnis geändert.

In[3]:= Directory[ ]

Out[3]= /users/sw/Packages

So kehren Sie zum vorherigen Arbeitsverzeichnis zurück.

In[4]:= ResetDirectory[ ]

Out[4]= /users/sw

Beim Aufruf von SetDirectory kann jeder Verzeichnisname angegeben werden, der vom jeweiligen Betriebssystem erkannt wird. So kann zum Beispiel unter Unix ein Verzeichnis, das in der Verzeichnishierarchie eine Stufe höher liegt, mit .. und das „Home"-Verzeichnis mit ~ bezeichnet werden.

Wenn man mit SetDirectory in ein neues Verzeichnis geht, wird Mathematica sich das vorherige Verzeichnis merken. Mit ResetDirectory kann man dorthin zurückkehren. Im allgemeinen verwaltet Mathematica einen Stapel mit den Verzeichnissen, der durch DirectoryStack[ ] ausgegeben wird. Jedesmal, wenn SetDirectory aufgerufen wird, wird dem Stapel ein neues Verzeichnis hinzugefügt, und durch Aufruf von ResetDirectory wird eines entfernt.

Spezielle Verzeichnisse

Immer, wenn eine bestimmte Datei verlangt wird, wird Mathematica im allgemeinen in mehreren Schritten versuchen, diese zu finden. Zuerst einmal wird der Standardmechanismus des Betriebssystems oder der „Shell" eingesetzt.

Mathematica analysiert den vollständigen Namen, den Sie für eine Datei angegeben haben, und achtet darauf, ob er irgendwelche der „Metazeichen" *, $, ~, ?, [, ", \ und ' enthält. Werden solche Zeichen gefunden, so wird der vollständige Name an das Betriebssystem oder die „Shell" zur Interpretation übergeben. Bei einem Unix-System werden dann also Konstruktionen wie name* und $VAR an dieser Stelle erweitert. Aber im allgemeinen nimmt Mathematica das, was vom Betriebssystem oder der „Shell" zurückgegeben wurde, und behandelt dies als den vollständigen Dateinamen.

Bei Ausgabedateien ist dies das Ende der Bearbeitung durch Mathematica. Findet Mathematica keine eindeutige Datei mit dem angegebenen Namen, so wird es eine solche Datei erstellen.

Wird jedoch versucht, Eingabe von einer Datei zu erhalten, so wird Mathematica eine weitere Bearbeitungsrunde ausführen: Mathematica ermittelt mit Hilfe des Wertes der globalen Variablen $Path die Verzeichnisnamen, in denen es nach der Datei suchen soll. Die Voreinstellung für die Option Path ist die globale Variable $Path.

Suchpfad für Dateien

Im allgemeinen ist die globale Variable $Path als Zeichenketten-Liste definiert, wobei jede Zeichenkette ein Verzeichnis darstellt. Immer wenn nach einer Eingabedatei gefragt wird, wird Mathematica der Reihe nach vorübergehend jedes dieser Verzeichnisse zum aktuellen machen und dann von diesem Verzeichnis aus versuchen, die angeforderte Datei zu finden.

Hier ist eine typische Einstellung für $Path. Das aktuelle Verzeichnis (.) und Ihr Home-Verzeichnis (~) werden zuerst aufgeführt.

In[5]:= $Path

Out[5]= {., ~, /users/math/bin, /users/math/Packages}

Listen mit Dateien in speziellen Verzeichnissen erhalten

Hier ist eine Liste aller Dateien des aktuellen Arbeitsverzeichnisses, deren Namen auf .m enden.

In[6]:= FileNames["*.m"]

Out[6]= {alpha.m, control.m, signals.m, test.m}

Dies listet Dateien auf, deren Namen mit a beginnen und die im aktuellen Verzeichnis liegen oder in Unterverzeichnissen, deren Namen mit P beginnen.

In[7]:= FileNames["a*", {".", "P*"}]

Out[7]= {alpha.m, Packages/astrodata, Packages/astro.m,

Previous/atmp}

FileNames gibt eine Liste der Zeichenketten, die den Dateinamen entsprechen, zurück. Wenn es eine Datei zurückgibt, die sich nicht im aktuellen Verzeichnis befindet, so wird der Name der Datei, relativ zum aktuellen Verzeichnis, gegeben. Beachten Sie, daß alle Namen nur in dem Format des bestimmten Computersystems, auf dem sie erzeugt wurden, erscheinen.

Manipulation von Dateinamen

Zu bedenken ist, daß unterschiedliche Computersysteme die Dateinamen eventuell unterschiedlich vergeben. So vergeben beispielsweise Microsoft Windows-Systeme Namen in der Regel in der Form dir/dir/name, Unix-Systeme in der Form :dir:dir:name und Macintosh-Systeme in der Form [dir]name. Mit ToFileName lassen sich Dateinamen in geeigneter Weise für das jeweilig eingesetzte Computersystem zusammensetzen.

Dies liefert den Verzeichnisteil des Dateinamens.

In[8]:= DirectoryName["Packages/Math/test.m"]

Out[8]=

Dies konstruiert den vollständigen Namen einer anderen Datei im selben Verzeichnis wie test.m.

In[9]:= ToFileName[%, "abc.m"]

Out[9]=

Wenn man einen Satz zusammenhängender Dateien erstellen will, ist es häufig von Vorteil, wenn man sich auf eine Datei beziehen kann, während man eine andere liest. Die globale Variable $Input liefert den Namen der Datei, von der die Eingabe im Augenblick gerade stammt. Mit DirectoryName und ToFileName lassen sich die Namen anderer verwandter Dateien spezifizieren.

Ermittlung, wie auf eine von Mathematica gerade gelesene Datei Bezug genommen werden kann

Fortgeschrittenes Thema: Ströme und Ein- und Ausgabe auf elementarer EbeneDateien für Pakete