Im Adressbuch eine Adresse löschen per AS

hairyguy

hairyguy

Aktives Mitglied
Thread Starter
Dabei seit
06.12.2004
Beiträge
1.029
Reaktionspunkte
14
Hallo,

so langsam macht mir das ASkripten Spaß, allerdings ist es ein steiniger Weg... Ich versuche gerade, missgestaltete Adressen (die mir iSync untergejubelt hat) aus dem Adressbuch zu löschen:

Eine Person hat mehrere Adressen (addresses of person), eine davon ist missgestaltet (alle Felderinhalte befinden sich im Feld street), diese Adresse kann ich problemlos identifizieren. Sagen wir, es ist die erste Adresse. Wie kann ich jetzt diese Adresse löschen?? Versucht habe ich erfolglos:

Code:
set addresses to {items 2 thru -1 of addresses}

("Fehler in der AppleEvent-Routine")

Ein "delete" funktioniert auch nicht ("Item kann nicht gelesen werden"):

Code:
delete item 1 of addresses

Wie geht's, bitte um Hilfe!
 
Hallo,

wie sieht der Gesamtcode im Zusammenhang aus?
Da scheinen so einige Logikfehler platziert zu sein.

Viele Grüße
 
Danke für die Rückmeldung, so sieht das gesamte Skript aus:

Code:
tell application "Address Book"
	repeat with aPerson in (get people)
		tell contents of aPerson
			set zaehl to 0
			if (count of addresses) > 0 then
				repeat with adresse in addresses
					set zaehl to zaehl + 1
					set loeschen to false
					if (street of adresse contains "  ") or (street of adresse contains return) or (street of adresse contains tab) then
						set anzeige to "Folgende Adresse löschen?" & return & return
						set anzeige to anzeige & aPerson's first name & aPerson's last name & return
						set anzeige to anzeige & adresse's street as string
						display dialog anzeige buttons {"Nein", "Ja"} default button "Ja"
						if button returned of result is "Ja" then
							set loeschen to true
							exit repeat
						end if
					end if
				end repeat
				if loeschen then
					delete item zaehl of addresses
					--if zaehl = 1 and (count of addresses) > 1 then set addresses to {items 2 thru -1 of addresses}
				end if
			end if
		end tell
	end repeat
end tell
 
Schau Dir mal in der AB Library das "remove" Kommando an. Ich vermute, dass es damit gehen müsste.

BTW: Dein Code wäre im Forum beträchlich leichter zu lesen, wenn Du die ungünstig langen Tabs durch Leerzeichen ersetzt und lange Zeilen mit ¬ umbrichst und einrückst. Wenn Dir das zu viel Mühe ist, kannst Du ja ein Applescript schreiben, welches das erledigt ;).
 
Hallo maceis, schön, auch dich hier wiederzusehen! :cool:

Danke für den Tipp, jedoch: "You can only remove persons from groups." lautet die Fehlermeldung nun...

Das mit den Tabs werde ich mir mal anschauen, wo auf der Tastatur finde ich denn dieses Logik-Nicht-("¬") Zeichen?
 
BTW: Dein Code wäre im Forum beträchlich leichter zu lesen, wenn Du die ungünstig langen Tabs durch Leerzeichen ersetzt und lange Zeilen mit ¬ umbrichst und einrückst. Wenn Dir das zu viel Mühe ist, kannst Du ja ein Applescript schreiben, welches das erledigt ;).
Klinke mich mit einem kleinen [OT] ein: kennst Du dieses hübsche Tool, mit dem man ScriptEditor-Code schön formatiert in BBCode konvertieren kann?
Leider funktioniert es in diesem Forum nicht 100%ig (Tabs werden durch "schwarze Bällchen" ersetzt). Könntest Du im macuser-Staff nicht mal checken, ob sich das evtl. anpassen läßt?

Ciao
Farid
 
Nein, das kenne ich nicht. Ich fänd´s schon von Vorteil, wenn jeder Tab durch ein einzelnes Leerzeichen ersetzt würde. Meinem Vorschlag vor einigen Monaten die "Code" Bereiche etwas breiter zu gestalten wurde auch nicht nachgekommen, was sicher auch an der vielen Arbeit liegt, die das Forum sonst so macht (insbesondere auch der Serverumzug).

@hairy
Da muss Du Dich wohl jetzt selbst durchkämpfen.
den ¬ findest Du unter alt-Shift-1
 
Habe den Skripteditor jetzt so eingestellt, dass er nur noch zwei Leerzeichen einrückt. Damit spar ich mir ein ganzes Skript! ;)

Mein Problem hab ich auch gelöst, obwohl ich nicht weiß, wieso es so funktioniert, aber nicht, wenn ich "addresses" direkt in die delete-Zeile schreibe. Finde sowieso etwas strange bei AS, dass man nicht kontrollieren kann, ob man call by value oder by reference macht oder gar pointer übergibt...?

Code:
set adressen to addresses
delete item 1 of adressen
 
Zurück
Oben Unten