• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

AppleScript Dokumentation verstehen

iLion

Alkmene
Registriert
21.02.07
Beiträge
31
Hallo,

ich möchte gerne eine spezielle Aufgabe mit AppleScript erstellen, habe aber Probleme die Dokumenation im ScriptEditor zu verstehen. Ziel ist es später, eine Tabelle in Numbers auszulesen, und aus den Zellinhalten (Datum, Zeiten, Texte) in iCal Termine zu erstellen. Mit viel Recherche und ausprobieren habe ich es z.B. schon geschafft in iCal neue Kalender und Events anzulegen. Letztere allerdings ohne Zeit. Da hat was mit der Datumsformatierung nicht geklappt. Jetzt stehe ich vor dem Problem, die Inhalte aus der Tabelle auszulesen und verstehe nicht, wie ich an die Inhalte komme. Numbers habe ich in die Bibliothek des Script Editors hinzugefügt und habe nun Zugriff auf die Möglichkeiten. So finde ich z.B. auch ein mit "c" gekennzeichnetes Element "cell". Das enthält auch ein value (super, da will ich ran). Nur wie?
Also noch mal in Kurzform, wie interpretiere ich die Doku richtig, um aus den Angaben zu verstehen, was ich machen soll. Der Kopf raucht schon. ;)

iLion
 

CloneOfMyself

Weigelts Zinszahler (Rotfranch)
Registriert
24.02.07
Beiträge
253
tell application "Numbers"
   get value of cell "B2" of table "Tabelle 1" of sheet "Blatt 1" of document 1
end tell
 

iLion

Alkmene
Registriert
21.02.07
Beiträge
31
Danke,

hat bis jetzt super geklappt und das Script trägt die Termine richtig ein. Allerdings bleibt noch ein kosmetisches Problem. In den Texten einer Spalte steht an vielen Stellen ein "\n", was eigentlich ein weicher Umbruch hätte sein sollen. In Numbers kriege ich das nicht durch suchen und aktivieren Weg, weil ich den "Code" für den weichen Umbruch nicht kenne. Manuell würde es klappen, habe nur keine Lust mehrere Tausend Zeilen manuell zu bearbeiten. Also habe ich mal folgendes Testscript geschrieben:

