Adressbuch - Vorwahländerung automatisieren

octavian

octavian

Aktives Mitglied
Thread Starter
Dabei seit
18.01.2004
Beiträge
114
Reaktionspunkte
1
Hallo!
Vielleicht habe ich den richtigen Ort im Netz für die Antwort auf meine Frage nur nicht gefunden, aber ich komme - als Anfänger - bei einem Problem nicht weiter:

Ende Januar 05 wird in der Schweiz die nationale Telefon-Vorwahl des Kantons Zürich von 01 auf 044 geändert. Ich möchte meine Telefoneinträge im Adressbuch automatisiert ersetzen.

In diesem Thread habe ich das Script von Snow gefunden, um die Vorwahl von "+49" auf "0" zu setzen:

tell application "Address Book"
set PeList to people
repeat with oneP in PeList
set PhV to (value of phone of oneP)
try
set PhV to item 1 of PhV
end try
if PhV starts with "+49" then
set tC to length of PhV
set tRest to characters 4 thru tC of PhV
set value of phone of oneP to ("0" & tRest) as Unicode text
end if
end repeat
end tell
Dieses Stript habe ich ziemlich verstanden und in einem ersten Versuch angepasst (Ich gebe die Telefonnummern international ein, z.B. +41 1 123 45 67) :

tell application "Address Book"
set PeList to people
repeat with oneP in PeList
set PhV to (value of phone of oneP)
try
set PhV to item 1 of PhV
end try
if PhV starts with "+41 1" then
set tC to length of PhV
set tRest to characters 6 thru tC of PhV
set value of phone of oneP to ("+41 44" & tRest) as Unicode text
end if
end repeat
end tell


Allerdings gibt es bei der Auswahl der Telefonnummern noch ein Problem:
Das Script funktioniert nicht, wenn mehrere Telefonnummern für eine Person gespeichert sind: Erfüllt der oberste Telefoneintrag die Bedingungen, werden alle Telefonnummern des Adresseintrags geändert.
Leider reichen meine Applescript-Kentnisse nicht aus, um den oberen Teil von Snows Script ganz zu verstehen, geschweige denn eine Lösung zu finden. Weiss jemand Rat?
Da in der Schweiz viele Tausend MacUser (was sage ich da: Zehntausende, Hunderttausende
:) ) davon betroffen sein dürften, sind vielleicht auch andere froh um eine Lösung.

Merci vielmal!

octavian
 
lösung kommt ;)

Vielleicht ist Snow schneller als ich, habe erst heute Abend zeit.

Die Sache ist simpel, du musst IN der Personenschleife noch eine Adressenschleife unterbringen. Das war es eigentlich schon, aber wie gesagt die genauen Infos kann ich erst heute Abend geben wenn ich wieder an meiner Kiste sitze ;)

Vielleicht ist Snow ja schneller :)


mfg glzm0
 
Oh glzm0!
Wäre toll, wenn du mir unter die Arme greifst!

octavian
 
Aaallssoo:

um genau zu sein ist es nicht eine zusätzliche Adresslistenschleife (die nummern sind nicht in der adressvariable) sondern eine Telefonlistenschleife :p (das die Telefonnummern in einer eigenen Liste innerhalb der Personenvariable liegen).

Habe es insofern ausprobiert, das ich anstatt der Telefonnummer ändern einen Meldung ausgegeben habe. Daher kann ich sagen es funktioniert zu 99% ;)

!!Dieser Link öffnet das Script in Deinem Scripteditor!!

tell application "Address Book"
*****set PeList to people
*****repeat with oneP in PeList
**********set phoneList to (value of phone of oneP)
**********repeat with phoneNum in phoneList
***************set PhV to (value of phone of oneP)
***************try
********************set PhV to item 1 of PhV
***************end try
***************if PhV starts with "+41 1" then
********************set tC to length of PhV
********************set tRest to characters 6 thru tC of PhV
********************set value of phone of oneP to ("+41 44" & tRest) as Unicode text
***************end if
**********end repeat
*****end repeat
end tell

so, versuch mal Dein Glück, mfg glzm0
 
Zuletzt bearbeitet:
Hmm, bei mir geht er immer noch auf die erste (=oberste) Nummer (egal, ob die Arbeit oder "Privat" ist). Erfüllt diese die Bedingungen, wandelt das Script ALLE Telefon-Einträge der Person um, wenn nicht, gar keinen (auch wenn weiter unten ein Eintrag mit der "richtigen" Vorwahl kommt).
Hast du das in deinem Test auch überprüft?

Was mach ich bloss falsch :(

Danke aber sowieso für deine Bemühungen!

octavian
 
sicherlich auch kein Thema ;)

Habe Dein Problem zuerst nicht richtig erkannt :)

Nun hab ich es kapiert und werde morgen nochmal das Script umändern :)

mfg glzm0
 
glzm0 schrieb:
Nun hab ich es kapiert und werde morgen nochmal das Script umändern :)

mfg glzm0

Das ist echt nett von dir! Und ich werde mich bemühen, es so zu verstehen, was du machst, dass ich bei einem ähnlichen Problem in Zukunft alleine weiter komme als dieses Mal ;-)

octavian
 
Here we go!

Hallo miteinander,

habe den Thread erst gerade gesehen.
Mein ursprüngliches Skriptchen konnte nur 1 Telefonnummer bearbeiten, da explizit "item 1 of PhV" angegeben wurde. Auch wenn nur eine Nummer vorhanden ist, ist das Ergebnis eine Telefonnummern-Liste. Als Fast-Shot habe ich mich damals eben auf den ersten Eintrag konzentriert.

Hier eine Fassung, die alle Telefonnummern berücksichtigen sollte:

