Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2002 Teil von August

SELFHTML Forumsarchiv
Verdammt ich dreh noch durch - Profie benötigt

Informationsseite
  1. Seite (PERL) Verdammt ich dreh noch durch - Profie benötigt von Torwächter, 29. 08. 2002, 00:34
nach unten

Verdammt ich dreh noch durch - Profie benötigt

Die folgende Nachricht zum Thema stammt von: Torwächter, 29. 08. 2002, 00:34

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

nach obennach unten

Verdammt ich dreh noch durch - Profie benötigt

Die folgende Nachricht zum Thema stammt von: Frank Schönmann, 29. 08. 2002, 01:45

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!

nach obennach unten

Verdammt ich dreh noch durch - Profie benötigt

Die folgende Nachricht zum Thema stammt von: Torwächter, 29. 08. 2002, 07:14

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

nach obennach unten

Verdammt ich dreh noch durch - Profie benötigt

Die folgende Nachricht zum Thema stammt von: Andreas, 29. 08. 2002, 08:04

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

nach obennach unten

Verdammt ich dreh noch durch - Profie benötigt

Die folgende Nachricht zum Thema stammt von: Torwächter, 29. 08. 2002, 09:04

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

nach obennach unten

Verdammt ich dreh noch durch - Profie benötigt

Die folgende Nachricht zum Thema stammt von: AlexBausW, 29. 08. 2002, 09:23

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

nach obennach unten

Verdammt ich dreh noch durch - Profie benötigt

Die folgende Nachricht zum Thema stammt von: Torwächter, 29. 08. 2002, 09:35

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

nach obennach unten

Verdammt ich dreh noch durch - Profie benötigt

Die folgende Nachricht zum Thema stammt von: Christian Kruse, 29. 08. 2002, 10:34

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

nach obennach unten

Verdammt ich dreh noch durch - Profie benötigt

Die folgende Nachricht zum Thema stammt von: Christoph Schnauß, 29. 08. 2002, 01:46

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.

nach obennach unten

Profi (nt)

Die folgende Nachricht zum Thema stammt von: Rechtschreibkorrektor, 29. 08. 2002, 13:30

Hallo!

Nicht mal Profi richtig schreiben koennen aber RegExp konstruieren wollen.
Selten so gelacht

Rechtschreibkorrektor

nach oben
Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2002 Teil von August

© 1998-2008 Seite Impressum, Software: Classic Forum