Code:
[B]set[/B] [COLOR=#408000][COLOR=#408000]testtext[/COLOR][/COLOR] [B]to[/B] "Dies ist ein Testtext\\n und er geht hier weiter."
[B]set[/B] [COLOR=#408000][COLOR=#408000]position[/COLOR][/COLOR] [B]to[/B] [B][COLOR=#0016b0][COLOR=#0016b0]offset [/COLOR][/COLOR][/B][COLOR=#0016b0][COLOR=#0016b0]of[/COLOR][/COLOR] "\\n" [COLOR=#0016b0][COLOR=#0016b0]in [/COLOR][/COLOR][COLOR=#408000][COLOR=#408000]testtext[/COLOR][/COLOR]
[B]set[/B] [COLOR=#408000][COLOR=#408000]ergebnis1[/COLOR][/COLOR] [B]to[/B] [I][COLOR=#0000ff][COLOR=#0000ff]text[/COLOR][/COLOR][/I] 1 [B]thru[/B] ([COLOR=#408000][COLOR=#408000]position[/COLOR][/COLOR] - 1) [B]of[/B] [COLOR=#408000][COLOR=#408000]testtext[/COLOR][/COLOR]
[B]set[/B] [COLOR=#408000][COLOR=#408000]ergebnis2[/COLOR][/COLOR] [B]to[/B] [I][COLOR=#0000ff][COLOR=#0000ff]text[/COLOR][/COLOR][/I] ([COLOR=#408000][COLOR=#408000]position[/COLOR][/COLOR] + 1) [B]thru[/B] ([COLOR=#6c05d3][COLOR=#6c05d3]length[/COLOR][/COLOR] [B]of[/B] [COLOR=#408000][COLOR=#408000]testtext[/COLOR][/COLOR]) [B]of[/B] [COLOR=#408000][COLOR=#408000]testtext[/COLOR][/COLOR]
[B]set[/B] [COLOR=#408000][COLOR=#408000]ergebnis[/COLOR][/COLOR] [B]to[/B] [COLOR=#408000][COLOR=#408000]ergebnis1[/COLOR][/COLOR] & [COLOR=#408000][COLOR=#408000]ergebnis2[/COLOR][/COLOR]

Das ganze soll nachher in eine Schleife die solange läuft, bis kein "\n" mehr gefunden wird. Allerdings scheint mir das Testergebnis fragwürdig zu sein, weil er im Ergebnisfenster keinen Umbruch anzeigt, sondern nur noch "Dies ist ein Testtextn und er geht hier weiter." Es werden also beide "\" entfernt und das "n" aus dem Umbruchcode bleibt. Tipps? :)

iLion
 

CloneOfMyself

Weigelts Zinszahler (Rotfranch)
Registriert
24.02.07
Beiträge
253
tell application "Numbers"
   value of cell "B2" of table "Tabelle 1" of sheet "Blatt 1" of document 1
   my RemoveFromString("\n", result)
end tell

on RemoveFromString(repl, txt)
   set text item delimiters to repl
   set temp to txt's text items
   set text item delimiters to ""
   return temp as text
end RemoveFromString
 
Zuletzt bearbeitet:

iLion

Alkmene
Registriert
21.02.07
Beiträge
31
Hallo,

danke für die erneute Hilfe. Wenn ich jedoch Deinen Quelltext 1 zu 1 in den AppleScript Editor kopiere, dann wird aus der Zeile

my RemoveFromString("\n", result)

das hier:

my RemoveFromString("
", result)

Setze ich ein weiteres \ davor, dann wird nur das n gefiltert. Wobei ja auch die Elemente nicht entfernt, sondern eben genau durch den weichen Umbruch ersetzt werden sollten. Also aus:

Dies ist ein Testtext\\n und er geht hier weiter.

soll

Dies ist ein Testtext
und er geht hier weiter.

werden.

Würde mich über weitere Unterstützung von Dir freuen. :)

iLion
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Entsteht dieser Zeilensprung auch, wenn du von Hand wieder \n reinkorrigierst?

Wieso haben deine Texte immer \\n drin? Ist das nicht falsch?

... Testtext\\n ...

Gruss, ppocket
 

iLion

Alkmene
Registriert
21.02.07
Beiträge
31
Ja, habe schon mehrfach \n ohne Erfolg manuell reingeschrieben. Immer wenn ich den Quelltext übersetzen lassen, verschwindet das \n und er macht an der Stelle im Quelltext einen Umbruch.

Ich habe immer von \\n geschrieben, weil ich in der Ausgabe immer als Ergebnis den doppelten Slash erhalten habe, wenn ich eine Zelle ausgelesen habe. Das ist ja genau das Problem. Wenn er in einer Zelle "Text\nText" findet, dann wird das "\n" nicht als Umbruch interpretiert, sondern offensichtlich noch ein "\" eingefügt, damit der Umbruch nicht als Umbruch wirkt. Was er aber eigentlich machen soll. Dagegen wird "\n" im AppleScript Editor an dieser Stelle unerwünscht als Umbruch interpretiert. Also genau das, was ich nicht will.

Ich hätte gerne ein:

tell mac
switch behavior of applescript editor and numbers
end tell

;)

Ergänzung:

wenn ich nun schreibe

"my RemoveFromString("\\n", result)"

geht es. Dann erhalte ich als Ergebnis: "Dies ist ein Testtext und er geht hier weiter."
Also fast, was ich will. Jetzt müsste nur tatsächlich da noch ein Umbruch rein...

Ergänzung 2:

Heureka! :)

Code:
set position to offset of "[URL="file://\\n"]\\n[/URL]" in notiz
repeat while position > 0
 set ergebnis1 to text 1 thru (position - 1) of notiz
 set ergebnis2 to text (position + 2) thru (length of notiz) of notiz
 set notiz to ergebnis1 & "\n" & ergebnis2
 set position to offset of "[URL="file://\\n"]\\n[/URL]" in notiz
end repeat

Ich weiss nicht, ob es wirklich elegant ist, aber das Script oben funktioniert endlich. Zuerst teile ich den Text in zwei Teile und schneide das "\\n" raus und setze anschliessend ein normales ""\n" wieder ein. Damit habe ich dann endlich meinen gewünschten Umbruch an der richtigen Stelle. Das wird solange gemacht, bis kein "\\n" mehr drin ist.

Und das Problem mit dem Editor habe ich auch gelöst. In den Einstellungen zum AppleScript Editor war die Option "Escape-Sequenz für Tabs und Zeilenumbrüche in Strings" per Voreinstellung aus. Option ein und ein ""\n" bleibt im Quelltext ein ""\n".

iLion
 
Zuletzt bearbeitet:

CloneOfMyself

Weigelts Zinszahler (Rotfranch)
Registriert
24.02.07
Beiträge
253
so ganz verstanden habe ich das auch noch nicht mit den newlines (wo die in der Form herkommen), aber was solls...

Wenn du sie in Numbers mit Suchen/Ersetzen bereinigen willst, musst du eben nach "\n" suchen und im Ersetzen-Feld das "weiche Return" setzen: shift-alt-return. Daraus wird dann so ein Pi-Zeichen in der Darstellung. Wenn du so ersetzt, dann hast du automatisch beim Holen der value mit deinem Script eine Zeilenschaltung drin...

Deine Methode zum Ersetzen ist nicht sonderlich galant. Am besten eignen sich hierfür AppleScript's text item delimiters (und sind zudem affig schnell):

tell application "Numbers"
   set dertext to value of cell "B2" of table "Tabelle 1" of sheet "Blatt 1" of document 1
   my srch_repl("\\n", "\n", dertext)
end tell

on srch_repl(s, r, txt)
   set text item delimiters to s
   set temp to txt's text items
   set text item delimiters to r
   set output to temp as text
   set text item delimiters to ""
   return output
end srch_repl
 

CloneOfMyself

Weigelts Zinszahler (Rotfranch)
Registriert
24.02.07
Beiträge
253
Also, so wie ich das verstanden habe: In Numbers stehen diese \n einfach drin (aus was für einer Quelle auch immer diese Inhalte kommen) und haben dort keine besondere Bedeutung/Funktion, sind somit einfach als "\n" im string enthalten. Liest man diesen nun mit AppleScript aus, wird daraus automatisch "\\n", da ein backslash in einem string escaped werden muss, wenn man ihn einfach als das Zeichen backslash, also \ haben möchte und ihm seines Sonderstatus berauben möchte.
Deshalb innerhalb des Applescripts "\\n" was dem string \n enspricht durch "\n" ersetzen, was dann einem newline entpricht. Somit hat man damit an diesen Stellen einen Zeilenumbruch...