AndreasN: Problem mit GREP und umliegenden Zahlen

Holla,

habe da ein mittelschweres Problem mit der Grep Funktion:

125 45 1 14 23 58 689 0
69 478 526 245 0
usw

So sehen Freundeslisten aus ( d.h. das da sind die IDs die dann in $friends eingetragen sind )

Mit
if (grep/$id\s/,$friends) ....
wird geprüft ob die eigene ID ( $id ) mit der in der $friends übereinstimmt. Das ganze funktioniert soweit ganz gut, nur ist mir heute leider etwas aufgefallen:
Angenommen jemand hat die ID 8 hätte er EIGENTLICH in keiner der beiden Listen eine Übereinstimmung haben dürfen, sie IST aber da ... sogar in BEIDEN. es liegt nämlich daran , dass nicht die ganze Zahl geprüft wird, sondern die 8 mit der 58 aus der ersten Zeile und der 478 aus der 2. Zeile übereinstimmt.
Jetzt meine Frage: Wie kann ich das verhindern dass er Teile der Zahlen mit berücksichtigt ? Mit
if (grep/\s$id\s/,$friends)
kann ich leider nicht sicherstellen dass immer eine ganze Zahl genommen wird, da sonst die ID die am anfand der Zeile steht NICHT berücksichtigt wird, WEIL sie ja kein Leerzeichen davor hat.

Ich hoffe irgendwer weiss Rat ?-) Bin für jeden Tip Dankbar ;)

MfG
AndreasN

--
Wer lesen kann ist klar im Vorteil
  1. hi,

    habe da ein mittelschweres Problem mit der Grep Funktion:

    125 45 1 14 23 58 689 0
    69 478 526 245 0
    usw

    So sehen Freundeslisten aus ( d.h. das da sind die IDs die dann in $friends eingetragen sind )

    Mit
    if (grep/$id\s/,$friends) ....
    wird geprüft ob die eigene ID ( $id ) mit der in der $friends übereinstimmt. Das ganze funktioniert soweit ganz gut, nur ist mir heute leider etwas aufgefallen:
    Angenommen jemand hat die ID 8 hätte er EIGENTLICH in keiner der beiden Listen eine Übereinstimmung haben dürfen, sie IST aber da ... sogar in BEIDEN. es liegt nämlich daran , dass nicht die ganze Zahl geprüft wird, sondern die 8 mit der 58 aus der ersten Zeile und der 478 aus der 2. Zeile übereinstimmt.
    Jetzt meine Frage: Wie kann ich das verhindern dass er Teile der Zahlen mit berücksichtigt ? Mit
    if (grep/\s$id\s/,$friends)
    kann ich leider nicht sicherstellen dass immer eine ganze Zahl genommen wird, da sonst die ID die am anfand der Zeile steht NICHT berücksichtigt wird, WEIL sie ja kein Leerzeichen davor hat.

    ungeprüft: /\b$zahl\b/

    Mein Tipp: Text::Query verwenden zur Suche. Ist effizienter.

    Viele Grüße, Rolf

    --
    SELFforum - Das Tor zur Welt!
    Theoretiker: Wie kommt das Kupfer in die Leitung?
    Praktiker: Wie kommt der Strom in die Leitung?
    1. Holla,

      ungeprüft: /\b$zahl\b/

      Vielen Dank ! Das scheint genau das zu sein was ich gebraucht habe ;)

      Mein Tipp: Text::Query verwenden zur Suche. Ist effizienter.

      Öhm .. ich denke mal dass das ein Modul ist oder ? Das scheint mein Anbieter nicht zu unterstützen :-(((

      Trotzdem danke noch mal ;)

      MfG
      AndreasN

      --
      Wer lesen kann ist klar im Vorteil
  2. Holla,

    habe da ein mittelschweres Problem mit der Grep Funktion:

    125 45 1 14 23 58 689 0
    69 478 526 245 0
    usw

    So sehen Freundeslisten aus ( d.h. das da sind die IDs die dann in $friends eingetragen sind )

    Mit
    if (grep/$id\s/,$friends) ....
    wird geprüft ob die eigene ID ( $id ) mit der in der $friends übereinstimmt. Das ganze funktioniert soweit ganz gut, nur ist mir heute leider etwas aufgefallen:

    Wenn $id wirklich eine ID ist, dann sollltest du einfach einen Vergleich machen. Wenn es nur Zahlen sind:
    if ( grep $_ == $id, @friends ) ....
    oder

    if ( grep $_ eq $id, @friends ) ....

    Struppi.

    1. Holla,

      Wenn $id wirklich eine ID ist, dann sollltest du einfach einen Vergleich machen. Wenn es nur Zahlen sind:
      if ( grep $_ == $id, @friends ) ....
      oder

      Hmpf ... ( es sind nur Zahlen ) ist klar, auf die logischste Lösung kommt man natürlich nicht von alleine , da muss man erst hingeschubst werden :-(

      Aber trotzdem Danke , das klingt mehr als Logisch, als dass es so funktionieren sollte ;) Danke !

      MfG
      AndreasN

      --
      Wer lesen kann ist klar im Vorteil