[Cologne-pm] PERL - schnelles suchen & ersetzen in 100MB Datei

A. Pagaltzis pagaltzis at gmx.de
Wed Apr 28 11:02:04 CDT 2004


* cem.sakaryali at easi.de <cem.sakaryali at easi.de> [2004-04-28 17:15]:
> Ich wollte die Ausgabe in eine Datei umleiten 
> B steht fuer 
> open (B,"<out.txt");

Du öffnest eine Datei, in die du schreiben willst, zum Lesen?

Es ist ohnehin flexibler, das per Ausgabeumleitung zu machen und
sich im Skript nicht drum zu kümmern.

> Da hatte ich die Idee:
> print B, next unless $matches and m/$matches/;
> 
> zu screiben, aber perl hat mit 
> "No comma allowed after filehandle at codes.pl line 85"
> dies angemeckert.

Ah. Da wird es als

    print(B, next) unless $matches and m/$matches/;

verstanden. Schreib es explizit als

    print(B, $_), next unless $matches and m/$matches/;

> Bei deinem Code:
> 
> Hatte ich folgende Ausgabe:
> output file:
> fsdlkgjd;gjdglsdfs;lk;lsksddl;fsk;s
> fsdlkgjd;gjdgls2dfs;lk;ls2ksddl;fsk;s2
> fsdlkgjd;gjdgls3dfs;lk;ls3ksddl;fsk;s3
> fsdlkgjd;gjdglsdfs;lk;lsksddl;fsk;s
> 
> 
> input war:
> fsdlkgjd;gjdgls1dfs;lk;ls1ksddl;fsk;s1
> fsdlkgjd;gjdgls2dfs;lk;ls2ksddl;fsk;s2
> fsdlkgjd;gjdgls3dfs;lk;ls3ksddl;fsk;s3
> fsdlkgjd;gjdgls1dfs;lk;ls1ksddl;fsk;s1
> 
> 
> also ist etwas mit dem Erzaetzen schief gegangen?

Ah. Nein, das kompilieren ging daneben, ich habe map() in
skalarem Kontext verwendet.. so wird es klappen:

    sub rx_from_list { my $rx = join '|', map quotemeta, @_; qr/($rx)/ }

> Somit habe ich ein mix von euren Vorschlaegen gemacht.
> 
> >     my $matches = join( '|', keys %ERSETZHALTER  );

quotemeta fehlt.

> >       qr/$matches/;

Willst du das nicht irgendwo speichern?

> >     while (<A>) {
> >         s[ $matches ][ $ERSETZHALTER{$&} ]xge;

Warum $& ? Warum /e ?

> >         print B;
> >     }

    my $matches = do {
        my $rx = join( '|', map quotemeta, keys %ERSETZHALTER  );
        qr/($rx)/;
    };

    while (<A>) {
        s/$matches/$ERSETZHALTER{$1}/g;
        print B;
    }

-- 
Gruss,
Aristoteles
 
"Wer nicht über sich selbst lachen kann, nimmt das Leben nicht ernst genug."



More information about the Cologne-pm mailing list