🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.perl
6 messages
6 total messages Started by Rafal Walecki Tue, 31 Mar 1998 06:50
Pliki binarne.
#1168
Author: Rafal Walecki
Date: Tue, 31 Mar 1998 06:50
11 lines
780 bytes
Hej,

Jestem poczatkujacym perl'owcem i mam nastepujacy problem:
Czy ktos moze mi wyjasnic czy mozna i ewentualnie jak mozna 
obrabiac pliki binarne w perlu?
Zwykle read nie chce czytac niczego poza tekstem.

Dzieki,

-- 
Rafal
Re: Pliki binarne.
#1169
Author: Krzysztof Murkowski
Date: Tue, 31 Mar 1998 07:04
18 lines
1140 bytes
Rafal Walecki wrote:
> 
> Czy ktos moze mi wyjasnic czy mozna i ewentualnie jak mozna
> obrabiac pliki binarne w perlu?
> Zwykle read nie chce czytac niczego poza tekstem.

read oczywiscie czyta pliki binarne. Ale zeby dzialalo poprawnie
po open trzeba okreslic typ pliku jako binarny aby znaczej chyba 26
nie byl interpretowany jako koniec pliku.

open( plik, "<plik.bin" );
binmode( plik );
read...

-- 
Krzysztof Murkowski
mailto:murek@ml.put.poznan.pl
http://www.ml.put.poznan.pl/~murek
Re: Pliki binarne.
#1170
Author: Rafal Walecki
Date: Tue, 31 Mar 1998 09:48
51 lines
2108 bytes
Krzysztof Murkowski wrote:
> 
> Rafal Walecki wrote:
> >
> > Czy ktos moze mi wyjasnic czy mozna i ewentualnie jak mozna
> > obrabiac pliki binarne w perlu?
> > Zwykle read nie chce czytac niczego poza tekstem.
> 
> read oczywiscie czyta pliki binarne. Ale zeby dzialalo poprawnie
> po open trzeba okreslic typ pliku jako binarny aby znaczej chyba 26
> nie byl interpretowany jako koniec pliku.
> 
> open( plik, "<plik.bin" );
> binmode( plik );
> read...
> 
> --
> Krzysztof Murkowski
> mailto:murek@ml.put.poznan.pl
> http://www.ml.put.poznan.pl/~murek

OK zgadza sie read czyta pliki binarne (nawet nie jest konieczne
ustawianie go jako binarny gdy pracuje sie pod Unix'em), jednak problem
lezy gdzie indziej:
Z zboiru binarnego chce odtworzyc nazwe grupy (lancuch znakowy). Dlugosc
tego lancucha zapisana jest w poprzednim bajcie. Niestety nie potrafie
przeczytac tego bajtu.
Ponizej fragment kodu w ktorym usilowalem przeczytac ten lancuch:

...
open(DGNF, "<ttt1.dgn");

seek(DGNF, 19838, 0);
read(DGNF, $grpname, 16);
print $grpname, "\n";
seek(DGNF, 2, 1);
read(DGNF, $tlen, 2);
read(DGNF, $title, $tlen);
print $tlen, "\n";
print $title, "\n";
...

Wyglada to tak jakby perl nie chcial czytac niczego spoza zakresu
dajacego sie interpretowac jako znaki.
Moze ktos wie jak czytac i interpretowac takie cyfry z pliku binarnego?
A co z formatem zmiennoprzecinkowym zapisanym na kilku bajtach?

Z gory dzieki za pomoc.

-- 
Rafal
Re: Pliki binarne.
#1171
Author: Krzysztof Murkowski
Date: Tue, 31 Mar 1998 10:08
29 lines
1571 bytes
Rafal Walecki wrote:
[...]
> Z zboiru binarnego chce odtworzyc nazwe grupy (lancuch znakowy). Dlugosc
> tego lancucha zapisana jest w poprzednim bajcie. Niestety nie potrafie
> przeczytac tego bajtu.
> Ponizej fragment kodu w ktorym usilowalem przeczytac ten lancuch:
[...]
> read(DGNF, $tlen, 2);
[...]
> Wyglada to tak jakby perl nie chcial czytac niczego spoza zakresu
> dajacego sie interpretowac jako znaki.
> Moze ktos wie jak czytac i interpretowac takie cyfry z pliku binarnego?
> A co z formatem zmiennoprzecinkowym zapisanym na kilku bajtach?

ord() bedzie chyba tym czego szukasz.

Jezeli czytasz dwa bajty to rozumiem, ze jest to mlodszy/starszy bajt 
czyli zamiast:

read(DGNF, $tlen, 2);

moze tak:

$tlen = ord( getc( DGNF )) + 256 * ord( getc( DGNF ));

-- 
Krzysztof Murkowski
mailto:murek@ml.put.poznan.pl
http://www.ml.put.poznan.pl/~murek
Re: Pliki binarne.
#1172
Author: Piotr Piatkowski
Date: Tue, 31 Mar 1998 11:57
18 lines
1131 bytes
Krzysztof Murkowski <murek@ml.put.poznan.pl> wrote:

: Jezeli czytasz dwa bajty to rozumiem, ze jest to mlodszy/starszy bajt 
: czyli zamiast:

: read(DGNF, $tlen, 2);

: moze tak:

: $tlen = ord( getc( DGNF )) + 256 * ord( getc( DGNF ));

Można też tak:

read(DGNF, $tlen, 2);
$tlen = unpack("s",$tlen);

-- 
Piotr Piątkowski, Uczelniane Centrum Informatyki, AGH Krakow, POLAND
Re: Pliki binarne.
#1173
Author: Andrzej Filip
Date: Tue, 31 Mar 1998 14:11
5 lines
808 bytes
1) zobacz funkcje unpack
2) stosuj funkcje binmode (przenośność na MS)

--
Keep wINteR outside!
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads