Einfuegen von /r/n in eine Textdatei
|
Seitenanfang |
ich moechte gerne eine datei öffnen und jedes <br></tr> mit <br></tr>/r/n (return+neueZeile) ersetzen und dan wieder abspeichern in dem textfilemuss ich dazu das textfile in einen string einlesen ? hab so was noch net gemacht von perl hab ich nicht sehr viel ahnung sry
Datum: 03.09.2005-02:18

|
re: Einfuegen von /r/n in eine Textdatei
|
Seitenanfang |
| Hi, ja das Textfile muss in eine Variable. Folgender regulärer Ausdruck wir Dich dann zum Erfolg führen.
s/(<br><br>)/<br><br>\\n/
Den Rest bekommst bitte über die Suchfunktion oder das Tutorial.-uw
Datum: 03.09.2005-14:30

|
re: Einfuegen von /r/n in eine Textdatei
|
Seitenanfang |
| Ich hab's zwar noch nie probiert, aber ein sed sollte es doch auch tun, oder? sed -i -e 's/(<br><br>)/<br><br>\\n/' Eingabedatei Dann muss die Datei gar nicht erst in eine Variable gelesen werden, sondern jede Zeile wird direkt bearbeitet.
Datum: 03.09.2005-16:15

|
re: Einfuegen von /r/n in eine Textdatei
|
Seitenanfang |
| hab mal was probiert aber des funzt net komisch #!/usr/bin/perl use LWP::Simple; use IO::Socket::INET; open TEMPFILE, ">temp1.txt"; $sock = IO::Socket::INET->new(PeerAddr => "some.host.org", PeerPort => 80, Proto => "tcp") or next; print $sock "GET http://some.host.org/index.php HTTP/1.0\n\n"; @resu = <$sock>; close($sock); $ae = "@resu"; while ($ae=~ <br>) { $ae=~ s/<br>/<br>\\n/; print TEMPFILE }; print TEMPFILE "\n"; close TEMPFILE;
Datum: 03.09.2005-19:32

|
re: Einfuegen von /r/n in eine Textdatei
|
Seitenanfang |
| Hi, bin sicht sicher, ob das der Fehler ist:
while($ae =~ /<br>/) { $ae =~ s/<br>/<br>\\n/; }
ändern in
$ae =~ s/<br>/\\n/g;
Wahrscheinlich hatte ich in Deinem ersten posting missverstanden. Aber, wenn das '<br>' in Deiner while-Schleife drinbleibt und der Linefeed_CarriageReturn nur eingefügt wird, dann landest in einer Endlosschleife, weil *immer* ein <br> zu finden sein wird.Beschreibe bitte mal etwas ganauer, was da nicht funktioniert. -uw
Datum: 04.09.2005-00:30

|
re: Einfuegen von /r/n in eine Textdatei
|
Seitenanfang |
Fast... Aber Du willst doch nicht die vorhandenen Zeilenumbrueche verdoppeln, oder doch?
$ae = join " ", @resu; $ae=~ s|<[Bb][Rr]>(?![\r\n][\r\n]?)|<br>\n|go; Ausformuliert in etwa: "Suche alle" der g-Modifikator am Ende der RegEx "BR-Tags, egal wie geschrieben", das ist dann der <[Bb][Rr]> Teil "denen kein Wagenruecklauf oder Zeilenumbruch oder beides zusammen folgt" das ist das hier: (?![\r\n][\r\n]?) "und ersetze durch kleingeschriebene Version mit Zeilenumbruch" der 2. Teil der RegEx "Da immer das gleiche gesucht wird kompiliere die RegEx nur einmal." der o-Modifikator am Ende der RegEx Alternativ ginge auch
$ae=~ s|<br>(?![\r\n]+)|<br>\n|gio; wenn mann's uebersichlicher mag - Aber mit den [Bb][Rr] Zeichenklassen arbeitet die RegEx etwas schneller. Wenn Du sehr grosse Texte hast, nimm die erste Variante.Weitere Moeglichkeit waere eine negierte Zeichenklasse, statt der Vorrausschau mit (?!pattern), aber das finde ich etwas unschoen, da man wieder Backtracking fuer das Zeichen direkt nach dem BR braucht. Das sieht dann so aus:
$ae=~ s|<br>([^\r\n])|<br>\n$1|gio; Siehe auch: perldoc perlre http://perldoc.perl.org/perlre.html
Datum: 04.09.2005-10:48

|
re: Einfuegen von /r/n in eine Textdatei
|
Seitenanfang |
| also das ergebniss #!/usr/bin/perl use LWP::Simple; use IO::Socket::INET; print "\n=========================================================\n"; print "URL eingeben (z.b:http://search.hlsw.org/sei/project/index.php?Search_Name=&Search_Name_Type=%3D%25&Search_Map=&Search_Game=HL2&Search_Mod=CSTRIKE&Search_ClientCount=&Search_ClientCount_Type=%3D&Search_ClientMax=&Search_ClientMax_Type=%3D&Search_ServerType=&Search_OSType=&Search_Password=&Search_Country=&action=process&mode=extended&language=de)\n"; print "URL: "; $url=<STDIN>; chomp($url); print "\n=========================================================\n"; print "\nAnzahl seiten eingeben (z.b. 1,121,305)\n"; print "SuchProzedur: "; $countme=<STDIN>; chomp($countme); print "\n=========================================================\n"; open TEMPFILE, ">temp1.txt"; $counter = 0; while ($counter < $countme){ $sock = IO::Socket::INET->new(PeerAddr => "search.hlsw.org", PeerPort => 80, Proto => "tcp") or next; print $sock "GET $url&currpage=$counter HTTP/1.0\n\n"; @resu = <$sock>; close($sock); $ae = join " ", @resu; $ae=~ s|<br>(?![\r\n]+)|<br>\n|gio; #print $ae; print TEMPFILE $ae ; print TEMPFILE "\n"; print $counter; $counter++; } close TEMPFILE; open INFILE, "temp.txt"; open OUTFILE, ">>outfile.txt"; while (<INFILE>) { $buf = $_; $indx = index $buf,"href='hlsw://"; if ($indx != -1) { $indx = $indx + 13; $result = substr $buf, $indx; $indx = index $result,"'><"; $result = substr $result,0,$indx; print "$result\n"; print OUTFILE "$result\n"; } } close INFILE; close OUTFILE; unlink(temp1.txt);
Datum: 04.09.2005-20:59

|
re: Einfuegen von /r/n in eine Textdatei
|
Seitenanfang |
| Hi Cremator, coole Sache das. Wieder was gelernt. Vielen Dank. -uw
Datum: 05.09.2005-12:51

|