|
2.8.13 Wandlung zwischen Zeichenketten, Boxen und Ausdrücken
Wandlung zwischen Zeichenketten, Boxen und Ausdrücken
Hier ist ein einfacher Ausdruck.
In[1]:= x^2 + y^2
Out[1]= 
Dies ergibt die InputForm des Ausdrucks als Zeichenkette.
In[2]:= ToString[x^2 + y^2, InputForm]
Out[2]= 
In FullForm erscheinen explizite Anführungsstriche um die Zeichenkette herum.
In[3]:= FullForm[%]
Out[3]//FullForm= 
Dies ergibt eine Zeichenkettendarstellung für die StandardForm-Boxen, die dem Ausdruck entsprechen.
In[4]:= ToString[x^2 + y^2, StandardForm] // FullForm
Out[4]//FullForm= 
ToBoxes ergibt die Boxen selber.
In[5]:= ToBoxes[x^2 + y^2, StandardForm]
Out[5]= 
Bei der Erzeugung von Daten für Dateien und externe Programme ist es mitunter notwendig, zweidimensionale Formen zu erzeugen, die nur gewöhnliche Tastaturzeichen verwenden. Dies kann mit OutputForm erreicht werden.
Dies produziert eine Zeichenkette, die eine zweidimensionale Darstellung des Ausdruckes nur mit gewöhnlichen Tastaturzeichen ergibt.
In[6]:= ToString[x^2 + y^2, OutputForm]
Out[6]= 
Die Zeichenkette besteht aus zwei Linien, getrennt durch ein explizites \n-Zeichen (Zeilenvorschub).
In[7]:= FullForm[%]
Out[7]//FullForm= 
Die Zeichenkette sieht nur in einer Nicht-Proportionalschrift korrekt aus.
In[8]:= StyleBox[%, FontFamily->"Times"] // DisplayForm
Out[8]//DisplayForm= 
Wenn Sie mit eindimensionalen Strukturen arbeiten, lassen sich mit ToString wirkungsvoll Zeichenketten-Manipulationen mit Formatierungsfunktionen durchführen.
Dies erzeugt eine Zeichenkette, entsprechend der InputForm von StringForm.
In[9]:= ToString[StringForm["``^10 = ``", 4, 4^10]] // InputForm
Out[9]//InputForm= "4^10 = 1048576"
Einige mit ToExpression bearbeitbare Formen
Dies erzeugt einen Ausdruck aus einer InputForm-Zeichenkette.
In[10]:= ToExpression["x^2 + y^2"]
Out[10]= 
Dies erzeugt denselben Ausdruck aus StandardForm-Boxen.
In[11]:= ToExpression[RowBox[{SuperscriptBox["x", "2"], "+", SuperscriptBox["y", "2"]}]]
Out[11]= 
Hier werden die Boxen in InputForm dargestellt.
In[12]:= ToExpression[\(x\^2 + y\^2\)]
Out[12]= 
Dies liefert rohe Boxen.
In[13]:= ToExpression["\(x\^2 + y\^2\)"]
Out[13]= 
Dies interpretiert die Boxen.
In[14]:= ToExpression["\!\(x\^2 + y\^2\)"]
Out[14]= 
In TraditionalForm werden diese als Funktionen interpretiert.
In[15]:= ToExpression["c(1 + x) + log(x)", TraditionalForm]
Out[15]= 
Ausdrücke erzeugen, die in spezielle Köpfe eingehüllt sind
Dies erzeugt einen Ausdruck und evaluiert ihn dann sofort.
In[16]:= ToExpression["1 + 1"]
Out[16]= 
Dies erzeugt einen Ausdruck mit StandardForm-Regeln und hüllt ihn dann in Hold ein.
In[17]:= ToExpression["1 + 1", StandardForm, Hold]
Out[17]= 
Mit ReleaseHold können Sie die Wirkung von Hold aufheben.
In[18]:= ReleaseHold[%]
Out[18]= 
Korrektheit von Zeichenketten als Eingabe prüfen
ToExpression wird versuchen, jede Zeichenkette als Mathematica-Eingabe zu interpretieren. Wenn Sie aber eine Zeichenkette eingeben, die keiner syntaktisch korrekten Eingabe entspricht, dann wird es eine Meldung ausgeben und $Failed zurückgeben.
Dies ist keine syntaktisch korrekte Eingabe, deshalb wandelt ToExpression sie nicht in einen Ausdruck um.
In[19]:= ToExpression["1 +/+ 2"]
ToExpression::sntx: Syntaxfehler in oder vor "1 +/+ 2". ^
Out[19]= 
ToExpression verlangt, daß die Zeichenkette einem vollständigen Mathematica-Ausdruck entspricht.
In[20]:= ToExpression["1 + 2 + "]
ToExpression::sntxi: Unvollständiger Ausdruck; mehr Eingabe ist erforderlich.
Out[20]=$Failed
Mit der Funktion SyntaxQ läßt sich prüfen, ob eine spezielle Zeichenkette einer syntaktisch korrekten Mathematica-Eingabe entspricht. Wenn SyntaxQ False zurückgibt, läßt sich mit SyntaxLength herausfinden, wo der Fehler ist. SyntaxLength liefert die Anzahl der Zeichen, die erfolgreich verarbeitet wurden, ehe ein Syntaxfehler entdeckt wurde.
SyntaxQ zeigt, daß diese Zeichenkette keiner syntaktisch korrekten Mathematica-Eingabe entspricht.
In[21]:= SyntaxQ["1 +/+ 2"]
Out[21]= 
SyntaxLength zeigt an, daß nach dem dritten Zeichen in der Zeichenkette ein Fehler entdeckt wurde.
In[22]:= SyntaxLength["1 +/+ 2"]
Out[22]= 
Hier gibt SyntaxLength einen Wert zurück, der größer als die Länge der Zeichenkette ist und zeigt damit an, daß die Eingabe soweit in Ordnung ist, aber noch fortgesetzt werden müßte.
In[23]:= SyntaxLength["1 + 2 + "]
Out[23]= 
|