Hallo,habe erst mit Perl angefangen und bin nun etwas ratlos was mein Script betrifft.
Hintergrund: Es gibt 2 Dateien - Die 1. Datei bildet die Quelldatei in der nach einem String gesucht und diesen dann ersetzen soll. Dieser String steht irgendwo an beliebigen Stellen in der Datei.
Die 2. Datei behinhaltet alle Datensätze in Form von alterdatensatz=neuerdatensatz
Die Daten Alt - Neu werden mit einem '=' und die Datensätze mit Zeilenumbruch getrennt.
Im Prinzip soll das Script den Datensatz Zeilensweise aus der Datei2 lesen, diesen in "Neu" und "Alt" aufteilen (was auch funktioniert) und dann in der ganzen Datei1 nach "ALT" suchen und durch "NEU" ersetzen und dann den nächsten Datensatz raußlesen, suchen & ersetzen usw. bis das Ende der Datei1 erreicht ist.
Problem: Wenn ich die Befehle
$_ =~ s/$alt/$neu/gc;
push(@datei1, $_);
in die foreach-Schleife mitreinhänge, liest das Script zwar einige Datensätze ein, bleibt aber irgendwann stecken.
Wenn die Befehle ausßerhalb der foreach-Schleife sind, ersetzt es eben nur den letzten Datensatz der eingelesen wurde in der ganzen Datei.
Ich brauche aber eine Möglichkeit um "ALT1" in der kompletten Datei1 zu suchen und ersetzen, dann "ALT2" in der ganzen Datei1 suchen und ersetzen usw...
Und ohne 2 verschachtelte Schleifen und das die Befehle in der foreach-Schleife stehen, wüsste ich nicht wie vorgehen.
Hat jemand einen Verbesserungs bzw. Lösungsvorschlag?
$datei1="test.dump";
open(SQL_Dump, "<$datei1") || die "Fehler beim Lesen $!";$datei2 ="crypt.txt";
while (<SQL_Dump>)
{
open(CRYPT, "<$datei2") || die "Fehler beim Lesen $!";
@line = <CRYPT>;
close(CRYPT);
foreach $datensatz (@line)
{
chomp($datensatz);
($alt,$neu)=split(/=/,$datensatz);
print "ALT: $alt\n";
print "NEU: $neu\n";
$_ =~ s/$alt/$neu/gc;
push(@datei1, $_);
}
}
close SQL_Dump;
open(SQL_Dump, ">$datei1") || die "Fehler beim Lesen $!";
print SQL_Dump @datei1;
close SQL_Dump;
Datum: 24.03.2006-10:48
