Inhalt zwischen zwei zeichen ersetzen
|
Seitenanfang |
Hallo, Hab ein Problem. Ich möchte aus einer Datei den Inhalt auslesen und dabei den String der zwischen zwei Zeichen ersetzen (diese können aber über mehrere Zeilen verteilt sein). Anschließend möcht ich den veränderten Inhalt in die Datei zurückschreiben. Diese zwei Zeichen können in der Datei allerdings häufiger vorkommen. Kann mir vielleicht jemand helfen. Ich komm einfach nicht weiter. vielen Dank im Voraus. lg andi
Datum: 06.04.2006-19:35

|
re: Inhalt zwischen zwei zeichen ersetzen
|
Seitenanfang |
| Hallo, das geht auf zwei Arten : Als Kommandozeilenaufruf oder im Skript drin... Um das Suchmuster ueber Zeilen hinweg zu erkennen, muss die Datei in einen String gelesen werden - dazu setzt man den InputRecordSeparator ( $/ ) auf 0 ----- open INFILE, "<Datei"; $/=undef; $szString=<INFILE>; ----- jetzt ueber das Zeilenende hinweg suchen und ersetzen: es sei 'A' das erste Zeichen, 'Z' das letzte, die den Suchbegriff eingrenzen: s/A(.*?)Z/AErsetzStringZ/gs; --------------- oder das ganze als Kommandozeilenaufruf: perl -0 -pi.orig -e "s/A(.*?)Z/AErsetzStringZ/gs" die Option -0 ohne Wert setzt dabei den InputRecordSep auf undef. ------------------- Viel Erfolg Gruß Ralf
Datum: 06.04.2006-20:54

|
re: Inhalt zwischen zwei zeichen ersetzen
|
Seitenanfang |
| Ok, soweit sogut, hab mein Problem nicht ganz deutlich geschildert, also ich suche einen String innerhalb einer Datei der z.B zwischen \\\ und *\ liegt, dieser Teilstring besteht aus mehreren Zeilen. Was ich nun will ist vor jedes Zeilenende dieses Teilstrings noch ein Zeichen einzufügen (z.B. <br>) anschließend soll der modifizierte Inhalt wieder in der Datei gespeichert werden. lg, andi
Datum: 07.04.2006-08:13

|
re: Inhalt zwischen zwei zeichen ersetzen
|
Seitenanfang |
| ok, dann wuerde die Skript-variante nehmen und eine zweite Ersetzfunktion machen (vielleicht hat ja jemand noch ne einfacherere Loesung): sub fgszNewline { my $szInput = shift ( @_ ) || ''; $szInput =~ s/$/<br>$/gs; return $szInput; } # end sub fgszNewline ... und dann die Ersetzung ... s/A(.*?)Z/"A".fgszNewline($1)."Z"/gse; probier's mal... Gruß Ralf
Datum: 07.04.2006-09:28

|
re: Inhalt zwischen zwei zeichen ersetzen
|
Seitenanfang |
| Also Danke erstmal für deine Mühen. Bin mir nicht sicher wie ich den Code mit dem anderen in Verbindung bringe. Und was bewirkt denn die Zeile my $szInput = shift ( @_ ) || ''; ? lg, Andi
Datum: 07.04.2006-14:38

|
re: Inhalt zwischen zwei zeichen ersetzen
|
Seitenanfang |
| Hallo, das lässt sich nicht mehr als Kommandozeilenaufruf handeln, sondern muss dann in ein skript rein... die Zeile $szInput = shift.... liest den ersten der Funktion uebergebenen Parameter in die Variable $szInput, mit der dann spaeter die Ersetzung vorgenommen wird... das ||'' vermeidet nur ein undef, falls kein Wert uebergeben wurde. Gruß Ralf Falls Du nicht klarkommst, poste nochmal, dann kann ich dir auch gerne das ganze in ein Skript schreiben und schicken...
Datum: 07.04.2006-14:47

|
re: Inhalt zwischen zwei zeichen ersetzen
|
Seitenanfang |
Ok erstmal danke für deine Hilfe. wär dir echt sehr dankbar, wenn du mir das in ein skript packen könntest, ich komm einfach nicht zurecht mit der Sache. lg Andi
Datum: 10.04.2006-07:16

|
re: Inhalt zwischen zwei zeichen ersetzen
|
Seitenanfang |
| Hallo hier das Skript, falls es noch Probleme geben sollte, bitte per Mail an mich : ralf.kleockner@googlemail.com #--------------------------------------- # ersetz.pl Datei # -> setzt in mehrzeiliger Datei zwischen # '\\\' und '*\' vor alle NewLine ein '<br>' #---------------------------------------- # Datei als Parameter sub fgszNewLine; my $szDatei = shift ( @ARGV ) || ''; $/=undef; unless ( open INFILE, "<$szDatei" ) { die "Kann Datei [$szDatei] nicht oeffnen : [$!]"; } # end Fehler Datei oeffnen my $szString = <INFILE>; close (INFILE); $szString =~ s~\\\\\\(.*?)\*\\~"\\\\\\".fgszNewLine($1)."*\\"~egs; unless ( open OUTFILE, ">$szDatei" ) { die "Kann Datei [$szDatei] nicht oeffnen : [$!]"; } # end Fehler Datei oeffnen print OUTFILE $szString; close ( OUTFILE ); exit 0; sub fgszNewLine { my $szInput = shift ( @_ ) || ''; $szInput =~ s/\n/<br>\n/gs; return $szInput; } # end sub fgszNewLine
Datum: 10.04.2006-08:13

|
re: Inhalt zwischen zwei zeichen ersetzen
|
Seitenanfang |
| Sorry, hatte Tippfehler in EMail: ralf.kloeckner@googlemail.com
Datum: 10.04.2006-08:15

|