try
tell application "Address Book"
set PeList to people
repeat with oneP in PeList
set PhV to (value of phones of oneP)
set PhVCount to count PhV
repeat with i from 1 to PhVCount
set onePhone to item i of PhV
if onePhone starts with "+41 1" then
set tC to length of onePhone
set tRest to characters 6 thru tC of onePhone
set onePhone to ("+41 44" & tRest) as Unicode text
log onePhone
set value of phone i of oneP to onePhone
end if
end repeat
end repeat
end tell
on error errMsg number errNr
display dialog (errNr as string) & return & errMsg
end try


Bitte testen und berichten.
 
Zuletzt bearbeitet:
Besteht die Möglichkeit, dass jemand das Skript inkl. einer kurzen Anleitung als Download zu Verfügung stellt?

Wäre sehr dankbar...
 
crake schrieb:
Besteht die Möglichkeit, dass jemand das Skript inkl. einer kurzen Anleitung als Download zu Verfügung stellt?

Ernsthaft? Skript kopieren, im Skripteditor einsetzen Werte, die gesucht und ersetzt werden sollen entsprechend anpassen und auf den Run-Button drücken.

Hier die nächste Version (etwas übersichtlicher):

-- Werte für Suchmuster und Ersatz anpassen
set Suchmuster to "+41 1"
set Ersatz to "+41 44"

--
ab hier keine Änderungen nötig
set StartC to (length of Suchmuster) + 1

try
tell application "Address Book"
set PeList to people
repeat with oneP in PeList
set PhV to (value of phones of oneP)
set PhVCount to count PhV
repeat with i from 1 to PhVCount
set onePhone to item i of PhV
if onePhone starts with Suchmuster then
set tC to length of onePhone
set tRest to characters StartC thru tC of onePhone
set onePhone to (Ersatz & tRest) as Unicode text
set value of phone i of oneP to onePhone
end if
end repeat
end repeat
end tell
on error errMsg number errNr
display dialog (errNr as string) & return & errMsg
end try
 
Zuletzt bearbeitet:
OK, jetzt gibt's das Skript inkl. ReadMe.
Der zu suchende Text und der Ersatztext werden nun per Dialog abgefragt. Man muss also im Skript selbst nichts mehr editieren. Desweiteren legt das Skript eine Logdatei auf dem Schreibtisch an, wo alle Änderungen aufgeführt werden.

Der Quelltext wäre jetzt doch etwas zuviel für einen Forumsbeitrag - deshalb findet ihr das Skript "PhoneChangEd" auf meiner Download-Seite.

Feedback erwünscht.
 
Zuletzt bearbeitet:
Danke Snow =)

Danke für Deine Arbeit, zum testen werd ich nicht kommen, da ich die Änderungen schon vor langem selbst vorgenommen hatte :).

Ich hoffe das meine Arbeit nicht umsonst war, und im TigerAdressbuch wieder die Bundesländer angezeigt werden ;)


mfg glzm0
 
Danke Snow!

Snow schrieb:
OK, jetzt gibt's das Skript inkl. ReadMe.

Feedback erwünscht.

"Snow, you're [[emph +]]so[[/emph]] cool!" :p

Snow, vielen Dank!
Das Script läuft super - allerdings nur als Script, nicht als Programm.
Dann kommt die Fehlermeldung "File X - Disk:users:snow: Desktop:Adrbook ChangeLog.txt wasn't found." (siehe attach).
Wenn ich dein Script richtig lese, hat das Programm den Zugriff auf DEIN ChangeLog.txt bei den Voreinstellungen abgespeichert.
Wählt man nach der Fehlermeldung "edit" und lässt das Script aus dem Editor noch einmal laufen, hört man die gute Vicky säuseln, was wir alle auch finden... ;)

Grüsse und nochmals danke!
octavian
 

Anhänge

  • Fehler.pdf
    10 KB · Aufrufe: 90
octavian schrieb:
Wenn ich dein Script richtig lese, hat das Programm den Zugriff auf DEIN ChangeLog.txt bei den Voreinstellungen abgespeichert.

Das hast du ganz richtig gesehen. Der Pfad ist in einer Property abgelegt, die behält ihren Wert, bis das Skript neu kompiliert wird.

Ich hab's jetzt initialisiert und nochmal hoch geladen.

Man kann sich aber auch ganz leicht selbst abhelfen: Skript im Skripteditor öffnen, irgendwo (wo etwas Platz frei ist) ein Leerzeichen eingeben, auf "Übersetzen" klicken oder die Entertaste drücken und wieder sichern.
 
Snow schrieb:
Man kann sich aber auch ganz leicht selbst abhelfen: Skript im Skripteditor öffnen, irgendwo (wo etwas Platz frei ist) ein Leerzeichen eingeben, auf "Übersetzen" klicken oder die Entertaste drücken und wieder sichern.

Lief bei mir sogar ohne Neusicherung, kann es sein, dass das Script sich automatisch neu kompiliert, wenn man es nicht als Programm, sondern als Script laufen lässt?

Wie auch immer: Es läuft. Danke!

octavian
 
Andere Variante

Da ich diesen Thread erst jetzt gefunden habe, habe ich halt bereits mein eigenes Script geschrieben.
Etwas weniger umfassend als dasjenige von Snow, aber es erfüllt den Zweck für die Umstellung der Vorwahl in Zürich, für das ich's geschrieben habe.
Download und Infos unter Vorwahl ändern im Apple Adressbuch
 
Jungs, ihr seid Helden! ;-) Hab grad vor einer Stunde angefangen, 500 Kontakte manuell von 01 auf 044 zu ändern. Bin froh, dass ich diese Arbeit nun abbrechen kann. ;-)
thx und Gruss
Aurel
 
Zurück
Oben Unten