[an error occurred while processing this directive]
[an error occurred while processing this directive][an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive] (none)
[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive][an error occurred while processing this directive]
[an error occurred while processing this directive][an error occurred while processing this directive]
[an error occurred while processing this directive][an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive] (none)
[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive][an error occurred while processing this directive]
Så var Jonas så lidt hurtiger til at læse sin perldoc end jeg var, men her er
der et eksempel på hvordan du bruger det:
open FILE, "+</tmp/minfil" or die ("Could not open file");
# Seek to minus 4 from end.
seek FILE, -4, 2;
print(tell(FILE). "\n");
my $buff;
# Read 4 bytes.
read(FILE,$buff,4);
print "buff:$buff\n";
# Seek back the 4 bytes from current pos.
seek(FILE, -4, 1);
# Replace stuff.
$buff =~ s/CCC/DDD/;
print FILE $buff;
print(tell(FILE). "\n");
close FILE;
Til det med min LaTeX precompiler så er det eksemple på hvordan du laver
multiline matchings med regexp:
my $filename = "/tmp/minfil";
open FILE, "$filename" or die("Could not open $filename");
my $buff = do { local $/, <FILE> };
chomp($buff);
close FILE;
my @sqlcode = ($buff =~
/<sql>
(.*?)
<\/sql>/sxg);
foreach my $var (@sqlcode) {
print "$var\n";
}
/tmp/minfile:
<sql>
A
</sql>
<sql>
B
</sql>
Men jeg hvis jeg var dig vil jeg nok hold mig til at slurpe file ind i
hukommelsen, 5MB er stadig i bagatel afdelingen og du skal ikke rode særligt
meget rundt i seek og read før en hurtig slurp og en regexp ikke ville have
været hurtigere.
Mvh Troels.
On Monday 14 June 2004 11:33, Jonas Jensen wrote:
> On Sun, 13 Jun 2004 22:22:01 +0000, Hanne Munkholm wrote:
> > On 2004-06-12, Troels Liebe Bentsen <sslug@sslug> wrote:
> >> Det er fordi du åbner filen i "append mode", du skal bare bruge en
> >> open(FILE, "$XMLFILE");
> >
> > Filehandle FILE opened only for input at ./printusers.pl line 165. :-(
>
> Det skal være:
> open(FILE, "+<$XMLFILE");
>
> >> Og generalt er det en dårlig ide at læse/skrive direkt i en fil, så
> >> længe filen kan være i hukommelse er det bedre bare at slurpe den op
> >> og så skrive den igen når man er færdig.
> >>
> >> open FILE, "$filename" or die("Could not open $filename"); my $buff =
> >> do { local $/, <FILE> };
> >> chomp($buff);
> >> close FILE;
> >
> > Ok. Den bliver nok 4-5 MB i første omgang. Så det er en sjat. Men det er
> > vel hurtigere at have det i memory når først man før det indlæsst. Det
> > er bare irriterende at skulle tygge alle de data igennem før at tilføke
> > 20 linier i bunden :( Bortset fra at det er i bunden minus een linie.
>
> Du kan gøre det nemmere, og mere memory-venligt:
> - Åbn filen som jeg skrev oven over. Det vil åbne den for både læsning
> og skrivning.
> - Hvis din data altid skal tilføjes på samme sted i forhold til filens
> slutning, kan du bare seek()'e derhen med WHENCE = SEEK_END og en negativ
> POSITION. Ellers må du læse dig lidt frem til positionen.
> - Skriv din data med "print FILE $linje".
> - Skriv afslutningen på yder-tag'et og luk filen.
>
> Den metode ignorerer at det er en xml fil, men jeg vil tro den har 20-50
> gange så høj performance som hvis du brugte et xml-opmærksomt værktøj.
Last modified
2005-08-10, 22:43 CEST
[an error occurred while processing this directive] This page is maintained by
[an error occurred while processing this directive]MHonArc
[an error occurred while processing this directive] #
[an error occurred while processing this directive] *