/ 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
Størrelse på strings i Perl
Fra : Thomas Skyt


Dato : 19-07-04 19:01

Hej,

jeg har et problem med et stykke kode jeg skriver. En linie tekst i
source-filen, som koden skal behandle, er på mere end 128 kilobytes og
Perl stopper behandlingen af linien såsnart stringen når op på den
størrelse.

Er der nogen mulighed for at forøge den maksimale størrelse på en
string eller kan jeg omgå problemet ved at stoppe linien ind i et array
(evt. ved at dele det op i elementer, efterhånden som behandlingen
skrider frem)?

/Thomas

 
 
Lars Balker Rasmusse~ (19-07-2004)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 19-07-04 19:23

Thomas Skyt <thomas@sofagang.dk> writes:
> jeg har et problem med et stykke kode jeg skriver. En linie tekst i
> source-filen, som koden skal behandle, er på mere end 128 kilobytes og
> Perl stopper behandlingen af linien såsnart stringen når op på den
> størrelse.

Det tror jeg ikke på:

$foo = "foo" x 1000000;
print length $foo;
print substr $foo, 0, 10;
substr($foo, 2999993) = "bar";
print substr $foo, 2999990;

Hvad er det præcist du gør ved strengen?
--
Lars Balker Rasmussen Consult::Perl
http://consult-perl.dk

Thomas Skyt (19-07-2004)
Kommentar
Fra : Thomas Skyt


Dato : 19-07-04 19:32

Hej,

On Mon, 19 Jul 2004 20:23:18 +0200, Lars Balker Rasmussen wrote:

> Thomas Skyt <thomas@sofagang.dk> writes:
>> jeg har et problem med et stykke kode jeg skriver. En linie tekst i
>> source-filen, som koden skal behandle, er på mere end 128 kilobytes og
>> Perl stopper behandlingen af linien såsnart stringen når op på den
>> størrelse.
>
> Det tror jeg ikke på:
>
> $foo = "foo" x 1000000;
> print length $foo;
> print substr $foo, 0, 10;
> substr($foo, 2999993) = "bar";
> print substr $foo, 2999990;
>
> Hvad er det præcist du gør ved strengen?

Dette:

sub ReadInterestingParts {
   #
   #   Reads a URL and returns the contents as a string
   #

   $url = shift @_;

   print "Fetching $url ... ";
   $URLstatus = getstore($url,"/tmp/dgidigger.tmp");
   print "HTTP $URLstatus.\n";

   $startStore = 0;
   open TEMPFILE, "</tmp/dgidigger.tmp";
   while(<TEMPFILE>) {
      $line = $_; chomp($line);
      if($startStore == 1) {
         $InterestingPart .= $line;
         print $line."\n";
      }
      if($line =~ /<!-- Top slut -->/) {
         $startStore = 1;
      }
      if($line =~ /<!-- Bund ASP 3.0 -->/) {
         $startStore = 0;
         print "SLUT: $line\n";
      }

   }
   close(TEMPFILE);
   return $InterestingPart;
}

Den kan fint læse URL'en og hakke tekst-filen i stykker og slutter som
sagt 128 kbytes ude ad den ene linie.

/Thomas

Tore Aursand (19-07-2004)
Kommentar
Fra : Tore Aursand


Dato : 19-07-04 22:31

On Mon, 19 Jul 2004 20:32:14 +0200, Thomas Skyt wrote:
> sub ReadInterestingParts {

Sørg for å bruke 'strict' og 'warnings' når du programmerer;

#!/usr/bin/perl
#
use strict;
use warnings;

Jeg har ikke svaret på spørsmålet du _egentlig_ hadde, men jeg tror jeg
har en ganske mye bedre måte å skrive funksjonen ovenfor på (utestet);

sub ReadInterestingParts {
my $url = shift;

my $tmp = get( $url );
my $InterestingPart;

if ( defined $tmp ) {
while ( $tmp =~ m,<!-- Top -->\n?(.*?)\n?<!-- Bund -->,sig ) {
$InterestingPart .= $1;
}
}

return $InterestingPart;
}

Akkurat det som matches forkortet jeg litt for at ikke linjen skulle bli
så lang. Regner med at du ser hvordan du retter på det.

Lykke til!


--
Tore Aursand <tore@aursand.no>
"Computer language design is just like a stroll in the park. Jurassic
Park, that is." (Larry Wall)

Thomas Skyt (20-07-2004)
Kommentar
Fra : Thomas Skyt


Dato : 20-07-04 01:16

Hej,

On Mon, 19 Jul 2004 23:31:17 +0200, Tore Aursand wrote:

> Sørg for å bruke 'strict' og 'warnings' når du programmerer;

Jeg ved det ... det er en dårlig vane, ikke at gøre det, men når jeg
liiiige har en ide, glemmer jeg det tit.

> Jeg har ikke svaret på spørsmålet du _egentlig_ hadde, men jeg tror
> jeg har en ganske mye bedre måte å skrive funksjonen ovenfor på
> (utestet);
>
> [GOD IDE TIL KODE]

Jeg kan se, hvor du vil hen med det og tror jeg vil forsøge at mase det
ind.

/Thomas

Lars Balker Rasmusse~ (19-07-2004)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 19-07-04 19:41

Thomas Skyt <thomas@sofagang.dk> writes:
> Den kan fint læse URL'en og hakke tekst-filen i stykker og slutter som
> sagt 128 kbytes ude ad den ene linie.

Er det en enkelt $line eller $InterestingPart der max kommer 128K i?

Hvis det er en linie, har du checket om der kommer mere end de 128K i
tekst-filen?
--
Lars Balker Rasmussen Consult::Perl
http://consult-perl.dk

Thomas Skyt (19-07-2004)
Kommentar
Fra : Thomas Skyt


Dato : 19-07-04 20:21

On Mon, 19 Jul 2004 20:41:00 +0200, Lars Balker Rasmussen wrote:

> Thomas Skyt <thomas@sofagang.dk> writes:
>> Den kan fint læse URL'en og hakke tekst-filen i stykker og slutter som
>> sagt 128 kbytes ude ad den ene linie.
>
> Er det en enkelt $line eller $InterestingPart der max kommer 128K i?

Det lader til at det ikke er nogen af delene - linien er på 134821 bytes
og $InterestingPart vokser til 135143 bytes.
Jeg tror snarere at det er ved return ud af sub'en at den går galt.

/Thomas
(som lige tager en pause for at få klaret bolden op)

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

Månedens bedste
Årets bedste
Sidste års bedste