|
martin.heimann@XXXXXXX.de said: > Warum funktioniert die folgende Funktion nicht; resp. warum schreibt > diese Funktion die Matrix nicht in FortranForm raus, obwohl der > Outputstream doch so eroeffnet wurde? Ich benutze MMA 3.0 auf einem > Macintosh. Die Interaktion zwischen Formattypen und den Ausgabefunktionen ist etwas kompliziert. In diesem Fall liegt es aber daran, dass WriteString[] eben das Argument in einen String (Zeichenkette) umwandelt, dem die Fortran- Form dann nichts mehr anhaben kann. Meine Lösung, aus dem Paket POVray.m (The Mathematica Programmer II), besteht darin, die Datei in OutputForm zu eröffnen, und dann im Wesentlichen Write[FortranFrom[r]] zum Ausschreiben der Zahlen zu verwenden. Da Write[] aber die Ausgabe mit einem Zeilenende abschließt (was wohl der Grund ist, dass Martin Heimann WriteString[] verwendet hat?), muss eine Zeile in *einem* Aufruf geschrieben werden. Dazu kann mann mittels In[16]:= Infix[{a,b,c},", "] Out[16]= a, b, c eine Liste als Komma-getrennte Werte schreiben, oder wie gewünscht mittels In[17]:= Infix[{a,b,c},"\t"] Out[17]= a b c mittels TAB getrennt. Hier eine mögliche Lösung: writeLine[s_, l_List] := Write[s, Infix[FortranForm/@l,"\t"]] writeMatrix[s_,l_List] := writeLine[s,#]& /@ l Damit: In[3]:= s = OpenWrite["/tmp/test",FormatType -> OutputForm, PageWidth -> Infinity]; In[4]:= mat=Table[10.^Random[Real,{-10,10}], {5},{5}]; In[5]:= writeMatrix[s, mat]; In[6]:= Close[s] Nun steht in /tmp/test: 44.81805319008195 2.153659305564295e9 8.03526751867384 9.7705774588724e-7 43.39430518477922 1.997119383792198e7 18199.00990984631 2.00719193507135e-9 2.382151275190028e-8 3.365659944858651e7 5.554955255774435 3.729825046847594e6 5.54384520322161e6 0.01205734994026847 2.223773591334697e6 205772.1266764749 6.050328083893752e-9 3.733004077002189e-6 4.748687123397138e8 8.48382289694392e-7 1.582239743519468e-9 0.00001221409272658594 2579.785236041661 0.00003698683176319748 0.353036250104146 Roman Mäder |