Adressbuch über das Terminal abfragen

SFAB

SFAB

Mitglied
Thread Starter
Dabei seit
07.11.2004
Beiträge
21
Reaktionspunkte
0
Ich möchte für die weitere Verarbeitung der Daten gerne bestimmte Einträge aus dem Adressbuch über das Terminal abfragen und als CSV-Datei abspeichern. Ich weiß, dass dies grundsätzlich mit dem Tool sqlite3 möglich ist.

Leider bin ich kein Experte in Sachen Datenbanken. Kann mir jemand sagen, wie ich mittels sqlite3 die Adressen (Name mit Postanschrift) aller Mitglieder einer bestimmten Gruppe, für die keine E-Mail-Adresse eingetragen ist, abfrage?
 
Zuletzt bearbeitet:
Am besten installierst Du SQLite Manager, ein PlugIn für Firefox und probierst ein bisschen mit der Adressdatenbank aus "~/Library/Application Support/AddressBook/AddressBook-v22.abcddb" herum. (Vorher natürlich ein Backup ziehen!) Die jeweiligen Daten aus den Tabellen werden immer verknüpft, um z.B. die Adressdaten einem Kontakt aus ZABCDRECORD zuzuordnen. Eine Verknüpfung über die Felder "z_pk" und "z_ent" scheint sich anzubieten:

Ein erster SELECT heißt dann:
Code:
SELECT zfirstname, zlastname, zstreet, zzipcode, zcity 
  FROM zabcdrecord AS rec 
    JOIN zabcdpostaladdress AS postal ON (
                     rec.z_pk = postal.zowner and
                     rec.z_ent = postal.z19_owner);
Sicherlich stellst Du fest, daß nur die Kontakte mit gepflegter Adresse ausgegeben werden. Abhilfe schafft ein sog. "Outer Join": es wird jeder Kontakt ausgegeben, wenn vorhanden mit Adresse:
Code:
SELECT zfirstname, zlastname, zstreet, zzipcode, zcity 
  FROM zabcdrecord AS rec 
    LEFT OUTER JOIN zabcdpostaladdress AS postal ON (
                     rec.z_pk = postal.zowner and
                     rec.z_ent = postal.z19_owner);
Nun basteln wir noch analog dazu die email-Adresse und fragen im WHERE-Teil nur nach denen ohne email-adresse:
Code:
SELECT zfirstname, zlastname, zstreet, zzipcode, zcity, zaddress
  FROM zabcdrecord AS rec 
    LEFT OUTER JOIN zabcdpostaladdress AS postal ON (
                     rec.z_pk = postal.zowner and
                     rec.z_ent = postal.z19_owner)
    LEFT OUTER JOIN zabcdemailaddress AS email ON (
                     rec.z_pk = email.zowner and
                     rec.z_ent = email.z19_owner) 
WHERE zaddress is null;
Den ganzen Kram kann man auch in ein shellscript packen:
Code:
echo ".mode csv 
SELECT zfirstname, zlastname, zstreet, zzipcode, zcity, zaddress
  FROM zabcdrecord AS rec 
    LEFT OUTER JOIN zabcdpostaladdress AS postal ON (
                     rec.z_pk = postal.zowner and
                     rec.z_ent = postal.z19_owner)
    LEFT OUTER JOIN zabcdemailaddress AS email ON (
                     rec.z_pk = email.zowner and
                     rec.z_ent = email.z19_owner) 
WHERE zaddress is null;" |
 sqlite3 ~/Library/Application\ Support/AddressBook/AddressBook-v22.abcddb

SQL ist halt eine komplette Sprache und SQLite3 bietet eine ziemlich vollständige Implementation davon. Du wirst ein bisschen lesen müssen; meine kleinen Beispiele helfen aber hoffentlich schon mal für den ersten Einstieg.

Viel Spaß!
 
  • Gefällt mir
Reaktionen: SFAB und volatus
Vielen Dank für deine ausführliche Antwort! Das ist genau die Starthilfe, auf die ich gehofft hatte! :)
 
Zurück
Oben Unten