 Hans Haesler
M

Beiträge: 5826
19. Jul 2002, 18:19
Beitrag #2 von 2
Beitrag ID: #417945
Bewertung:
(3880 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
|
Suchen / Ersetzen per Script
|
|
Im Dialog "Suchen / Ersetzen" gibt es die Checkbox "Schreibweise ignorieren". Wenn man sie deaktiviert, wird die Unterscheidung zwischen Gross- und Kleinbuchstaben eingeschaltet. Der entsprechende AppleScript-Befehl ist 'considering case'. Aber leider ist er innerhalb einer XPress-Schleife nicht wirksam. Mit einem üblichen Script wie... --- tell document 1 of application "QuarkXPress 5.0" activate tell current box tell story 1 set every text where it is "A" to "B" end tell end tell end tell --- ... werden auch alle "a" in "B" verwandelt. Wenn es keine Rolle spielt, dass die lokalen Formatierungen verloren gehen, kann folgendes Script eingesetzt werden: --- tell document 1 of application "QuarkXPress 5.0" activate tell current box set storyOne to story 1 set story 1 to my FnR("A", "B", storyOne) end tell end tell on FnR(findChar, replaceBy, storyOne) set oD to AppleScript's text item delimiters set AppleScript's text item delimiters to {findChar} set tmpList to (every text item of storyOne) as list set AppleScript's text item delimiters to {replaceBy} set storyOne to tmpList as string set AppleScript's text item delimiters to oD return storyOne end FnR --- Wenn die lokalen Schriftformatierungen aber beibehalten werden müssen, dann ist das nächste Script vorzuziehen. Es stellt zuerst eine Liste der Offsets der zu findenden Zeichen auf. Der Offset ist ganz einach die Anzahl Zeichen, welche (vom Anfang der "story" an gezählt) vor dem entsprechenden Buchstaben stehen. Der allererste Buchstabe hat einen Offset von... 0 (weil keine Zeichen davorstehen). Der zehnte Buchstabe hat einen Offset von 9. Eine zweite Liste wird aufgestellt, welche alle zu suchenden Zeichen im Text enthält. Beide Listen enthalten die Werte in Gross- und Kleinschreibung. Eine Repeat-Schleife geht durch die Werte der Offset-Liste und schickt das entsprechende Zeichen der Buchstaben-Liste zur Subroutine, welche das Zeichen mit dem zu ersetzenden vergleicht. Bei einer Übereinstimmung retourniert die Subroutine den Wert '1' und das Zeichen wird ersetzt. Auf diese Weise ist das Script deutlich schneller als eines, welches jeden Buchstaben des Textes untersuchen muss. --- set findChar to "A" set replaceChar to "B" tell document 1 of application "QuarkXPress 5.0" activate tell current box tell story 1 set offsetList to offset of every character where it is findChar set charList to every character where it is findChar if offsetList is not {} then if class of offsetList is not list then set offsetList to {offsetList} set charList to {charList} end if repeat with i from 1 to count of charList set testChar to item i of my charList set testChar to my testCase(testChar, findChar) if testChar = 1 then set character ((item i of offsetList) + 1) to replaceChar end repeat end if end tell end tell end tell on testCase(testChar, findChar) considering case if testChar = findChar then return 1 else return 0 end if end considering end testCase --- Hans Haesler <hsa@ringier.ch>
als Antwort auf: [#417944]
|
|
| |