Hallo,
in Ermangelung der sicher sehr sch"one FORTRAN Dateien nur ein paar
Tips ohne Garantie
a) also Single ist ja wohl Real*4, also vier Bytes, wieso
also erstmal am Anfang 4 Bytes und am Ende 4 Bytes gelesen werden
anstatt einer anfangs und am Ende eine
32 Bit integer b.z.w. einer weiteren Single ist unklar.
b) Wenn man eh bloss Single Zahlen einlesen will, diese in Listen der
L"ange
22 Teilt, und jeweils nur die mittleren zwanzig nimmt, sollte es ein
Take[#,{2,21}] & /@
Partition[Experimental`ImportBinary[channel,{"Real32"..}],22]
wohl auch tun.
c) man k"onnte ja auch ein MathLink-Programm schreiben, das die Daten
liest
Gruss
Jens
Martin Heimann wrote:
>
> Liebe Kollegen,
>
> ich versuche mit den Funktionen im Package Utilities`BinaryFiles`
> von einem Fortran90-Programm geschrieben reelle Zahlen zu lesen (ein
> Vektor von 20 single-float reals pro binären Fortran-Record). Wegen
> den Fortran-Recordseparatoren muss man diese beim Lesen rausfischen,
> daher die etwas umständliche Konstruktion (die Funktion "Cols[z_,i]"
> extrahiert die i-te Spalte aus dem Array z):
>
> << Utilities`BinaryFiles`
>
> readbin[zfile_] :=
> Cols[ReadListBinary[
> zfile, {Table[Byte, {4}], Table[Single, {20}], Table[Byte, {4}]}], 2]
>
> Diese Funktion liest die Daten richtig. Aber warum ist sie so
> langsam? Ich war immer der Meinung, dass Zahlen in binärer Form
> eigentlich schneller als in formattierter Form gelesen werden können?
> Gibt es eine Möglichkeit, dies zu beschleunigen?
>
> Mit freundlichem Gruss,
> Martin Heimann
>
> --
> Max-Planck-Institut fuer Biogeochemie
> Postfach 100164, D-07701 Jena, Germany
> Street Address: Kahlaische Strasse 10
>
> Office: +49-3641-686-720/701
> Mobile: +49-170-6307299
> Home: +49-3641-618254
> Fax.: +49-3641-686-710
> Email: martin.heimann@XXXXXXX.de
> Web: http://www.bgc-jena.mpg.de/~martin.heimann