DMUG-Archiv 2001

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

Re[3]: Exportieren in ein Text (TeX) File?

Liebe Freunde von portablen Directorynamen,

was Jens bemaengelt, ist kein Fehler, denn Mma unter NT ist cleverer, als die Systemsympathiepolizei (Unix - cool, Windows - doof) erlaubt; zur Anschauung (für nicht NT Nutzer) eine komplette Session im Notebook schaareStreams.nb:

In[1]:=
Directory[]

Out[1]=
"C:\\Programme\\Wolfram Research\\Mathematica\\4.0"

In[2]:=
Remove[schaareStreams];
schaareStreams[i_Integer, filen_String] := Module[{o, l0, fn, f1},
      SetDirectory["C:\output of Gehirnzelle\Abteilung_skrot"];
      l0 = Table[{o, o o}, {o, 1, i}];
      f1 = If[StringMatchQ[filen, "*.txt"], filen,
          filen <> ".txt"];
      fn = f1;
      While[Length[FileNames[fn]] != 0,
        fn = f1 <> "_" <> ToString[Unique[]]
        ];
      wstr = OpenWrite[fn];
      Write[wstr,
        OutputForm[
          TableForm[l0,
            TableHeadings -> {None, {"Erste Spalte", "Zweite Spalte"}}]]];
      Close[wstr]
      ] /; i > 0 && StringLength[filen] > 0

In[4]:=
schaareStreams[4, "hello"]

Out[4]=
"hello.txt_$2"

In[5]:=
Directory[]

Out[5]=
"C:\\output of Gehirnzelle\\Abteilung_skrot"

In[6]:=
!! hello.txt_$2

From In[6]:=
   Erste Spalte   Zweite Spalte
   1              1

   2              4

   3              9

   4              16

Mathematica macht die Richtigstellung, auf die Jens verweist, eigenstaendig. Directory[] gibt im Notebook unter NT den NT Namen aus (also z.B. C:\Programme\Wolfram Research\Mathematica\4.0); wenn man die Zellen herauskopiert (wie oben geschehen), erscheint in der Kopie "C:\\Programme\\Wolfram Research\\Mathematica\\4.0" (korrekt in der Aussenwelt) und nach der Ausführung von schaareStreams das bestellte "C:\\output of Gehirnzelle\\Abteilung_skrot".

Man kann auch anhand von "Suchen nach Dateien" (jpeg folgend) zeigen, dass schaareStreams korrekt läuft.

Nichtsdestoweniger hat Jens recht, dass man nicht im Notebook hartkodiert und NT spezifisch das Verzeichnis setzen soll; wie gesagt, ein wirklicher freak macht den Verzeichnisnamen waehlbar --- und benutzt fuer den Filenamen UniqueFileNamen[]. Nicht nur wg. der Anbindung von NT executables an Fileextensions sollte man nicht hello.txt_$3 als Filename haben; ein Unix System würde $3 als shell substitution auslegen - auch nicht das, was man will. Ich bitte um Verständis, dass ich den Output von schaareStreams nicht im Mma Default Directory haben wollte und daher diesen hack gemacht habe.

Mit den besten Gruessen
Udo.

Jens-Peer Kuska schrieb:

was ist falsch ???

SCHNIPP SCHNAPP SCHNIPP SCHNAPP
>
> In[58]:=
> Remove[schaareStreams];
> schaareStreams[i_Integer, filen_String] := Module[{o, l0, fn, f1},
>       SetDirectory["C:\output of Gehirnzelle\Abteilung_skrot"];

<snip>
>       ] /; i > 0 && StringLength[filen] > 0

Genau, auf einem Windoofs/Dosen System werden Verzeichnisse mit
doppelten Backslash angegeben also

>       SetDirectory["C:\\output of Gehirnzelle\\Abteilung_skrot"];

ein einzelner Backslash wird C-m"assig als

  \n   Wagenr"ucklauf
  \t   Tabulator
  \"   "

u.s.w.

Interpretiert. Da es aber \A und \o garnicht gibt fehlt im Original
dann ein Zeichen.
Was aus der "Ausgabe der Gehirnzelle Abteilung_skrot"
eine

c:utput of Gehirnzellebteilung_skrot

macht die es auch nicht gibt.

Die einzige *portable* Form ist
<snip>

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

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