perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 23
Click for quality!




10.02.2012 / 19:48

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragBinärdateien auslesen
Seitenanfang
Hallo Leute,
ich hab da ein Problem:

Mir liegen Binär-Dateien vor, in denen 32-Bit-Data-Sets enthalten sind, die Data-Sets sind durch <CRLF> voneinander getrennt.

Wie kann ich die Daten einer Datei nun so einlesen, dass ich sie dezimal darstellen kann?

Ich muss so eine Datei öffnen, einlesen und die Werte bis zum <CRLF> dann dezimal darstellen.

Kann mir da bitte jemand mit ein bisschen Code weiterhelfen?

Tausend Dank vorab!!

Datum: 21.05.2007-17:19

Beitragre: Binärdateien auslesen
Seitenanfang

#!/usr/bin/perl

use strict;
use warnings;

my $filename = '/tmp/bindata.txt';

open(FH, '<', $filename) or die $!;
{
local $/ = "\r\n";

while(my $line = <FH>) {
chomp($line);
print unpack('N', pack('B32', $line)), "\n";
}
}
close(FH);


liest zeilenweise ein, das Zeilenende ist "\r\n" also <CR><LF>, Zeilenende wird entfernt. Die Arbeitsweise von 'pack' und 'unpack' sind jetzt nicht so leicht zu erklaeren, am besten 'perldoc -f perlfunc' aufrufen.

Datum: 22.05.2007-17:19

Beitragre: Binärdateien auslesen
Seitenanfang
Hallo,
erst mal vielen Dank für die Antwort und sorry für meine späte Reaktion....

also leider hat mich das noch nicht so ganz weit gebracht, denn ich kriege seltsamerweise so immer nur einen einzigen Wert ausgegeben. Auf den ASCII-Header folgen 32-bit-Integer Werte. So sieht z. B. der Header aus:

a0751417.443722
XXXXXX 14/05/2007 17:43:31 14/05/2007 17:44:37 0380 00XX,0 00XX,X 00
0000000 0030 0002000 0030 12
1 0 2 08192 1 0290 7.50 01064.o 0 0 00 000 12 002000 0.500 BT0
1 1 2 08192 1 0290 7.50 01064.o 0 0 00 000 00 002000 3.9683 BC0
1 0 2 08192 1 0800 7.50 00532.p 0 0 00 000 12 002000 0.500 BT1
........................

Darauf folgen die 32bit DataSets, die durch CRLF getrennt sind. Aus dem Beispiel-Header geht hervor, dass es sich um 12 DataSets handelt, und zu jedem DataSet gibt es 8192 Werte. Konvertiert müsste das in etwa so aussehen:

1064.000 .o analog 0 1064.000 .o photon 0 ....
2,4552 20,3400 ....
2,3475 50,6000 ....
4,4104 29,0100 ....
12,2865 28,3000 ....
...... ..... ....

Ich hab schon so viel rumgespielt mit pack, unpack, read, printf und komme einfach nicht zum gewünschten Ergebnis.

Vielleicht irgendeine Idee die mir weiterhelfen könnte, bzw. wie ich das angehen muss??

Datum: 30.05.2007-18:41

-






-
-