1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

AppleScript Dokumentation verstehen

Dieses Thema im Forum "AppleScript" wurde erstellt von iLion, 22.10.09.

  1. iLion

    iLion Alkmene

    Dabei seit:
    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
     
  2. CloneOfMyself

    CloneOfMyself Weigelts Zinszahler (Rotfranch)

    Dabei seit:
    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
     
  3. iLion

    iLion Alkmene

    Dabei seit:
    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
     
  4. CloneOfMyself

    CloneOfMyself Weigelts Zinszahler (Rotfranch)

    Dabei seit:
    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
     
    #4 CloneOfMyself, 23.10.09
    Zuletzt bearbeitet: 23.10.09
  5. iLion

    iLion Alkmene

    Dabei seit:
    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
     
  6. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    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
     
  7. iLion

    iLion Alkmene

    Dabei seit:
    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
     
    #7 iLion, 26.10.09
    Zuletzt bearbeitet: 26.10.09
  8. CloneOfMyself

    CloneOfMyself Weigelts Zinszahler (Rotfranch)

    Dabei seit:
    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
     
  9. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    07.01.07
    Beiträge:
    432
    Ich schnall nich, wieso das mit \\n geht...
     
  10. CloneOfMyself

    CloneOfMyself Weigelts Zinszahler (Rotfranch)

    Dabei seit:
    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...
     

Diese Seite empfehlen