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
|