DMUG-Archiv 2001

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

RE: Programmierung mit Zeichenketten

> -----Original Message-----
> From: Ulrich Jentschura [mailto:ulj@XXXXXXX.gov]
> Sent: Wednesday, August 01, 2001 9:01 PM
> To: dmug@XXXXXXX.ch
> Subject: Programmierung mit Zeichenketten
> 
> 
> 
> Hallo, liebe Mathematica-DMUG-Vereinsmitglieder,
> 
> ich stehe gerade vor folgendem Problem: Eine Routine zu schreiben, die
> letztendlich in einem Ausdruck erkennt, ob Symbole mit Namen
> 
> xyz21   oder   xyz33   oder   xyz76
> 
> vorhanden sind, d.h. ob es im Ausdruck Variablen mit diesen 
> Namen gibt,
> und dann diese Variablen so analysiert, dass aus
> 
> xyz21 -> xyz[2,1]
> 
> xyz33 -> xyz[3,3]
> 
> xyz76 -> xyz[7,6]
> 
> wird. Das heisst, am Ende sollte eine Routine, nennen wir sie 
> "Transform",
> dastehen, so dass
> 
> In[1]:= Transform[3 t u^2 v xyz46 + 7 t^2 u xyz56]
> 
> Out[1]= 3 t u^2 v xyz[4,6] + 7 t^2 u xyz[5,6]
> 
> dasteht. Eigentlich sollte das einfach sein, aber...
> 
> Ueber Antworten/Tips wuerde ich mich sehr freuen,
> 
> Viele Gruesse,
> 
> Ulrich
> 
> 
> -- 
> 
> zur Zeit in USA:
> Dr. Ulrich Jentschura (ulj@XXXXXXX.gov)
> N.I.S.T. - Gaithersburg, MD 20899-8401
> 

Lieber Ulrich,

zu deinem Problem mache ich noch folgende Annahmen:
(1) ich fasse "xyz" wörtlich auf, meine also nicht irgendeinen alpha-string.
(2) nur die letzten zwei Buchstaben des Symbolnamens sind numerisch, es
werden also nur zwei Ziffern betrachtet (anderfalls bräuchtest du noch einen
"Separator")
(3) ich nehme an, die fraglichen Symbole "xyz46" etc. haben alle keinen
Wert, evaluieren also nicht.
Dann schlage ich folgendes vor: (ist jetzt aus dem Kopf, hoffe es haut hin!)


Transformiere deinen Ausdruck expr:

 expr /. s_Symbol /; StringMatchQ[SymbolName[s], "xyz*"]  :>
         With[{sname=SymbolName[s]},
           Module[{x=ToExpression[StringTake[sname,{-2}]],
                   y=ToExpression[StringTake[sname,{-1}]]},
                  xyz[x,y] /; IntegerQ[x]&&IntegerQ[y]&&
                              StringLength[sname]==5
          ]]

wenn dann irgendwas für xyz[x_,y_] definiert ist läuft die Maschine weiter.

Gruß, Hartmut


Antworten:
Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html