ThomasP: ereg() oder der ganz normale Wahnsinn

Hallo Leute!

Ich steh momentan im Wald. Folgendes Problem:

Ich habe den Inhalt einer Datei in ein array gelesen ($linein=file(..))
dann hole ich die einzelnen Zeilen raus (while($line=each($linein)))

Nun das Problem

Ich will den String NumOfBooks="x" in einer Zeile finden und habe es so versucht:

if(ereg("(NumOfBooks)([0-9])",$line,$reg))

(wahlweise sind noch +,*,- oder space zwischen die Klammern zu setzen)
er findet es nicht!

Es ist ganz einfach!!! Ich seh's nur nicht!!

Danke fuer die Hilfe!

Gruß
Thomas

PS: habe auch die Klammern um [0-9] mal weggelassen - hilft nix :-(

  1. Hallo Thomas,

    Ich hoffe, ich hab dich richtig verstanden. Auf diese Weise
    kannst du die Zeilen ausfindig machen, in denen NumOfBooks="x" mit x=0-9 +-* vorkommt:

    $linein="test.txt";
    open(FILE, "<$linein");
    while(<FILE>) {
    chop;
    @Inhalt = split(/\n/);
    foreach $line (@Inhalt) {
      if($line =~ /NumOfBooks/ && $line =~ /[0-9] +-*/)
      {
       print "$line\n";
      }
    }
    }
    close FILE;

    hoffentlich hilfts dir weiter.

    viele Grüße,
    Anatol

    1. Ups,

      du hattest ja ein PHP-Problem.
      Damit kenn ich mich leider (noch) nicht aus. Dachte, es handelt sich um Perl...
      Dann hilft dir das wohl nicht weiter.

      Anatol

      1. Hi Anatol!

        Danke, auch wenn ich es selbst herausfinden musste.

        Fuer alle, die es interessiert:

        if(ereg("(NumOfBooks.*=.*")([0-9]+)",$line,$reg))

        die Nummer steht dann in $reg[2]

        Gruß
        Thomas

        1. Hi Leutz,

          ihr könntet das mal weiterverfolgen, vielleicht entsteht daraus ja mal so was wie PHPerl *grins*.

          CU
          speedy

    2. Sag mal wofür ist das chop;?

      1. Sag mal wofür ist das chop;?

        Hmmmmmm, ja. Wofür ist hier eigentlich das chop;?
        Ich kann dir jetzt gar nicht sagen, wie sich das hier eingeschlichen hat. Das hab ich wohl irgendwoher
        übernommen. Naja, ich bin selbst ein ziemlicher Perl-Neuling. Man kanns natürlich auch weglassen,
        macht keinen Unterschied, ...

        ...(oder?). <Zweifel>

        Viele Grüße, Anatol

      2. Moin!

        Sag mal wofür ist das chop;?

        Schneidet das letzte Zeichen vom eingelesenen String ab, in der Annahme, dass dies ein Linefeed (\n) ist.
        Diese Annahme wird jedoch nicht ueberprueft, es fliegt also immer das letzte Zeichen raus. Deshalb gibt es
        auch chomp(), welches prueft, was am Ende eines Strings steht, und nur wenn dies mit dem derzeit
        gesetzten input record separator (Variable $/, normalerweise ist das "\n") uebereinstimmt, wird abgeschnitten.
        $/ kann uebrigens mehrere Zeichen lang sein. Sinn macht das ganze vor allem, weil man niemals sicher
        sein kann, dass die letzte Zeile einer Textdatei auch wirklich mit einem Linefeed abgeschlossen ist.
        Aber eigentlich steht das auch alles in perlfunc bei chop und chomp.

        Calocybe

        P.S. Der split-Aufruf ist uebrigens sinnlos. Es wird ohnehin immer nur eine Zeile nach $_ eingelesen und
        diese dann in der Schleife verarbeitet.