Re: variable mit inhalt von liste vergleichen? - baseportal Forum - Web-Anwendungen einfach, schnell, leistungsfähig!
baseportal
English - Deutsch "Es gibt keine dummen Fragen - jeder hat einmal angefangen"

 baseportal-ForumDie aktuellsten 10, 30, 50, 100 Einträge anzeigen.  

 
 Ausgewählter Eintrag: Zur Liste 
    Beitrag von Christoph Bergmann (8110 Beiträge) am Montag, 5.März.2001, 18:23.
    Re: variable mit inhalt von liste vergleichen?

      Es gibt einen Unterschied zwischen

      @mail
      

      und

      "@mail"

      Letzteres wird speziell "interpoliert" und bedeutet, dass zwischen jedem einzelnen Element der Liste ein bestimmtes Zeichen ausgegeben wird, normalerweise das Leerzeichen. Das kann man aber verstellen, indem man der speziellen Variablen $" (das ist gleich die Antwort für Winkiller, jetzt hab ich dann doch nachgeguckt ;-) Ach ja: $| ist die "autoflush"-variable, wenn man die auf 1 setzt, dann werden Ausgaben _sofort_ gemacht und nicht gepuffert) einen anderen Wert zuweist:

      $"=","; out "@mail";
      

      Gibt die Liste mit Kommas dazwischen aus...

      Die Idee bei obiger Zeile ist, dass " @mail " z.B. sowas ergibt:

      " hans@gmx.de huber@web.de bla@blubb.de "

      (die Anführungsstriche gehören nicht zum eigentlichen Text) und somit findet " $EMail " z.B. " hans@web.de ". Würde man das mit den Leerzeichen weglassen, würde z.B. auch "er@web.de" gefunden werden, was nicht gewünscht ist...


    Antworten

 Alle Einträge zum Thema: Zur Liste 
    Beitrag von Sander (8133 Beiträge) am Sonntag, 4.März.2001, 02:13.
    variable mit inhalt von liste vergleichen?

      Ich habe ne $EMail, die soll mit dem Inhalt von @mail (alles emailadressen) verglichen werden und wenn das Element in der liste nicht existiert, mit push angehangen werden. Wie stelle ich den Vergleich an?

      Sander

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Sonntag, 4.März.2001, 18:48.
    Re: variable mit inhalt von liste vergleichen?

      Hehe, die Frage taucht bestimmt in der Perl-Faq auf ;-)

      Mal sehen, erste Idee wäre folgende:

      $ok=0;
      foreach (@mail)
      {
        if($EMail eq $_) { $ok=1; last; }
      }
      push @mail, $EMail unless $ok;
      

      Schneller müsste es hiermit gehen und kürzer ist es auch:

      push @mail, $EMail if index(" @mail ", " $EMail ")<0);
      

      Voraussetzung: Der List-Trenner ist nicht verstellt worden (das ist irgendeine besondere Variable von Perl, weiss grad nicht auswendig, welche)

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Sonntag, 4.März.2001, 18:49.
    Re: variable mit inhalt von liste vergleichen? - oops, klammer zuviel

      So ist es richtig:

      push @mail, $EMail if index(" @mail ", " $EMail ")<0;
      

     Antworten

    Beitrag von Winkiller (175 Beiträge) am Montag, 5.März.2001, 17:24. WWW: www.hpks.org
    Re: variable mit inhalt von liste vergleichen?

      Der List-Trenner ist doch bestimmt $|
      oder?
      Oder ist es $? oder $! oder $: $= könnte es auch noch geben und $( $) sowie $" und $* nicht zu vergessen $+ vielleicht gibts noch $$, ${ oder $}

      Aber ich glaube es ist $|

     Antworten

    Beitrag von Sander (8133 Beiträge) am Montag, 5.März.2001, 18:11.
    Re: variable mit inhalt von liste vergleichen?

      keine Ahnung aber wenn ich out @mail; schreibe, kommt zB:
      sander@snowpage.desander@snowpage.deusw ohne leerzeichen oder anderem getrennt. Auf jeden Fall klappt Christoph sein Vorschlag mit Index aber ohne Leerzeichen bei (" @mail ", " $EMail ").

      Danke

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Montag, 5.März.2001, 18:23.
    Re: variable mit inhalt von liste vergleichen?

      Es gibt einen Unterschied zwischen

      @mail
      

      und

      "@mail"

      Letzteres wird speziell "interpoliert" und bedeutet, dass zwischen jedem einzelnen Element der Liste ein bestimmtes Zeichen ausgegeben wird, normalerweise das Leerzeichen. Das kann man aber verstellen, indem man der speziellen Variablen $" (das ist gleich die Antwort für Winkiller, jetzt hab ich dann doch nachgeguckt ;-) Ach ja: $| ist die "autoflush"-variable, wenn man die auf 1 setzt, dann werden Ausgaben _sofort_ gemacht und nicht gepuffert) einen anderen Wert zuweist:

      $"=","; out "@mail";
      

      Gibt die Liste mit Kommas dazwischen aus...

      Die Idee bei obiger Zeile ist, dass " @mail " z.B. sowas ergibt:

      " hans@gmx.de huber@web.de bla@blubb.de "

      (die Anführungsstriche gehören nicht zum eigentlichen Text) und somit findet " $EMail " z.B. " hans@web.de ". Würde man das mit den Leerzeichen weglassen, würde z.B. auch "er@web.de" gefunden werden, was nicht gewünscht ist...

     Antworten

    Beitrag von Sander (8133 Beiträge) am Montag, 5.März.2001, 20:51.
    Re: variable mit inhalt von liste vergleichen?

      versteh ich nicht. Ich hab mal versucht, alles nachzuvollziehen aber finde keine Unterschiede.
      Ich hab das jetzt stehen:
      while get_next
      {
      push (@mail, "$EMail,") if index("@mail", "$EMail")<0;
      }
      out "@mail";
      

      Ausgabe:
      sander@snowpage.de,bla@blubb.de,ich@du.com,

      kann ich das nun so stehen lassen, den zweck erfüllt es ja - aber mir ist aufgefallen, das eine EMail ohne @ (also zb nur "qwertz") nicht mit in die liste gepush wird, was ja auch ok ist aber warum?

      Also was nun oder tun?

      Sander

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Dienstag, 6.März.2001, 18:52.
    Re: variable mit inhalt von liste vergleichen?

      Unterschied _mit_ den Leerzeichen ist, dass es nicht zu Problemen führt, wenn eine EMail Bestandteil einer anderen anderen ist, Beispiel: Du hast eine Email die lautet: Huber@gmx.de und eine: er@gmx.de - mit obigem Code würde "er@gmx.de" NICHT in die Liste aufgenommen, weil das index bei "hubER@GMX.DE" einen treffer findet - das trifft sicherlich relativ selten zu, deshalb funktioniert Dein Code fürs Erste (aber 100% ist er nicht), verstanden? Also richtig müsste obiger Code lauten:

      while get_next
      {
        push (@mail, " $EMail ") if index(" @mail ", " $EMail ")<0;
      }
      out "@mail"; 
      


      Mmhhh, Du schreibst aber auch, dass die Ausgabe bei

      out "@mail";
      

      zu einer Ausgabe OHNE Leerzeichen führt?? Das ist merkwürdig... Oder sieht das jetzt hier nur so aus??

     Antworten

    Beitrag von Sander (8133 Beiträge) am Dienstag, 6.März.2001, 19:46.
    Re: variable mit inhalt von liste vergleichen?

      ich lass es mit , reinschreiben und dann wird alles mit komma ohne Leerzeichen ausgegeben.

      {
      push (@mail, "$EMail,") if index("@mail", "$EMail")<0;
      }
      out "@mail";
      

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Freitag, 9.März.2001, 15:22.
    Re: variable mit inhalt von liste vergleichen? - wunder ;-)

      Na, wie Du meinst... Aber wie geschrieben, das wird zu einem falschen Ergebnis führen, sobald zwei Emails wie "meier@web.de" und "er@web.de" auftauchen... ;-)

      Das mit den nicht-vorhandenen Leerzeichen find ich weiterhin verwunderlich...

     Antworten

    Beitrag von Sander (8133 Beiträge) am Freitag, 9.März.2001, 16:04.
    Re: variable mit inhalt von liste vergleichen? - wunder ;-)

      und wie siehts so aus? passt das dann?
      push (@mail, "$EMail,") if index("@mail,", "$EMail,")<0;
      

      Sander

     Antworten


     
 Liste der Einträge von 64650 bis 64800:Einklappen Zur Eingabe 
Neueste Einträge << 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | Neuere Einträge < Zur Eingabe  > Ältere Einträge | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >> Älteste Einträge


Zurück zur Homepage

© baseportal.de. Alle Rechte vorbehalten. Nutzungsbedingungen



powered in 0.12s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!