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



#!/COMMUNITY

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




08.02.2012 / 22:16

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


BeitragEinfuegen 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 textfile

muss 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

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

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

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

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

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

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

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

-






-
-