DMUG-Archiv 2004

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

Re: Nullrecords einlesen...

Guten Morgen Jens && Rolf,

es ist einfacher (Mma 4.2), als man denkt. Sei
In[13]:=!!.\\test\\nullTab.txt

;;a;b;;;c;5;;2.3;;
.9;;h;23400.;;8;Z;

Dann:
In[59]:= Clear[data];
data = ToExpression[ReadList[".\\test\\nullTab.txt", Word, RecordLists -> True, NullWords -> True, RecordSeparators -> {"\n", "\r"}, WordSeparators -> {";"}]]

Out[60]=
{{Null, Null, a, b, Null, Null, c, 5, Null, 2.3, Null, Null},
 {0.9, Null, h, 23400., Null, 8, Z, Null}}

Damit kann man rechnen:
In[62]:= Last[data]^2

Out[62]=
{0.81, Null^2, h^2, 5.4756*10^8, Null^2, 64, Z^2, Null^2}

Wenn Sie mit leeren, genauer gesagt undefinierten, Elementen in einer Liste arbeiten wollen, kommen Warnungen. Nach einem Rechenschritt sind Sie wg. der impliziten Konversion so weit wie mit einem Null-Eintrag von Beginn an:

In[65]:= {, 2,, 4,}^2

From In[65]:=
Syntax::com: Warning: comma encountered with no adjacent expression; the expression will be treated as Null.
<snip>
Out[65]=
{Null^2, 4, Null^2, 16, Null^2}

Gleich mit Null:
In[66]:= {Null, 2, Null, 4, Null}^2

Out[66]=
{Null^2, 4, Null^2, 16, Null^2}

Mit den besten Grüssen
Udo.

Rolf Mertig wrote:

Eine Möglichkeit wäre:

ImportString[ExportString[
ReadList[StringToStream["a;b;;c;;;d;5"], Word,
  RecordLists -> True, NullWords -> True,
  RecordSeparators -> {"\n", "\r"},
  WordSeparators -> {";"}] /. "" -> 0,"Table"],"Table"]

womit sich
{{"a", "b", 0, "c", 0, 0, "d", 5}}
als Resultat ergibt.

Vielleicht geht es auch noch geschickter ...

Gruß,

Rolf Mertig
Mertig Consulting
http://www.mertig.com

Jens Bredenbeck wrote:

Liebe Liste,
ich möchte gerne eine Datei in eine Mathematica-Tabelle einlesen. Die Datei enthält gemischt Text und Zahlen, getrennt durch Semikolons. Das funktioniert mit

data=Import["datei.txt","Table",
   ConversionOptions->{
       "TableSeparators"->{
           {"\n","\r"},
             {";"}
           }
       }
   ]

ganz gut bis auf folgendes: Der Eintrag
a;b;;c;;;d
in der Datei gibt mir in meiner Mathematica-Tabelle
{a,b,c,d}
und nicht wie gewünscht
{a,b,,c,,,d}.
Wie kann ich das beheben?
Gibt es eine einfache Möglichkeit für die "leeren" Felder in der Datei Nullen in die Tabelle zu schreiben, also etwa so
{a,b,0,c,0,0,d}?
Viele Gruesse.
Jens






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

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