1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

ABAddressBook-API, Suche

Dieses Thema im Forum "OS X-Developer" wurde erstellt von bezierkurve, 08.02.10.

  1. bezierkurve

    bezierkurve Danziger Kant

    Dabei seit:
    12.06.05
    Beiträge:
    3.861
    Moin,

    mittels der API kann ich ja schön aufs systeminterne Adressbuch zugreifen. Wunderbar.

    Ich möchte nun nach Telefonnummern suchen, um ggfs. die zugehörigen Namen zu ermitteln. Im Adressbuch habe ich jedoch meine Nummern der Übersicht halber mit Leerzeichen gruppiert, also z. B. +49 1234 56789. Suche ich nun nach +49123456789, finde ich natürlich nichts.

    Gibt’s grundsätzlich eine Möglichkeit, die Suche ein wenig „fuzzy“ oder intelligent zu gestalten? Oder habe ich keine andere Wahl, als alle Kontakte durchzugehen und den Stringvergleich selbst vorzunehmen?
     
    #1 bezierkurve, 08.02.10
    Zuletzt bearbeitet: 08.02.10
  2. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Das Problem kommt mir bekannt vor... Du arbeitest aber nicht am S...f... Projekt?

    Anyway, eine Fuzzy Suche gibt es nicht. Du musst die Nummern selbst normalisieren oder sonstwie abgleichen.

    Alex
     
    bezierkurve gefällt das.
  3. bezierkurve

    bezierkurve Danziger Kant

    Dabei seit:
    12.06.05
    Beiträge:
    3.861
    Nope. Ist gerade noch reines Privatvergnügen.

    Danke Dir für die jedenfalls für die Antwort!
     
  4. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    07.01.07
    Beiträge:
    432
    Lass alle Leerzeichen erstmal mit einem leeren String ersetzen. Dann hast du dein gewünschter Suchbegriff:

    Code:
    stringWithoutWhitespaces = [myStringWithWhitespaces stringByReplacingOccurrencesOfString:@" " withString:@""];
    Gruss ppocket
     
  5. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Das stimmt so nicht. Telefonnummern können in unterschiedlichen Formaten angegeben werden, zum Beispiel +49 123 456789, 0123 456789, 0049 123 456789 oder sogar +49 (0) 123 456789

    Tante Edith erinnert mich an (0123) 456789

    Alex
     
    #5 below, 08.02.10
    Zuletzt bearbeitet: 08.02.10
  6. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    07.01.07
    Beiträge:
    432
    Wenn er seine Nummern nur mit Leerzeichen versehen hat, stimmt das sehr wohl. Aber natürlich hast du recht, es gibt viele Formate, welchem man nicht alle auf einmal behandeln kann.

    Gruss ppocket

    PS: Alle Nummern haben aber dieselbe Anzahl Ziffern. Nutze das aus. Ich würde das irgendwie so machen:

    1) Alle Leerzeichen und Klammern wie oben beschrieben durch leere Strings ersetzen.

    2)
    - hat die Nummer dann noch 12 Zeichen, ist sie von der Form +41791238930
    - hat die Nummer dann noch 10 Zeichen, ist sie von der Form 0791238930
    - hat die Nummer dann noch 13 Zeichen, ist sie von der Form 0041791238930

    Dann alle Nummern in dieselbe Form bringen und Suche drüber laufen lassen...
     
  7. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    07.01.07
    Beiträge:
    432
    Lässt du die + en durch 00 ersetzen, fällt dir sogar noch ein Fall weg... Umgekehrt macht es keinen Sinn, da eine Nummer durchaus weiter hinten noch zwei Nullen in Folge haben kann, jedoch kein weiteres +...
     
  8. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Ich habe da mal ein nicht ganz triviales Stück Code geschrieben, dass alle Nummern schön in ein normiertes Format bringt.

    Da muss man ein bischen Nachdenken, aber mit einer hübschen Regular Expression hab ich das gut hinbekommen.

    Alex
     
  9. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    07.01.07
    Beiträge:
    432
    regex ist auch eine Möglichkeit. Ich kenne mich damit leider aber nur wenig aus...
     
  10. Irgendein Held

    Irgendein Held Oberösterreichischer Brünerling

    Dabei seit:
    17.06.07
    Beiträge:
    714
    Mit regex ist das ganze easy as pie und man hat ein aeussert maechtiges Werkzeug an der Hand.

    Sicher, dass in allen Laendern alle Telefonnummern gleich lang sind?
     
  11. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Also, vielleicht bin ich ein bischen blöd, aber das Erstellen einer RegEx, die alle Fälle und Sonderfälle (und die Ausnahmen davon) behandelt fand ich schon intellektuell herausfordernd...

    Alex
     
  12. Irgendein Held

    Irgendein Held Oberösterreichischer Brünerling

    Dabei seit:
    17.06.07
    Beiträge:
    714
    Anfangs ja, aufjedenfall. Aber man gewoehnt sich an die Syntax und das Lesen. Zumin sind das meine Erfahrungen. Dazu gehoerte auch die Erfahrung es mit RegEx zu uebertreiben, was auf keinen Fall sinnvoll ist.
     
  13. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Ich meinte gar nicht so sehr das eigentliche Schreiben der RegEx, soviel Erfahrung hab ich schon ;)

    Aber sich zu überlegen, welche Fälle alle auftreten können, und wie ich die behandele hat schon ein bischen Nachdenken gebraucht. Man unterschätzt sich da leicht, insb. wenn man nicht nur deutsche, sondern internationale Telefonnummern durchsuchen will.

    Alex
     
  14. Irgendein Held

    Irgendein Held Oberösterreichischer Brünerling

    Dabei seit:
    17.06.07
    Beiträge:
    714
    Das stimmt wohl, grade wenn man Eingaben validieren will.
    Wenn der Anwendungsfall jetzt in einem Rahmen ist der ueberschaubar bleibt, kann man sich natuerlich auf die Faelle beschraenken, die man kennt.
    Will man sich allerdings einen Parser fuer alle moeglichen Kombinationen von Telefonnummern basteln, dann sollte man sich eine Strategie in der Art wie Poljpocket das beschrieben hat ueberlegen.

    Nachtrag: Rubular ... netter Evaluator. Auch wenn das ganze fuer Ruby ausgelegt ist - so in "Echtzeit" hilft das ganze schon enorm.
     
  15. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.470
    Das trifft auf Deutschland schon mal nicht zu.

    MacApple
     

Diese Seite empfehlen