Verdammt ich dreh noch durch - Profie benötigt
Torwächter
- perl
Hallo zusammen,
ich steh vorm nächsten Problem, was scheinbar unlösbar zu sein scheint:
-ich habe einen Text
-in diesem Text sind 3 Nummern
der Text steht in >einer< Zeile, daher ist ein foreach nicht möglich.
ich kann extrahieren mit: $text =~ s/(\d)-(\d{3})-(\d{5})-([a-zA-Z0-9])/link$1und$2/g;
mein Problem:
ich muss eine Überprüfung der letzten Ziffer durchführen (mit "if...")
aber wie ? in einer Zeile 3 mal if ???
Wer das Problem lösen kann bekommt meinen Respekt !
Greetings
Torwächter
hi!
Versuch's mal mit einer verständlichen Formulierung deiner Frage,
dann kann dir vielleicht auch jemand helfen.
Du hast in einem Text drei Nummern, der auf folgenden regulären
Ausdruck passt:
/(\d)-(\d{3})-(\d{5})-([a-zA-Z0-9])/
Diesen Teil im Text ersetzt du durch irgendwas anderes, wobei die
ersten beiden Nummern mitverwendet werden. Soweit klar. Was hast du
jetzt mit der dritten Nummer vor? Und woran scheitert die Umsetzung?
bye, Frank!
Hallo,
also, ich habe eine Zeile mit Text:
$text=qq~aaaaaaaaaaaaaaaaaCODE1aaaaaaaaaaaaaCODE2aaaaaaaaaCODE3aaaaaa~;
wie kann ich in dieser Zeile die Codes (alle) durch BBBBB ersetzen:
$text=~s/(\d)-(\d{3})-(\d{5})-([a-zA-Z0-9])/BBBBB/g;
Funzt.
ABER
ich kann diesen Befehl nicht benutzen, da ich bei jedem Code (mehr als nur 3) eine if Anweisung durchführen muss:
$text=~s/(\d)-(\d{3})-(\d{5})-([a-zA-Z0-9])/if($4 ne "X"){...}/g;
Funzt natürlich so nicht.
D.H.
Ich muss also irgendeine Schleife benutzen, die diese Zeile nach dem Suchmuster (\d)-(\d{3})-(\d{5})-([a-zA-Z0-9]) durchsucht und wenn eins gefunden ein If Befehlt ausführt UND DANN WEITERSUCHT.
Greetings
Torwächter
PS: sorry für die letzte Formulierung, ich hab schon beinahe geschlafen :)
Hallo!
also, ich habe eine Zeile mit Text:
$text=qq~aaaaaaaaaaaaaaaaaCODE1aaaaaaaaaaaaaCODE2aaaaaaaaaCODE3aaaaaa~;
wie kann ich in dieser Zeile die Codes (alle) durch BBBBB ersetzen:
$text=~s/(\d)-(\d{3})-(\d{5})-([a-zA-Z0-9])/BBBBB/g;
Funzt.
ABER
ich kann diesen Befehl nicht benutzen, da ich bei jedem Code (mehr als nur 3) eine if Anweisung durchführen muss:
$text=~s/(\d)-(\d{3})-(\d{5})-([a-zA-Z0-9])/if($4 ne "X"){...}/g;
Funzt natürlich so nicht.
Aha, ich glaube hier ist ein PERL-Experte wie ich von Nöten ;-)
Ich muss also irgendeine Schleife benutzen, die diese Zeile nach dem Suchmuster (\d)-(\d{3})-(\d{5})-([a-zA-Z0-9]) durchsucht und wenn eins gefunden ein If Befehlt ausführt UND DANN WEITERSUCHT.
leider finde ich gerade mein PERL Buch nicht dann könnte ich etwas mehr sagen, aber ist es so das Du die genaue Anzahl der vorkommenden Codes kennst? Wenn ja kannst Du das schon wie oben machen, halt nicht mit s///, sondern lediglich m//(glaube ich) zuminest nur "finden". In PERL kann man doch die Treffer des Regulären Ausdrucks auch im PERL Code danach verwenden, oder? Dann mach doch erst da die if-Abfragen und ersetze was Du willst!
In PHP gibt es mit preg_match() die Möglichkeit, alle Treffer in einen Array zu schreiben, der natürlich sehr angenehm auszuwerten ist, evtl geht das auch irgendwie in PERL?
Grüße
Andreas
Hi,
das Problem ist, die Anzahl der Nummern ist pro Zeile unterschiedlich.
Das Problem ist auch nicht, dass ich die Nummern nicht finde, sondern diese zu überprüfen:
while($mangaprint =~ /(\d)-(\d{3})-(\d{5})-([a-zA-Z0-9])/)
{
if ($1 ne "x")
{
Anweisung();
}
else
{
Abweisung();
}
}
Ich muss es irgendwie schaffen, dass alle Nummern (Codes) gesucht werden und für JEDEN eine solche If-Überprüfung gestartet wird.
Greetings
Torwächter
Hallo
Hi,
das Problem ist, die Anzahl der Nummern ist pro Zeile unterschiedlich.
Im OP hast Du von einer einzigen Zeile gesprochen. Jetzt sind es schon mehrere. Sind es nun mehrere Zeilen in einer einzigen Variable, oder mehrere Zeilen auf mehrere Variablen verteilt, oder doch nur eine Zeile in einer Variablen mit mehreren Blöcken, auf die der Ausdruck passt?
Das Problem ist auch nicht, dass ich die Nummern nicht finde, sondern diese zu überprüfen:
while($mangaprint =~ /(\d)-(\d{3})-(\d{5})-([a-zA-Z0-9])/)
Das kann nur funktionieren, wenn Du den modifier /g verwendest, der alle Vorkommen des Suchmusters finden lässt.
Bist Du Dir sicher, daß der Ausdruck das findet, was Du suchst. So wie oben, können durchaus die "Code"-blöcke ineinander übergreifen.
{
if ($1 ne "x")
{
Anweisung();
}
else
{
Abweisung();
}
}
Ich muss es irgendwie schaffen, dass alle Nummern (Codes) gesucht werden und für JEDEN eine solche If-Überprüfung gestartet wird.
Wo ist denn jetzt das Problem? Du hast bei einem Treffer die Codes in den Variablen $1, $2, $3 und $4. Was Du damit machst bleibt Dir überlassen.
Vielleicht wäre es sinnvoll, Dein Problem nicht so stark zu reduzieren, und mal eine Zeichenkette aus dem realen Leben vorzustellen. Evtl. wäre es imho auch sinnvoll, den _echten_ Code(-Auszug) auf einer Website zu veröffentlichen (einfaches Syntaxhighlighting kannst Du mit http://www.dynamic-web-development.de/pub/perl/pl2.html hinzufügen [oder vim verwenden ;)])
Gruß Alex
--
http://www.google.de/search?hl=de&safe=off&q=Rechtschreibung+Standart
Hallo,
imo sind es ca 100 Zeilen, aber daraus wird schon eine Zeile gefiltert, daher nur eine Zeile :)
Toll, nun hab ich alles schon ausprobiert und nachdem du geantwortet hast funzt es :-?)
(ich hatte es auch schon mit "g" versucht, aber da hatt es noch keine Wirkung gezeigt.
Danke an euch alle.
Greetings
Torwächter
Hallo,
Funzt.
Das Wort kenne ich nicht. Was soll das bedeuten?
ich kann diesen Befehl nicht benutzen, da ich bei jedem Code (mehr als nur 3)
eine if Anweisung durchführen muss:
$text=~s/(\d)-(\d{3})-(\d{5})-([a-zA-Z0-9])/if($4 ne "X"){...}/g;
Funzt natürlich so nicht.
S.O.
Wenn du meinst, dass der Befehl oben nicht funktioniert, dann hast du Recht. Da
fehlt der 'e'-Modifier. Lies bitte
perldoc perlre
fuer mehr Infos.
Gruesse,
CK
morgens ...
mein Problem: ich muss eine Überprüfung der letzten Ziffer durchführen (mit "if...")
ich bin mir nicht ganz sicher, ob das, was ich in deinem Code als "letzte Ziffer" zur Zeit lese, wirklich die Stelle ist, die du meinst. Aber:
wenn man vor einer solchen Aufgabe steht, ist es immer mal wert, auszuprobieren, ib diese "letzte Ziffer" nicht innerhalb der Subroutine in Form einer Variablen überprüft werden kann. In deinem konkreten Code:
&letzte_Ziffer = if (link$1und$2 == irgendwas {
na nun mach mal
} else {
nee, das hab ich nicht gemeint, mach was Sinnvolles
}
grüßchens
Christoph S.
Hallo!
Nicht mal Profi richtig schreiben koennen aber RegExp konstruieren wollen.
Selten so gelacht
Rechtschreibkorrektor