/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
read og offset
Fra : Peter Henriksen


Dato : 22-07-07 22:47

Jeg kan ikke få offset til at fungere i nedenstående.
Den læser konsekvent fra starten af filen og printer "1234" fra filen, som
indeholder "1234567890"

#!/usr/bin/perl

use strict;
use warnings;

open FILE, "fil" or die $!;

read (FILE, my $data, 4, 5);
print $data ."\n";


Hvorfor printer den ikke fra offset (5)?



 
 
Adam Sjøgren (22-07-2007)
Kommentar
Fra : Adam Sjøgren


Dato : 22-07-07 23:30

On Sun, 22 Jul 2007 23:46:34 +0200, Peter wrote:

> Den læser konsekvent fra starten af filen og printer "1234" fra filen, som
> indeholder "1234567890"

> #!/usr/bin/perl

> use strict;
> use warnings;

> open FILE, "fil" or die $!;

> read (FILE, my $data, 4, 5);
> print $data ."\n";

> Hvorfor printer den ikke fra offset (5)?

Du har mislæst forklaringen på hvad OFFSET gør¹. Det er offset ind i
strengen du indlæser _i_, ikke i filen du læser _fra_.

Hvis du siger:

my $data='ABCDEFGHIJKLMN';
read(FILE, $data, 4, 5);
print "data: $data\n";

får du:

data: ABCDE1234

ud.

Det du vil er sandsynligvis noget a la:

#!/usr/bin/perl

use strict;
use warnings;

use Fcntl qw(:seek);

open FILE, "fil" or die $!;

my $data;
seek FILE, 5, SEEK_SET;
read(FILE, $data, 4);
print "data: $data\n";

der giver:

data: 6789


Mvh.

Adam


¹: "An OFFSET may be specified to place the read data at some place
in the string other than the beginning."
^^^^^^^^^^^^^

--
"parsley, sage, rosemary and KOMPRESSOR" Adam Sjøgren
asjo@koldfront.dk

Peter Henriksen (23-07-2007)
Kommentar
Fra : Peter Henriksen


Dato : 23-07-07 10:37

> Du har mislæst forklaringen på hvad OFFSET gør¹. Det er offset ind i
> strengen du indlæser _i_, ikke i filen du læser _fra_.

Ahh!
Ja, den havde jeg overset.
I hvilke tilfælde er den feature interessant?

> Det du vil er sandsynligvis noget a la:

[...]

Ja, præcis!

Tak for hjælpen.



Jakob Bøhm (23-07-2007)
Kommentar
Fra : Jakob Bøhm


Dato : 23-07-07 11:16

Peter Henriksen wrote:
>> Du har mislæst forklaringen på hvad OFFSET gør¹. Det er offset ind i
>> strengen du indlæser _i_, ikke i filen du læser _fra_.
>
> Ahh!
> Ja, den havde jeg overset.
> I hvilke tilfælde er den feature interessant?
>

F.eks. hvis du først skal læse en header som angiver hvor mange bytes
der yderligere skal læses, men du gerne vil have hele resultatet i samme
streng, ligesom i filen.

read FIL, $buf, 4 or die
$len = unpack('N', $buf)
read FIL, $buf, $len, 4 or die

write NYFIL, $buf, $len + 4 or die


--
Jakob Bøhm, M.Sc.Eng. * jb@danware.dk * direct tel:+45-45-90-25-33
Danware Data A/S * Bregnerodvej 127 * DK-3460 Birkerod * DENMARK
http://www.netop.com * tel:+45-45-90-25-25 * fax:+45-45-90-25-26
Information in this mail is hasty, not binding and may not be right.
Information in this posting may not be the official position of Danware
Data A/S, only the personal opinions of the author.


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste