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