|
|
 |

|

 |

| Community » Perl: Allgemeines Forum |
|
Einzelne Zeilen einer Datei ersetzen
|
Seitenanfang |
| Hallo! Ich brauche eine Funktion, die folgendes machen soll 1) Eine Datei öffnen. 2) Diese Zeilenweise durchlaufen und wenn ein Suchmuster passt, ausdrücke ersetzen. 3) Alle Zeilen wieder ausschreiben. 4) Das ganze wärend des druchlaufs ohne zuästzliche Variablen zu erzeugen. So weit bin ich schon:
open(DATEI,"+>datei.db"); flock(DATEI, 2); while (<DATEI>) { s///; #Hier stehen dann die Ersetzregeln print DATEI; } close(DATEI);
Problem: Ich erhalte ich immer eine leere Datei oder wenn ichs mit +<datei.db versuche, Datenkauderwelsch. Liegt das daran, das der Zeiger der Datei immer an der aktuellen Stelle schreibt? Wie kann ich denn die vorhandene Zeile einfach überschreiben? Kann mir jemand weiterhelfen und mir vielleicht sagen, wo mein denkfehler liegt? mfg, Perler
Datum: 15.02.2007-15:22

|
re: Einzelne Zeilen einer Datei ersetzen
|
Seitenanfang |
| Hallo! Eine prima Einsatzmöglichkeit für Tie::File, wenn du mich fragst. use Tie::File; tie my @file, 'Tie::File', 'datei.db'; for(@file) { s///; } # die Ersetzungen untie @file;
Grüße, Skrilax
Datum: 15.02.2007-16:50

|
re: Einzelne Zeilen einer Datei ersetzen
|
Seitenanfang |
| Hmm, gibts auch eine Lösung ohne Zusätzliches Modul? Die Sache ist die, dass am ende sehr viele Prozesse auf das Script zugreifen werden und die Preformance somit weiter in den Vordergrund rückt ;-)
Datum: 15.02.2007-18:06

|
re: Einzelne Zeilen einer Datei ersetzen
|
Seitenanfang |
| Warum schreibst du nicht zuerst alles was in die Datei soll in ein Array, dessen Inhalt du anschließend wieder löschst? Also z.B.
for (my $i=0;$i<@datei;$i++){ $zeile[$i] = 'deine Ersetzregeln'; push (@new_File,$zeile[$i]); }//hier steht nun alles was in die Datei soll...open (DATEI, ">>c:/neue_datei.dat") || die "could not open file"; print DATEI "@new_File"; close DATEI; splice (@new_File,0)
Ich weiß ja nicht genau welche Anwendung dahinter steckt, aber das sollte Dein Problem lösen, oder? Greets, LarsVegas
Datum: 16.02.2007-16:50

|
|

|

|

|
 |

|

|
|