-
RE in Perl wie gehts das
Hi
ich wollte Folgendes in Perl rrogrammieren.
Zeilen einlesen,.. Teile der Zeile übernehmen.
und anhand einer zweiten Datei überprüfen
ob der gefundene String durch etwas anderes zu Ersetzten ist. Hoffe soweit war das Verständlich ?
Nun meim Problem, ich öffne beide Dateien.
Lese in der ersten, Zeile für Zeile ein über foreach und habe innerhalb dieser Schleife
eine Zweite Schleife die festellen soll ob es Übereinstimmungen gibt.
Die sieht folgendermaßen aus :
<PRE>
$passt=0;
for($lauf=0;$lauf<=$#arr+1 && $passt != 1 ;$lauf++)
{
($Name1, $Name2 )=split( / /, $arr[$lauf],2);
if ($Found =~ /$Name1/i)
{
$passt = 1;
print "replace in Line \t",$n ." gegen ".$Name1." ".$Name2;
}
</PRE>
Kann man das in Perl auch noch einfacher formulieren . Oder wo liegt mein Denkfehler
Die if Abfrage funktioniert nicht so wie ich mir das Vorgestellt habe.
Danke für jede Anregung.
Gruss
Christoph
-
Hi Christoph
Ich hab versucht, über if/elsif/else-Zweige einen Mustervergleich in Roberts Script einzufügen. Das spart den zweiten file. Kein Ergebnis bis jetzt. Probeweises Öffnen zum Schreiben hat erst mal mangels geeigneter Anweisung den file leergelöscht. So fängt das also auch meistens mit 'W' an.
Hier mein Ansatz:
<HR ALIGN=LEFT WIDTH="100%">
@mytag = ('<I>', '<K>', '<U1>', '</U1>');
if (/U1/) {
print "<H2>";
}
elsif (/\/U1/) {
print "</H2>";
}
else (!$mytag) {
print "";
}
<HR ALIGN=LEFT WIDTH="100%">
Sowas in der Art muss doch in Roberts leckeren Basisscript reinzupfrimeln gehen? "Isch nem glei de Hommer, soviel hab isch schun gedeschdet ".
Gruss
Bernhard
[Dieser Beitrag wurde von Omega-X am 22. Mai 2000 editiert.]
-
Hi
Bernhard das mit der If Anweisung habe ich ja gerade versucht zu Umgehen weil bei jeder Änderung ja das If Konstukt um ein elsif erweitert werden müßte deshalb habe ich etwas in dieser obig beschriebener Art versucht jetzt Funktioniert es auch, ich hatte
vergessen in der RE das ganze durch \b b\ (Wortgenze) abzugrenzen Deshabl hat er immer
Jedes Vorkommen ersetzt.
Bernhard bist du schon dahinter gekommen wie das mit dem Auffinden verschiedenster Tasks in einer Zeile funktioniert? Das ist eines meiner nächsten
Probleme, das gelöst werden will hier ein kleiner Ausschnitt
Die Datei ist folgendermaßen aufgebaut:
BR D
TABLE FOP
D TB
P G
TD TB
PRE FONT color "#998877"
/TABLE /PR
Hier wird das 1. Leerzeichen für split verwendent eine Schleife wird so lange durchlaufe wie nicht das Ende des Arrays und
nicht die richtige Position gefunden wurde.
Denn Fall das es keine Übereinstimmung gibt habe ich noch nicht berücksichtigt.
Hier der Ansatzt dazu, geht aber noch nicht wie gewünscht.
sub Arraysplit
{
LINE: foreach (@food) # Gehe der Reihe nach durch Zeilenweise bis \n
{
my $Zeile = $_;
chop($Zeile);
$n++;
# print $Zeile,"gezaehlt ",$n ,"\n";
if ( m/.*?\<(.*?)\>.*/)
####################################
# Look if it match with some Tasks #
####################################
{
$Found = $1;
# print $Found,"\n";
$passt=0;
for($lauf=0;$lauf<=$#arr+1 && ($passt != 1) ;$lauf++)
{
($Name1, $Name2 )=split( / /, $arr[$lauf],2);
# Suchmuster aus Tabelle uebernehmen
# ohne auf Gross und Kleinschreibung
# zu achten (RegExpression für if )
if ($Found =~ /\b$Name1\b/i) # Ausfiltern des Task von den Optionen
{
$passt = 1;
($part1, $part3) = split( />/,$Zeile,2);
$part2=$1;
print $Zeile,"PArt", $part2. "w w".$part1;
# print $part3;
# print "replace in Line \t",$n." " .$Name1." gegen ".$Name2;
}
else
{
$part2="";
$passt = 0;
}
}
das 2. split funktioniert noch nicht wenns gehen sollte dann wollte ich das Ganze mit dem Ersetzen zurückschieben. in ein ZielArray
das in Roberts Art und Weise ausgegeben wird.
Dabei ist natürlich auch eine Ausgabe in eine
Datei möglich. Fertig ist die primitive "Umwandlungsmaschine"
"good hacks "
Gruss
Christoph
-
Hi Christoph
Also Roberts Script printet alle Tags von einer Zeile, nur eben untereinander. Hab das jetzt noch mal explizit überprüft. Du verwendest doch die gleiche Einlese-Methode.
Deinen Script kann ich praktisch nicht nachvollziehen. Die vielen Kürzel, plötzlich auftauchende Variablen... ich kann nur raten, welche Aufgabe die haben . Ich seh nur, dass Du alles in einer einzigen geschachtelten Anweisung geschrieben hast. Die fehlenden schliessenden geschweiften sind sicher ein Übertragungsfehler... Leider. Hier geht erst mal nichts mehr.
--Scheinbrar bringt es nichts, den file komplett einlesen zu lassen und nach Mustervergleich alle Funde gezielt ersetzen zu lassen?
> ...Fertig ist die primitive "Umwandlungsmaschine"
Hauptsache, sie erfüllt ihre Aufgabe. Wenn alles mal läuft, kann man sich ggf immer noch eine Steigerung ausdenken. Dann ist vielleicht doch direkte HTML-Eingabe möglich.
Gruss
Bernhard
-
-
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen