Gönner-Abo

Ab CHF 5.– im Monat

👉🏼 Wir benötigen deine Unterstützung! Unterstütze macprime mit einem freiwilligen Gönner-Abo und mache die Zukunft unseres unabhängigen Apple-Mediums aus der Schweiz mit möglich.

macprime unterstützen

Kontakte: Telefonnummern Ortsvorwahl für iPhone korrekt formatieren (ohne 0 in Klammern)

Profilfoto von speedyandy

VonAntwort von speedyandy

Liebe Mac User

Besten Dank für das Script vom 12. März 2012 von Stefan. Das AppleScript habe ich in der angepassten Form von “hopeman” vom 4. Nov. 2012 heute unter OSX 10.9.2 ausgetestet und hat wunderbar funktioniert. Die entsprechenden Telefonnummer haben nun die internationale Vorwahl +41. Das hat mir wirklich viel Arbeit erleichtert - vielen Dank nochmals. siehe auch unter: http://www.macprime.ch/forum/viewthread/8166/

Nun habe ich eine ein anderes Problem: Ein Datenbankprogramm (Deltaproject - Bauadministrationsprogramm) exportiert mir die Telefonnummern, Mobilenummern als vCard mit der 3-stelligen Ortswahl, die 0 jedoch in einer Klammer. zB. +41 (0) 12 345 67 89 Wenn ich diese Nummer im Kontakt Programm (Vers. 8.0) importiere steht die Null weiterhin in der Klammer. Da iCloud vom Kontakt-Programm die Kontaktdaten mit meinem iPhone 5 synchronisiert sind diese Tel. Nummern aufgrund der Klammer und der Null auf dem Handy unbrauchbar, (diese Nummer ist ungültig…). Gibt es eine Möglichkeit mit einem AppleScript oder sonst wie, die “(0)” zu entfernen? Manuell 500 Adressen anzupassen sind mir ein bisschen zuviel…

Vielen Dank für Eure Hilfe. Freundlicher Mac Gruss speedyandy

Anhang (Dateien)

Person_Test.vcf
  (File Size: 1KB - Downloads: 250)

(Bearbeitet am 15. Mai 2014 um 09:35 Uhr von Stefan Rechsteiner)

Profilfoto von Stefan Rechsteiner

Stefan Rechsteiner

Allegra speedyandy

Ich habe das alte Script vom anderen Thread mit einer Funktion erweitert, die zusätzlich zu den früheren Tests (enthält die Nummer bereits «+41» oder «0041») testet, ob die Nummer die drei Zeichen «(0)» enthält. Sofern ja, wird es aus der Nummer herausgelöscht.

tell application "Contacts"
 repeat with i from 1 to (count every person)
  set phoneProperties to properties of phones of person i
  repeat with n from 1 to (count of phoneProperties)
   set curphone to value of (phone n of person i) as text
   if text item 1 of curphone as text does not start with "+" then
    if (text items 1 thru 2 of curphone as text) starts with "00" then
     set value of phone n of person i to "+" & text 3 thru -1 of curphone
    else
     set value of phone n of person i to "+41" & text 2 thru -1 of curphone
    end if
   end if
   
   set klammer to "(0)"
   if curphone contains klammer then
    set AppleScript's text item delimiters to klammer
    set tempnumber to curphone's text items
    set AppleScript's text item delimiters to ""
    set value of phone n of person i to tempnumber as text
   end if
  end repeat
 end repeat
 save
end tell

Dieses Script formatiert also Nummern wie…

079 123 45 67 0041 79 123 45 67 0041 (0) 79 123 45 67 +41 (0) 79 123 45 67

… zu iPhone-kompatiblen und international verwendbaren Nummern im Format «+41 79 123 45 67»

Bitte umbedingt zuerst in einem Dummy-Adressbuch TESTEN!

Das Script via /Applications/Utilities/AppleScript-Editor.app ausführen lassen.

Mach zuerst von deinem Adressbuch bzw. deinen Kontakten eine Sicherheitskopie (Kontakte-Menü: «Ablage:Exportieren:Kontakte-Archiv…»! Ich übernehme keinerlei Haftung für mein Script! :-)

(Bearbeitet am 15. Mai 2014 um 10:15 Uhr von Stefan Rechsteiner)

Profilfoto von speedyandy

speedyandy

Hallo Stefan

vielen Dank für das Script. Es scheint jedoch nicht zu funktionieren - die Ergebnismeldung lautet “missing value”, obwohl ich absichtlich bei drei verschiedenen Kontakten die Klammer mit der Null “(0)” eingebaut habe. Bei allen Kontakten ist die internationale Vorwahl korrekt formatiert also +41, oder +49 oder +423, usw. Die Nummern der drei Kontakte bleiben also weiterhin unverändert im folgenden Format: +41 (0) 79 123 45 67

Gibt es eine andere Lösung, dieses Problem zu eliminieren?

Besten Dank an die Mac User speedyandy

Profilfoto von speedyandy

speedyandy

Das Ganze ist ziemlich spannend…

Ich habe zwei Kontaktdaten vom Datenbankprogramm in das Kontakt-Programm mit vCard importiert. Die Zeilen 6-12 des Scripts habe ich weggelassen und ausführen lassen und habe folgenden Teilbericht über diese beiden Kontakte erhalten.

get properties of every phone of person 435
  --> {{label:"mobile", value:"+41", class:phone, id:"EF9A3EBD-E16C-4A9D-B1E8-9350C63B7B6F"}, {label:"home", value:"+41 071 345 67 89", class:phone, id:"9F9AEF9D-0987-40F5-8312-8F675166C93D"}}
 get value of phone 1 of person 435
  --> "+41"
 get value of phone 2 of person 435
  --> "+41 071 345 67 89"
 get properties of every phone of person 436
  --> {{label:"mobile", value:"+41 079 234 56 78", class:phone, id:"0F434946-EF56-4BF0-AA44-9430FA38FBE2"}, {label:"home", value:"+41 071 123 45 67", class:phone, id:"E79940BA-01EE-4F0C-A9E6-02C836D63E74"}}
 get value of phone 1 of person 436
  --> "+41 079 234 56 78"
 get value of phone 2 of person 436
  --> "+41 071 123 45 67"
 save current application
  --> missing value
end tell

jetzt siehe da… im Script werden die Klammern nicht interpretiert bzw. es gibt gar keine Klammer, nur die Null, obwohl die Telefonnummern im Kontakte-Programm eine Klammer aufweisen (siehe Print-Screen Anhang Person 435 / Person 436).

Nun habe ich mir die v-Card dieser beiden Kontakte im TextEdit angeschaut und siehe da, auch da wird keine Klammer aufgeführt!

"Person 435"
BEGIN:VCARD
VERSION:2.1
N;CHARSET=ISO-8859-1:Testfirma
item1.ADR;type=HOME;type=pref:;;;;;;
TEL;TYPE=HOME;CHARSET=ISO-8859-1:+41 071 345 67 89
TEL;TYPE=CELL;CHARSET=ISO-8859-1:+41  
END:VCARD

"Person 436"
BEGIN:VCARD
VERSION:2.1
N;CHARSET=ISO-8859-1:Testperson
item1.ADR;type=HOME;type=pref:;Teststrasse 16;;St. Gallen;;9000;
EMAIL;type=INTERNET;type=HOME;CHARSET=ISO-8859-1:test@test.ch
TEL;TYPE=HOME;CHARSET=ISO-8859-1:+41 071 123 45 67
TEL;TYPE=CELL;CHARSET=ISO-8859-1:+41 079 234 56 78
END:VCARD

Das bedeutet, das Script müsste so abgeändert werden, dass grundsätzlich keine 0 nach einer internationalen Vorwahl wie +41, +49, +423 usw. stehen darf. (ob diese Regel für alle Länder auf der Welt gilt, ist mir aber momentan nicht bekannt…???)

Herzlichen Dank für eure Hilfe speedyandy

Profilfoto von Stefan Rechsteiner

Stefan Rechsteiner

Hmm, dann müsste das Script das erste Zeichen — das 0 — nach der Ländervorwahl und dem Leerzeichen entfernt werden. Vielleicht wie folgt?

Hinweis: während die anderen Scripts nur «+41» berücksichtigten bzw. hinzufügten, schaut dieses neue Script nun einfach nach der Zeichenfolge nach einem «+» und dann ob es nach dem folgenden Leerzeichen ein 0 hat — wenn ja, dann schreib die Nummer neu ohne das 0.

In meinen Tests hats funktioniert. Aber wie immer: zuerst selber auch testen! ;-)

tell application "Contacts"
 repeat with i from 1 to (count every person)
  set phoneProperties to properties of phones of person i
  repeat with n from 1 to (count of phoneProperties)
   set curphone to value of (phone n of person i) as text
   
   set AppleScript's text item delimiters to " "
   set tempcountry to curphone's text item 1
   set tempcount to count (tempcountry)
   set AppleScript's text item delimiters to ""
   set tempnumber to text (tempcount + 2) thru -1 of curphone
   if text item 1 of tempnumber as text is "0" then
    set value of phone n of person i to tempcountry & text 2 thru -1 of tempnumber
   end if
  end repeat
 end repeat
 save
end tell

Profilfoto von speedyandy

speedyandy

hallo zusammen

das Script bringt jeweils eine Fehlermeldung bei den Kontakten die keine Leerzeichen zwischen der Internationalen Vorwahl und der Ortsvorwahl aufweisen zB+41791234567. Die Nummer ist aber korrekt und das iPhone wie auch das Kontakte-Programm übernehmen bei mir das Adressformat “Schweiz” und zeigen deshalb ein Leerzeichen zur besseren Übersicht an, ein Leerzeichen wurde aber keines eingegeben. Beim Eintippen einer neuen Kontakt-Nummer auf dem iPhone tippt man ja auch keine Leerzeichen ein.

Fehlermeldung: error “„text 14 thru -1 of "+41791234567"“ kann nicht gelesen werden.” number -1728 from text 14 thru -1 of “+41791234567”

Da ich derzeit sehr viele Adressen ohne Leerzeichen habe, aber korrekt definiert sind, das heisst keine 0 ind der Ortsvorwahl, kommt die Abfrage gar nicht zu den beiden “falschen” Datensätzen mit der 0 in der Klammer. Deshalb kann ich momentan nicht sagen, ob das vorherige Script funktioniert… Kann jemand dieses letzte Script von Stefan anpassen?

Vielen Dank für eure weitere Unterstützung speedyandy

Profilfoto von Stefan Rechsteiner

Stefan Rechsteiner

@speedyandy: hmm, das wird so also etwas komplizierter wenn es da kein Leerzeichen nach der Landesvorwahl hat :-D … so kann man nicht mehr so «einfach» herausfinden wann die Landesvorwahl zuende ist … leider gibt es ja nicht nur zwei- (+) bzw. vier- (00) -stellige Ländervorwahlen. Weisst du was du alles für Vorwahlen hast? Eine Liste dieser wäre für eine Lösung bedeutend einfacher als ein Script, welches global funktionieren sollte (was eh zu Problemen führen könnte wie der Beitrag von don zeigt).

Anmelden um neue Antworten zu verfassen

Allegra Leser! Nur angemeldete Nutzer können bei diesem Beitrag Antworten hinterlassen. Jetzt kostenlos registrieren oder mit bestehendem Benutzerprofil anmelden.