perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 19
Click for quality!




12.02.2012 / 03:58

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragInhalt 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: Inhalt zwischen zwei zeichen ersetzen
Seitenanfang
Sorry, hatte Tippfehler in EMail:

ralf.kloeckner@googlemail.com

Datum: 10.04.2006-08:15

-






-
-