$xNeTworKx: Sucben und ersetzen will nicht?

Hallo,
ich sitze seit gestern an einem Problem, das ich nicht verstehe. Ich will ca 1000 Dateien öffnen, darin etwas verändern, und wieder zurückschreiben und zwar will ich :
URL's, die zwischen <usergrafik> udn </usergrafik> stehen in HTML Code umwandeln..
und zu gefundendenen Emailadressen <email>EMAILADR.</email> eine neue Zeile <showmail>1</showmail> hinzufügen, aber nichts davon klappt. Die Dateien werden richtig eingelesen, das klappt nun mal, aber es liegt anscheinen irgendwie an den regulären Ausdrücken, aber ich kann den Fehler nicht finden?

$xNeTworKx.

http://tools.acid4u.com/umbenenner.txt

--
Mit Computern lösen wir Probleme, die wir ohne sie gar nicht hätten.
  1. Hallo,
    ich sitze seit gestern an einem Problem, das ich nicht verstehe. Ich will ca 1000 Dateien öffnen, darin etwas verändern, und wieder zurückschreiben und zwar will ich :
    URL's, die zwischen <usergrafik> udn </usergrafik> stehen in HTML Code umwandeln..
    und zu gefundendenen Emailadressen <email>EMAILADR.</email> eine neue Zeile <showmail>1</showmail> hinzufügen, aber nichts davon klappt. Die Dateien werden richtig eingelesen, das klappt nun mal, aber es liegt anscheinen irgendwie an den regulären Ausdrücken, aber ich kann den Fehler nicht finden?

    Da haste dir einiges vorgenommen. Es gibt dazu passende Module ich kenn allerdings nur den HTML::Parser der vermutlich nicht deinen Anforderungen entspricht.

    Das Problem sind diese Zeilen:
    if $input =~ /<hoehe>(.+?)</hoehe>/;

    Der geklammerte Ausdruck sucht jedes Zeichen mindestens einmal, d.h. alle Zeichen bis zum Schluss. Da gehört in etwa ein [^<]+? rein, da du alle Zeichen ausser dem "größer als"-Zeichen suchst.

    Struppi.

    1. Hallo,

      Das Problem sind diese Zeilen:
      if $input =~ /<hoehe>(.+?)</hoehe>/;

      Der geklammerte Ausdruck sucht jedes Zeichen mindestens einmal, d.h. alle Zeichen bis zum Schluss. Da gehört in etwa ein [^<]+? rein, da du alle Zeichen ausser dem "größer als"-Zeichen suchst.

      Nein, weil ich ganz genau weis, was darin steht. Es sind nun mal nur 2, bzw 3 Zahlen, bei Höehe Breite, und Bei <usergrafik></usergrafik> steht immer eine URL ohne Leerzeichen, oder so irgendwas, die auf .swf, gif, jpg, oder png endet. Ich weis das so genau, weil diese Dateien von meinem Board so angelegt werden, und hab die Dateien schon 2 Mal auf diese Weise mit Erfolg geändert nur jetzt funktioniert es irgendwie nicht?

      Ich frage mich, was zB daran falsch ist?

      $input =~ s/$usergrafik/<img src="$usergrafik" width="$breite" height="$hoehe" alt="GRAFIK ERROR" />/sg;

      $xNeTworKx.

      --
      Mit Computern lösen wir Probleme, die wir ohne sie gar nicht hätten.
      1. Hallo,

        Das Problem sind diese Zeilen:
        if $input =~ /<hoehe>(.+?)</hoehe>/;

        Der geklammerte Ausdruck sucht jedes Zeichen mindestens einmal, d.h. alle Zeichen bis zum Schluss. Da gehört in etwa ein [^<]+? rein, da du alle Zeichen ausser dem "größer als"-Zeichen suchst.

        Nein, weil ich ganz genau weis, was darin steht. Es sind nun mal nur 2, bzw 3 Zahlen, bei Höehe Breite, und Bei <usergrafik></usergrafik> steht immer eine

        Ich habe mich geirrt. Es geht beides.
        $x =~ /<hoehe>(.+?)</hoehe>/;
        $x =~ /<hoehe>([^<]+)/;

        aber dein Problem ist nicht gelöst, du solltest dir einfach mal die Werte ausgeben lassen.

        Struppi.

        1. Hallo,

          Ich habe mich geirrt. Es geht beides.
          $x =~ /<hoehe>(.+?)</hoehe>/;
          $x =~ /<hoehe>([^<]+)/;

          Anscheinend liegst wohl doch irgendwie an den Ausdrücken. Mit
          if ($input =~ /<usergrafik>(http://.+?)</usergrafik><breite>(\d\d\d?)</breite><hoehe>(\d\d\d?)</hoehe>/sg)   { $usergrafik = $1; $breite = $2; $hoehe = $3;}

          schaffe ich es endlich, mir die richtigen Werte ausgeben zu lassen. Ich glaube das zurückschreiben in die Files wird kein Problem sein, danke euch beiden.

          $xNeTworKx.

          --
          Mit Computern lösen wir Probleme, die wir ohne sie gar nicht hätten.
  2. Hi,

    Die Dateien werden richtig eingelesen, das klappt nun mal, aber es liegt anscheinen irgendwie an den regulären Ausdrücken, aber ich kann den Fehler nicht finden?

    was für Debug-Ausgaben hast Du gemacht? Werden $usergrafik & Co. überhaupt gefunden?

    http://tools.acid4u.com/umbenenner.txt
    [...] $input =~ /<usergrafik>(.+?)</usergrafik>/sg;

    $input =~ m!<usergrafik>(.+?)</usergrafik>!sg;

    Spätestens bei XML-Tags lohnt es sich, andere Delimiter zu wählen. Übrigens:

    my ($usergrafik) = ($input =~ m!...(...)...!) or '';

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes