[GastForen Programmierung/Entwicklung AppleScript Quark 5.01 und AppleScript und Anfänger

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Quark 5.01 und AppleScript und Anfänger

WaMe
Beiträge gesamt: 5

12. Feb 2007, 14:34
Beitrag # 1 von 11
Bewertung:
(2229 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo alle zusammen !

Ich hoffe in diesem Forum sind ein paar AppleScript-Freaks die mir ein wenig weiterhelfen können. Eigentlich wollte ich mich ja langsam in AppleScript einarbeiten (soviel hab ich jetzt noch nicht damit gemacht), aber da ein größerer Auftrag mit viel viel Arbeit ansteht und man ja von Natur aus faul ist, hatte ich die Idee das mit einem AppleScript einfach den Mac alleine abarbeiten zu lassen.

Das AppleScript (Quark 5 / Mac OS 9) sollte folgende Aufgabe(n) übernehmen:

Alle im Dokument platzierten Textrahmen sollten durchsucht werden:
- Wird ein bestimmter Text gefunden (z.B. "[mm]"), dann sollte dieser durch "[mm/inch]" ersetzt werden. (Das hab ich schon hinbekommen, doch bei folgendem komme ich nicht mehr weiter...)
- Nach dem ersetzten Text soll um einen Tabulator weitergesprungen werden und der dort stehende Text markiert werden (z.B. "0.02")
- Dieser Text soll nun umgerechnet werden (von mm in inch), also z.B. 0.02 * 0.0393
- Der alte Text soll nun durch den neuen Text der Art "alter Wert / neuer Wert" ersetzt werden, also: 0.02 / 0.0007
- Danach soll der nächste Tab angesprungen werden und das ganze beginnt von vorne, solange bis ein weicher oder harter Umbruch erreicht wird. Dann muss das Script wieder von vorne anfangen mit dem Text austauschen.

So, da das ganze doch etwas kompliziert klingt, hier mal ein Beispiel:
(-> = Tabulator)

Vorher:
Length [mm] -> 0.02 -> 0.05 -> 0.08

Nachher:
Length [mm/inch] -> 0.02 / 0.0007 -> 0.05 / 0.0020 -> 0.08 / 0.0031


So, jetzt hoffe ich mal, dass das ganze ein lösbare Aufgabe ist, und dass ich mit Eurer Hilfe auch als Anfänger das Problem gelöst bzw. das AppleScript programmiert bekomme.

Vielen Dank schon mal im Voraus.

Viele Grüße
Michael
X

Quark 5.01 und AppleScript und Anfänger

Hans Haesler
  
Beiträge gesamt: 5826

12. Feb 2007, 16:15
Beitrag # 2 von 11
Beitrag ID: #421484
Bewertung:
(2228 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

herzlich willkommen im Page-Forum! :-)

Hast Du Dir aber zum Einstieg eine happige Aufgabe ausgesucht!

Ich muss gleich weg, doch werde ich versuchen, heute Abend eine
erste Lösung zu posten.

Gruss, Hans


als Antwort auf: [#421483]

Quark 5.01 und AppleScript und Anfänger

Hans Haesler
  
Beiträge gesamt: 5826

13. Feb 2007, 12:09
Beitrag # 3 von 11
Beitrag ID: #421485
Bewertung:
(2228 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

hier kommt endlich meinen Antwort.

Zuerst Grundsätzliches. Die Zahlen in den Textboxen sind – wie Du richtig
sagst – Text. Und mit Textketten kann man nicht Rechnungen durchführen.

Die "Worte" müssen zuerst in Dezimalzahlen (= real) umgewandelt werden:
---
"0.02" as real
---
Das Ergebnis ist 0.02

Wenn man aber an einen Text, welcher aus Ziffern besteht, eine Multiplikation
anfügt, dann wird die Umwandlung automatisch vorgenommen:
---
"0.02" * 0.03937
---
Das Resultat dieser Rechnung sieht aber komisch aus: 7.874E-4

Sobald ein Wert eine bestimmte Grenze unterschreitet, dann wird er in
exponentieller Schreibweise zurückgegeben. Man kann damit immer noch rechnen,
aber zum Einsetzen in Deinem Text muss man ihn aufbereiten.

Das "E-4" am Schluss bedeutet, dass der Dezimalseparator in Wirklichkeit vier
Stellen nach links gerückt werden muss:
---
0.0007874
---
Laut Deinen Beispielen werden die Nachkommastellen auf vier Ziffern begrenzt.

Man sollte die weiteren nicht einfach abschneiden, sondern aufrunden:
---
"0.0008"
---
Für dieses Umwandeln in eine lesbarere Textkette könnte man die Scripting
Addition "Satimage" einsetzen:
---
set curStr to "0.02"
set tmpVal to (curStr * 0.03937)
set inVal to format tmpVal into "0.0000"
---
Das funktioniert gut unter Mac OS X. Aber mit "Satimage 1.8.5" unter
Mac OS 9.2.1 kommt eine Fehlermeldung. Ich habe das Umwandeln deshalb
durch reines AppleScript ersetzt.

Das folgende Script benutzt dennoch die Satimage OSAX. Zum Ersetzen von
"[mm]" durch "[mm/inch]". Falls Du diese Scripting Addition noch nicht installiert
hast, kannst Du sie hier herunterladen: http://www.fachhefte.ch / den Link
"AppleScripts" betätigen und das Verzeichnis "z_additions_os_9" öffnen.
Das Stuffit-Archiv heisst "Satimage.sit".

Bevor man ein Script auf alle Textboxen eines Dokuments loslässt, muss man
sicher sein, dass die Aufgabe wunschgemäss ausgeführt werden wird.
Deshalb behandelt diese Version nur einen ausgewählten Textrahmen.
---
Code
tell document 1 of application "QuarkXPress 5.01" 
  activate
  tell current box
    tell story 1
      repeat with i from 1 to count of paragraphs
        set tmpList to {}
        set curPara to contents of paragraph i
        if curPara contains "[mm]" then
          set AppleScript's text item delimiters to tab
          set curList to every text item of curPara
          set AppleScript's text item delimiters to {""}
          repeat with j from 1 to count of curList
            set curItem to item j of curList
            if curItem contains "[mm]" then
              set curItem to change "[mm]" into "[mm/inch]" in curItem
              set end of tmpList to curItem
            else
              try
                curItem / 2
                set inVal to my convMM(curItem)
                set end of tmpList to curItem & " / " & inVal
              on error
                set end of tmpList to curItem
              end try
            end if
          end repeat
          set AppleScript's text item delimiters to tab
          set curString to every item of tmpList as string
          set AppleScript's text item delimiters to {""}
          set contents of paragraph i to curString
        end if
      end repeat
    end tell
  end tell
end tell

on convMM(curNum)
  set curNum to ((((curNum * 0.03937) * 10000) + 0.5) div 1) / 10000
  set curNum to curNum as string
  if curNum contains "E-" then
    set x to offset of "." in curNum
    set y to offset of "-" in curNum
    set z to offset of "E" in curNum
    set decAdjust to text (y - (count of curNum)) thru -1 of curNum as number
    if x is not 0 then
      set firstPart to text 1 thru (x - 1) of curNum
    else
      set firstPart to ""
    end if
    set secondPart to characters (x + 1) thru (z - 1) of curNum as string
    set convNum to firstPart & secondPart
    set defNum to "0."
    repeat with i from 1 to decAdjust - (count of firstPart)
      set defNum to defNum & "0"
    end repeat
    set defNum to text 1 thru 6 of (defNum & convNum & "000")
  else
    set defNum to text 1 thru 6 of (curNum & "000")
  end if
  return defNum
end convMM

Das Script geht in einer Schleife die Absätze der ausgewählten Textbox durch,
Setzt den aktuellen Absatz in den Speicher und nimmt die weiteren Aktionen
auch darin vor: Wechsel von "[mm]" zu "[mm/inch]", Aufstellen und Abarbeiten
einer Liste der Werte. Für jeden wird der Handler 'convMM(curNum)' aufgerufen,
damit dieser die Umrechnung vornehmen kann.

Das Ergebnis wird an eine temporäre Liste gehängt, welche am Schluss zur
Textkette verwandelt und in der Textbox eingefügt wird.

Bitte versuche mal, dieses Script zum Laufen zu bringen. Dann sehen wir weiter.

Gruss, Hans


als Antwort auf: [#421483]

Quark 5.01 und AppleScript und Anfänger

WaMe
Beiträge gesamt: 5

13. Feb 2007, 15:28
Beitrag # 4 von 11
Beitrag ID: #421486
Bewertung:
(2228 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans !

Ersteinmal ein RIESIGES Dankeschön für Deine Hilfe!
Das Skript habe ich soweit zum Laufen gebracht unter OS 9 mit QuarkXPress 5.
Die Satimage SkriptingAddOns habe ich auch installiert.
Und zu guter letzt macht das Skript sogar genau das, was ich mir vorgestellt habe.  :-)
Allerdings wundert mich noch ein wenig, dass mit den Kommas und Punkten etwas nicht so recht funktioniert. Mein Ausgangstext sieht ja wie folgt aus:

[mm] -> 0.02 -> 0.03 -> 0.04

Mit diesem Text funktioniert das Skript nicht. Wenn ich die Punkte durch Kommas ersetze funktioniert es hingegen:

[mm] -> 0,02 -> 0,03 -> 0,04
Ergebnis:
[mm/inch] -> 0,02 / 0.0000 -> 0,03 / 0,0012 -> 0,04 / 0,0016

Warum hat jetzt die 0.0000 ein Punkt, wohin gegen die anderen Zahlen ein Komma haben???
Ist schon irgendwie merkwürdig.

An welche Stelle muss ich das AppleSkript abändern, um diese zwei Probleme zu beheben? In dem Skript sehe ich ja nur Punkte und keine Kommas.

Viele Grüße
Michael


als Antwort auf: [#421483]

Quark 5.01 und AppleScript und Anfänger

Hans Haesler
  
Beiträge gesamt: 5826

13. Feb 2007, 22:41
Beitrag # 5 von 11
Beitrag ID: #421487
Bewertung:
(2228 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

bitteschön.

Wir haben schon mehr erreicht, als ich mir erhofft hatte. Und die Sache mit den
Punkten und den Kommas bringen wir auch noch hin.

Das Problem ist, dass in Deinem System das Komma als Dezimaltrenner bestimmt ist.
Ich habe nichts erwähnt, weil erstens mein Beitrag schon so viel zu umfangreich war
und ich zweitens mal sehen wollte, was geschieht.

Und Du hast super reagiert und mit dem Auswechseln der Punkte einen Unterschied
im Ergebnis erzielt.

Ich nehme an, das Du Dich beim Wiedergeben vertippt hast. Der erste konvertierte
Wert sollte "0.0008" sein. Mit Punkt, weil dieser im Script (noch) fest verdrahtet
ist. Die anderen Werte sind mit Kommas versehen, weil sie vom Umrechnungshandler
unberührt zurückkommen.

An dieser Stelle möchte ich gerne wissen, welches Resultat das Abspielen des
folgenden Script-Snippets ergibt.
---
set curStr to "0.02"
set tmpVal to (curStr * 0.03937)
set inVal to format tmpVal into "0.0000"
---
Eine Fehlermeldung? Oder "0.0008" im Ergebnisfenster?

Nun zum Dezimaltrenner. Diesen kann man zu Beginn des Scripts fststellen und in eine
Variable geben. Diese wird dann später benutzt, um das "richtige" Zeichen zu verwenden.
---
try
   "1.5" as real
   set decSep to "."
on error
   set decSep to ","
end try
---
Die sechs Zeilen beginnen mit 'try', d.h. "versuche". In diesem Fall die Textkette
"1.5" in eine Zahl mit Kommastellen zu verwandeln. Gelingt es, dann wird der Variablen
decSep der Punkt zugewiesen. Löst der Versuch aber eine Fehlermeldung aus, dann wird
sofort in den 'on error'-Teil gewechselt. Die Fehlermeldung wird unterdrückt, aber
der Inhalt der Variablen wird mit einem Komma versehen.

Im Handler 'convMM' wird eingangs die übergebene Textkette Zeichen um Zeichen untersucht.
Wenn sich das aktuelle Zeichen in der Kette "0123456789" befindet, dann ist es eine Ziffer
und kann getrost an die temporäre Kette gereiht werden. Ein Zwischenraum wird ignoriert.
Ein Return wird vorgemerkt. Und für Komma oder Punkt wird der gespeicherte Trenner angehängt.
Dieser wird auch benutzt, um die Position von Punkt oder Komma in der Kette festzustellen.
Code
set retChar to "" 
set tmpStr to ""
repeat with i from 1 to count of curNum
set curChar to character i of curNum
if curChar is in "0123456789" then
  set tmpStr to tmpStr & curChar
else if curChar is " " then
else if curChar is in ",." then
  set tmpStr to tmpStr & decSep
else if curChar is return then
  set retChar to return
else
  return
end if
end repeat
set curNum to tmpStr


Und hier nochmals das komplette, überholte Script:
Code
try 
"1.5" as real
set decSep to "."
on error
set decSep to ","
end try

global decSep

tell document 1 of application "QuarkXPress 5.01"
activate
tell current box
  tell story 1
  repeat with i from 1 to count of paragraphs
    set tmpList to {}
    set curPara to contents of paragraph i
    if curPara contains "[mm]" then
    set AppleScript's text item delimiters to tab
    set curList to every text item of curPara
    set AppleScript's text item delimiters to {""}
    repeat with j from 1 to count of curList
      set curItem to item j of curList
      if curItem contains "[mm]" then
      set curItem to change "[mm]" into "[mm/inch]" in curItem
      set end of tmpList to curItem
      else
      try
        set {curNum, convNum, retChar} to my convMM(curItem)
        set end of tmpList to curNum & " / " & convNum & retChar
      on error
        set end of tmpList to curItem
      end try
      end if
    end repeat
    set AppleScript's text item delimiters to tab
    set curString to every text item of tmpList as string
    set AppleScript's text item delimiters to {""}
    set contents of paragraph i to curString
    end if
  end repeat
  end tell
end tell
end tell

on convMM(curNum)
set retChar to ""
set tmpStr to ""
repeat with i from 1 to count of curNum
  set curChar to character i of curNum
  if curChar is in "0123456789" then
  set tmpStr to tmpStr & curChar
  else if curChar is " " then
  else if curChar is in ",." then
  set tmpStr to tmpStr & decSep
  else if curChar is return then
  set retChar to return
  else
  return
  end if
end repeat
set curNum to tmpStr
set tmpNum to ((((curNum * 0.03937) * 10000) + 0.5) div 1) / 10000
set tmpNum to tmpNum as string
if tmpNum contains "E-" then
  set x to offset of decSep in tmpNum
  set y to offset of "-" in tmpNum
  set z to offset of "E" in tmpNum
  set decAdjust to text (y - (count of tmpNum)) thru -1 of tmpNum as number
  if x is not 0 then
  set firstPart to text 1 thru (x - 1) of tmpNum
  else
  set firstPart to ""
  end if
  set secondPart to characters (x + 1) thru (z - 1) of tmpNum as string
  set convNum to firstPart & secondPart
  set defNum to "0" & decSep
  repeat with i from 1 to decAdjust - (count of firstPart)
  set defNum to defNum & "0"
  end repeat
  set convNum to text 1 thru 6 of (defNum & convNum & "000")
else
  set convNum to text 1 thru 6 of (tmpNum & "000")
end if
return {curNum, convNum, retChar}
end convMM

Gruss, Hans


als Antwort auf: [#421483]

Quark 5.01 und AppleScript und Anfänger

WaMe
Beiträge gesamt: 5

14. Feb 2007, 08:50
Beitrag # 6 von 11
Beitrag ID: #421488
Bewertung:
(2228 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans !

Also wenn ich das hier ausführe:
---
set curStr to "0.02"
set tmpVal to (curStr * 0.03937)
set inVal to format tmpVal into "0.0000"
---
Dann kommt eine Fehlermeldung: "Cant make 0.02 into a number".
Ändere ich die Variable curStr in "0,02" kommt im Ergebnis 0.0000 raus, nicht 0.0008 (!!!).
Das selbe passiert in Quark, das mit 0.0000 war kein Schreibfehler.

Mit dem neuen Skript funktioniert das jetzt aber problemlos. Bei 0,02 kommt jetzt wirklich 0,0008 raus, wie es sein sollte.
Allerdings passieren jetzt neue merkwürdige Dinge.

Ausgangsbasis ist wieder:
[mm] -> 0.02 -> 0.03 -> 0.04

Mit dem neuen Skript lautet das Ergebnis:
[mm/inch] -> 0,02 / 0,0008 -> 0,03 / 0,0012 -> 0,04 / 0,0016

Ich nehme an, dass das "try", die Trennzeichen auf Punkt zu setzen, nicht erfolgreich war. Jetzt sind ja alle Trennzeichen ein Komma.

Des weiteren habe ich noch folgendes entdeckt:

Ausgangstext:
[mm] ->-> 0.02 ->-> 0.03 ->-> 0.04

Ergebnis:
[mm/inch] -> / 0,0000 -> 0,02 / 0,0008 -> / 0,0000 -> 0,03 / 0,0012 -> / 0,0000 -> 0,04 / 0,0016

Daraus schließe ich jetzt, dass die Zeichen zwischen den Zahlen nicht so belassen werden wie sie sind, sondern dass das Skript extakt einen Tabulator erwartet und nicht einfach nur auf die erste verarbeitbare Zahl wartet.


Gruß
Michael


als Antwort auf: [#421483]

Quark 5.01 und AppleScript und Anfänger

Hans Haesler
  
Beiträge gesamt: 5826

14. Feb 2007, 12:06
Beitrag # 7 von 11
Beitrag ID: #421489
Bewertung:
(2228 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

für die neuen merkwürdigen Dinge gibt es eine Erklärung. Zum Glück.

In Deinem Mac OS ist das Komma als Dezimalseparator definiert.
Wenn der Ausgangstext Werte wie "0.02", dann muss zum Rechnen
ein Komma eingesetzt werden. Falls Du als Ergebnis in der Textbox
wieder Punkte benötigst, dann muss das Script die Kommata
wiederherstellen.

Dazu wird im Handler  convMM beim Prüfen der einzelnen Zeichen
festgestellt, welches der verwendete Trenner ist. Dieser wird der
Variablen actSep zugewiesen. Das Zurücksetzen geschieht ganz am
Schluss, gerade bevor die Werte mit return zurückgeschickt werden:
---
set curNum to change decSep into actSep in curNum
--

Das Problem mit aufeinanderfolgenden Tabulatoren kann auch gelöst
werden. In der Schleife, welche die Absätze durchgeht, wird geprüft,
ob die Zeichenfolge "[mm]" enthalten ist. Wenn dies zutrifft,
dann wird als AppleScript-Trennzeichen ein Tabulator bestimmt:
---
set AppleScript's text item delimiters to tab
---
In der nächsten Zeile werden die Text-Elemente des aktuellen Absatzes
der Liste curList zugewiesen. Als Text-Element gilt eine Zeichenkette,
welche sich zwischen zwei Tabulatoren befindet. Wenn zwei Tabulatoren
aufeinanderfolgen, dann ist das entsprechende Element in der Liste leer:
---
{"[mm]", "", "0.02", "", "0.03", "0.04"}
---
Im Script muss man nun vorsehen, dass bei einem leeren Element nichts
gemacht wird:
---
if curItem is not "" then
---
Hier das erneut geänderte Script:
Code
try 
  "1.5" as real
  set decSep to "."
on error
  set decSep to ","
end try

global decSep

tell document 1 of application "QuarkXPress 5.01"
  activate
  tell current box
    tell story 1
      repeat with i from 1 to count of paragraphs
        set tmpList to {}
        set curPara to contents of paragraph i
        if curPara contains "[mm]" then
          set AppleScript's text item delimiters to tab
          set curList to every text item of curPara
          set AppleScript's text item delimiters to {""}
          repeat with j from 1 to count of curList
            set curItem to item j of curList
            if curItem is not "" then
              if curItem contains "[mm]" then
                set curItem to change "[mm]" into "[mm/inch]" in curItem
                set end of tmpList to curItem
              else
                try
                  set {curNum, convNum, retChar} to my convMM(curItem)
                  set end of tmpList to curNum & " / " & convNum & retChar
                on error
                  set end of tmpList to curItem
                end try
              end if
            end if
          end repeat
          set AppleScript's text item delimiters to tab
          set curString to every text item of tmpList as string
          set AppleScript's text item delimiters to {""}
          set contents of paragraph i to curString
        end if
      end repeat
    end tell
  end tell
end tell

on convMM(curNum)
  set retChar to ""
  set tmpStr to ""
  repeat with i from 1 to count of curNum
    set curChar to character i of curNum
    if curChar is in "0123456789" then
      set tmpStr to tmpStr & curChar
    else if curChar is " " then
    else if curChar is in ",." then
      set actSep to curChar
      set tmpStr to tmpStr & decSep
    else if curChar is return then
      set retChar to return
    else
      return
    end if
  end repeat
  set curNum to tmpStr
  set tmpNum to ((((curNum * 0.03937) * 10000) + 0.5) div 1) / 10000
  set tmpNum to tmpNum as string
  if tmpNum contains "E-" then
    set x to offset of decSep in tmpNum
    set y to offset of "-" in tmpNum
    set z to offset of "E" in tmpNum
    set decAdjust to text (y - (count of tmpNum)) thru -1 of tmpNum as number
    if x is not 0 then
      set firstPart to text 1 thru (x - 1) of tmpNum
    else
      set firstPart to ""
    end if
    set secondPart to characters (x + 1) thru (z - 1) of tmpNum as string
    set convNum to firstPart & secondPart
    set defNum to "0" & decSep
    repeat with i from 1 to decAdjust - (count of firstPart)
      set defNum to defNum & "0"
    end repeat
    set convNum to text 1 thru 6 of (defNum & convNum & "000")
  else
    set convNum to text 1 thru 6 of (tmpNum & "000")
  end if
  set curNum to change decSep into actSep in curNum
  set convNum to change decSep into actSep in convNum
  return {curNum, convNum, retChar}
end convMM

Die nächsten Etappen: Die Schleife auf alle Textboxen ausdehnen,
das Abfangen von Fehlern einbauen und die Ausführung beschleunigen.

Gruss, Hans


als Antwort auf: [#421483]

Quark 5.01 und AppleScript und Anfänger

WaMe
Beiträge gesamt: 5

14. Feb 2007, 13:03
Beitrag # 8 von 11
Beitrag ID: #421490
Bewertung:
(2228 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Yippie !

Das mit den Punkten als Trennzeichen klappt jetzt !  :-)
Aber das mit den Zeichen zwischen den Werten funktioniert noch nicht so recht:

Ausgangstext:
[mm] ->-> 0.02 ->-> 0.03 ->-> 0.04

Ergebnis:
[mm/inch] -> 0.02 / 0.0008 -> 0.03 / 0.0012 -> 0.04 / 0.0016

Wie man sieht, fehlt also jeweils der zweite Tab. Hier habe ich eben die Befürchtung, dass wenn zwischen den Werten irgendwelche "wilden Dinge" (z.B: Tabs, Leerzeichen, Sonderzeichen, usw.) drin stehen, es nachher den Text neu umbricht, wenn die "wilden Dinge" fehlen.

Aber ich muss auch dazu sagen, dass ich nicht gedacht hätte, so weit schon in so kurzer Zeit zu kommen. An wem das wohl liegt??? *g*  An dieser Stelle nochmals vielen Dank für Deine Hilfe.

Zu den weiteren Etappen kann ich auch noch was sagen:
Es reicht völlig wenn man das Apple Skript per Tastenkürzel ansteuern kann. Das Auswählen des Textrahmens vor dem Ausführen des Skripts halte ich sogar für sehr sinnvoll, damit der Anwender auch sieht, wenn der Text anders umbrechen sollte als vorher, wenn z.B. die Tabulatoren zu eng gesetzt sind.
Ob es nötig ist eine Beschleunigung einzubauen weiß ich nicht. Bisher dauert das Skript ja nur einen Bruchteil einer Sekunde.
Was aber noch kommen wird ist, dass nicht nur Milimeter in Inch umgerechnet werden sollen, sondern noch eine ganze Menge andere Werte, wie z.B. "bar" in "psi", "kg" in "oz", "Newton" in "lbf" und ganz tricky "Celcius" in "Fahrenheit". Bei letzterem wird es noch Interessant mit den Minus-Temperaturen denke ich. Die Umrechenformel für Temperaturen an sich ist ja nicht ganz so wild, aber wie man ein Minus abprüft, da bin ich mir noch nicht ganz so sicher. Oder läuft das dann genauso ab wie mit dem Trennzeichen?

Viele Grüße
Michael


als Antwort auf: [#421483]

Quark 5.01 und AppleScript und Anfänger

Hans Haesler
  
Beiträge gesamt: 5826

14. Feb 2007, 14:44
Beitrag # 9 von 11
Beitrag ID: #421491
Bewertung:
(2228 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

stimmt, die mehrfachen Tabulatoren müssen natürlich drinbleiben.
Das erreicht man so: Wenn der Test ein leeres Element findet,
dann wird (gleich wie bisher) nicht der Handler zum Umrechnen
aufgerufen, sondern (neu) eine leere Textkette an die Liste
tmpList gehängt.

Hier nur ein Teil des Scripts, mit dieser Ergänzung:
---
               repeat with j from 1 to count of curList
                  set curItem to item j of curList
                  if curItem is not "" then
                     if curItem contains "[mm]" then
                        set curItem to change "[mm]" into "[mm/inch]" in curItem
                        set end of tmpList to curItem
                     else
                        try
                           set {curNum, convNum, retChar} to my convMM(curItem)
                           set end of tmpList to curNum & " / " & convNum & retChar
                        on error
                           set end of tmpList to curItem
                        end try
                     end if
                  else
                     set end of tmpList to ""
                  end if
               end repeat
---
Beim abschliessenden Zurückverwandeln in eine Textkette wird
anstelle des leeren Strings ein Tab eingefügt und alles ist gut.

Für das Umrechnen von Minusgraden müsste ich zuerst ein konkretes
Beispiel haben. Sende mir doch bitte ein kleines Musterdokument.
Dann habe ich auch gleich Deine Adresse für die Zusendung des
fertigen Scripts.

Mit Tastenkürzel ein Script starten ist der Traum vieler Anwender.
Im vorliegenden Fall sollte das Script ab QuarkXPress-Script-Menü
gestartet werden. Um ihm einen Kürzel zuzuweisen genügt es,
einen Bruchstrich gefolgt vom einem Zeichen anzufügen:
"Beispiel/Y" kann mit Befehl+Y gestartet werden.

Gruss, Hans


als Antwort auf: [#421483]

Quark 5.01 und AppleScript und Anfänger

WaMe
Beiträge gesamt: 5

15. Feb 2007, 06:55
Beitrag # 10 von 11
Beitrag ID: #421492
Bewertung:
(2228 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

mit dem neuen Teil des Skripts bleiben die Zwischenräume zwischen den Werten tatsächlich unverändert. Egal ob es ein Tab oder ein Leerzeichen oder sonst etwas ist. Passt also perfekt. :-)

Zum Umrechnen der (Minus)grade von Celcius in Fahrenheit sieht es so aus:
die Gradzahlen haben ein direkt vorangestelltes Minuszeichen, ohne Leerzeichen dazwischen, also z.B. -10.0

Die Formel zum Umrechnen habe ich inzwischen auch gefunden. Sie lautet:
[°F] = (9 / 5) * [°C] +32

Das mit dem Tastenkürzel habe ich jetzt irgendwie nicht ganz verstanden. Wo muss ich das "/Y" reinschreiben???

Viele Grüße
Michael


als Antwort auf: [#421483]

Quark 5.01 und AppleScript und Anfänger

Hans Haesler
  
Beiträge gesamt: 5826

15. Feb 2007, 07:56
Beitrag # 11 von 11
Beitrag ID: #421493
Bewertung:
(2228 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

und so kann die Umrechnungsformel in AppleScript verwendet werden:
---
set cTemp to -10.0
set fTemp to (cTemp * 1.8) + 32
-->14.0

Den Bruchstrich mit dem "Y" (oder einen anderen freien Buchstaben)
musst Du ans Ende des Script-Dateinamens anfügen:
---
ScriptName/Y
---

Gruss, Hans


als Antwort auf: [#421483]
X