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 /

Suchen in DateienInhalt

2.11.10 Suchen und Lesen von Zeichenketten

Funktionen wie Read und Find werden meistens zum Verarbeiten von Texten und Daten aus externen Dateien benutzt. In einigen Fällen mag es vielleicht zweckmäßig sein, mit den gleichen Funktionen Zeichenketten innerhalb von Mathematica zu verarbeiten. Dies wird mit der Funktion StringToStream möglich. Sie öffnet einen Eingabestrom, der Zeichen nicht aus externen Dateien, sondern von einer Mathematica-Zeichenkette übernimmt.

Zeichenketten als Eingabestrom behandeln

Hier wird ein Eingabestrom zum Lesen aus einer Zeichenkette geöffnet.

In[1]:= str = StringToStream[
"Eine aus Wörtern bestehende Kette."]

Out[1]=

So wird das erste „Wort" aus einer Zeichenkette gelesen.

In[2]:= Read[str, Word]

Out[2]=

So werden die nachfolgenden Wörter aus der Zeichenkette gelesen.

In[3]:= ReadList[str, Word]

Out[3]=

So wird der Eingabestrom geschlossen.

In[4]:= Close[str]

Out[4]=

An Zeichenketten gebundene Eingabeströme funktionieren genauso wie an Dateien gebundene. Zu jeder Zeit gibt es einen aktuellen Lesezeiger im Strom, der vorrückt, wenn Funktionen wie Read benutzt werden. Die aktuelle Position wird durch die Funktion StreamPosition[strom] als Anzahl der Bytes, beginnend am Anfang des Stroms, angegeben. Die Position des Lesezeigers kann explizit mit SetStreamPosition[strom, n] festgelegt werden.

Hier ist ein Eingabestrom, der an eine Zeichenkette gebunden ist.

In[5]:= str = StringToStream["123 456 789"]

Out[5]=

Der Lesezeiger hat den Anfangswert 0 (Bytes) ab Anfang der Zeichenkette.

In[6]:= StreamPosition[str]

Out[6]=

Hier wird eine Zahl aus dem Strom gelesen.

In[7]:= Read[str, Number]

Out[7]=

Die aktuelle Position ist jetzt 3 Bytes vom Anfang der Zeichenkette entfernt.

In[8]:= StreamPosition[str]

Out[8]=

So wird der Lesezeiger 1 Byte hinter den Anfang der Zeichenkette gesetzt.

In[9]:= SetStreamPosition[str, 1]

Out[9]=

Wenn Sie jetzt eine Zahl aus der Zeichenkette lesen, erhalten Sie aus 123 den Teil 23.

In[10]:= Read[str, Number]

Out[10]=

Hier wird der Lesezeiger an das Zeichenkettenende gesetzt.

In[11]:= SetStreamPosition[str, Infinity]

Out[11]=

Wenn man jetzt versucht, aus dem Strom zu lesen, erhält man immer EndOfFile.

In[12]:= Read[str, Number]

Out[12]=

Hier wird der Strom geschlossen.

In[13]:= Close[str]

Out[13]=

Besonders wenn große Mengen von Text-Daten verarbeitet werden, ist es üblich, ziemlich lange Zeichenketten in Mathematica einzulesen und diese dann innerhalb von Mathematica mit StringToStream weiterzuverarbeiten. Sobald mit StringToStream ein Eingabestrom erzeugt worden ist, kann man die Zeichenkette mit den bereits für Dateien behandelten Funktionen lesen und durchsuchen.

Dies fügt den gesamten Inhalt von textdatei in eine Zeichenkette ein.

In[14]:= s = First[ ReadList["textdatei", Record,
RecordSeparators -> {}] ]

Out[14]=

Dies öffnet einen Eingabestrom für die Zeichenkette.

In[15]:= str = StringToStream[s]

Out[15]=

So erhält man die Textzeilen der Zeichenkette, die ist enthalten.

In[16]:= FindList[str, "ist"]

Out[16]=

Hier wird der Lesezeiger an den Anfang der Zeichenkette zurückgesetzt.

In[17]:= SetStreamPosition[str, 0]

Out[17]=

Dadurch wird das erste Vorkommen von die in der Zeichenkette gefunden und der Lesezeiger direkt dahinter belassen.

In[18]:= Find[str, "die", RecordSeparators -> {" "}]

Out[18]=

So wird das „Wort" gelesen, das unmittelbar hinter die steht.

In[19]:= Read[str, Word]

Out[19]=

Hier wird der Eingabestrom geschlossen.

In[20]:= Close[str]

Out[20]=

Suchen in DateienInhalt