[GastForen Programmierung/Entwicklung AppleScript Suchen & ersetzen

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

Suchen & ersetzen

Anonym
Beiträge gesamt: 22827

15. Mär 2004, 13:30
Beitrag # 1 von 9
Bewertung:
(5023 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

weiß jemand, wie ich in Quark oder Word (oder ???) per Applescript froße Mengen an Ersetzungen vornehmen kann?
Der zu durchsuchende Text ist als xtags Datei ca 120KB groß. Die Ersetzungspärchen liegen zZ als Textdatei in folgendem Format vor:
alter Text=neuer Text

wobei sowohl vor als auch nach dem = mal ein oder meherer Wörter stehen.

Hans hat hier schon einmal etwas zum Ersetzen gepostet, aber da wurde  der Urspringstext in eine Variable eingelesen. Auf grund der Größe müßte das erst in mehere Teilen passieren.
Mir reicht eigentlich schon so etwas wie: suche nach text XY und ersetze durch Text ab. Wo und in welchem Programm das passiert, ist eigentlich Nebensache. Hauptsache es klappt :-)

Hier mein Ansatz, nur das myReplace muß icui jetzt noch mit Leben füllen. Während ich auf eine Antwort warte, versuche ich jetzt erstmal Word zum Ersetzten zu überreden :-)

on myReplace(inText, outText)
 tell application "Microsoft Word"
 
end ell
end myReplace

tell application "Finder"
 
 set oldDelims to AppleScript's text item delimiters
 set AppleScript's text item delimiters to "="
 
 
 
 set filePath to (choose file with prompt "Eine Ersetzungsdatei auswählen" of type "TEXT")
 set fileID to open for access filePath
 
 try
  repeat
   set myLine to (read fileID until ASCII character 13)
   
   set orgText to text item 1 of myLine
   set repText to text item 2 of myLine
   
   log (orgText & "•" & repText)
   myReplace(orgText, repText) of me
   --write ((ASCII number i) & return) as text to outFile
  end repeat
 end try
 
 
 close access fileID
 set AppleScript's text item delimiters to oldDelims
 
end tell

Gruß Michael
X

Suchen & ersetzen

Hans Haesler
  
Beiträge gesamt: 5816

15. Mär 2004, 14:14
Beitrag # 2 von 9
Beitrag ID: #418674
Bewertung:
(5021 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

endlich ein Thema, bei welchem ich mich auskenne :-).

Also … wenn schon ein Programm dazu verwenden, dann "BBEdit". Ja nicht "Word". Und den Finder brauchen wir auch nicht.

"BBEdit" ist sehr leistungsfähig, aber wenn es per Script angesprochen werden soll, dann muss man unter Mac OS 9 die kostenplichtige
6.1.2-Version verwenden. Aber man kann auch auf BBEdit verzichten. Es reicht, ein Script zu schreiben und zum Suchen/Ersetzen eine Scripting Addition zu verwenden. Unter Mac OS 9.x gibt es "RegEx Commands" oder "Satimage". Unter Mac OS X "Satimage.osax". Beide sind Freeware.

Obwohl sie im Grunde die gleichen RegExp-Aktionen ausführen, sind die Befehle der beiden Scripting Additions unterschiedlich. Deshalb sollte ich wissen, für welches Mac OS Du das Script einsetzen möchtest.

Weiter: könntest Du mir bitte eine XTags-Datei und eine Datei mit den Ersetzungspärchen zustellen? Dann könnte ich gezielt eine Lösung produzieren.

Hans Haesler <[email protected]>


als Antwort auf: [#418673]

Suchen & ersetzen

Anonym
Beiträge gesamt: 22827

15. Mär 2004, 14:47
Beitrag # 3 von 9
Beitrag ID: #418675
Bewertung:
(5021 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

diesmal war ich schneller, nur nicht beim Antwort posten :-(

IDa ich auch keine wirklicher Freund von Word bin, habe auch ich nach einer Alternative gesucht und bin bei Text Edit Plus gelandet. Den gibt es sowohl für OS 9 und X und ist wie BBEdit scriptfähig.

Hier also meie Lösung:Einfach den Handleraufruf myReplace() durch
   tell application "Tex-Edit Plus"
    select window 1
    replace window 1 looking for orgText replacing with repText
    --replace window 1 looking for orgText replacing with repText with cases matching and whole words matching
   end tell

ersetzten und fertig :-)

Also nocheinmal vielen Dank an dich Hans für deine schnelle Antwort. Da ich ja aufgrund früherer Posts von dir damit gerechnet habe, das du mit RexEx kommen wirst (mächtig, aber mus man auch erstmal verstehen :-)) ) Habe ich mich mit TextEdit beholfen. Ich denke, das sieht auch recht einfach aus; zumindest für mich, der  (viel zu selten) solche Probleme lösen muß/darf und sich daher nicht ganz so doll in AS auskennt :-(

Gruß
Michael


als Antwort auf: [#418673]

Suchen & ersetzen

Hans Haesler
  
Beiträge gesamt: 5816

15. Mär 2004, 15:28
Beitrag # 4 von 9
Beitrag ID: #418676
Bewertung:
(5021 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

bitteschön. Deine Berührungsängste gegenüber RegEx sind verständlich. Aber wenn man mal das Prinzip verstanden hat, dann ist das Ding nicht mehr so fremd. Und der Vorteil ist, dass die Dateien im Hintergrund behandelt werden. Sie müssen nicht in einem Fenster angezeigt werden. Und ich nehme an, dass die Performance schon allein aus diesem Grunde besser sein wird.

Deshalb würde ich gerne für Dich eine (kommentierte) RegEx-Lösung entwickeln. Wenn Du mir also bitte die Beispielfiles senden würdest, damit ich mit dem "real stuff" üben kann &#133;

Hans Haesler <[email protected]>


als Antwort auf: [#418673]

Suchen & ersetzen

Anonym
Beiträge gesamt: 22827

15. Mär 2004, 17:48
Beitrag # 5 von 9
Beitrag ID: #418677
Bewertung:
(5021 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

also wenn du darauf bestehst... schicke ich dir die Daten an [email protected]


Viele Grüße aus dem sonnigen München


als Antwort auf: [#418673]

Suchen & ersetzen

Hans Haesler
  
Beiträge gesamt: 5816

16. Mär 2004, 21:57
Beitrag # 6 von 9
Beitrag ID: #418678
Bewertung:
(5021 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

also &#133; da komme ich nicht mehr mit. Hast Du wirklich erfolgreich mit "Tex-Edit-Plus" das Suchen/Ersetzen durchgeführt? Und zwar in der XTags-Datei, welche Du mir zugestellt hast?

Der ganze Text ist ja gespickt mit optionalen Trennungen im XPress-Tags-Format (= <\h>) und das sieht so aus:
Code
Ad<\h>re<\h>na<\h>li<\h>nin<\h>jek<\h>tio<\h>nen 

Huch!!! In der ASCII-Datei kann ein solches Wort nur gefunden werden, wenn der Suchstring auch so "aufbereitet" wird. Auch mit einfacheren, wie zum Beispiel mit "Chap<\h>ter", welches durch das deutsche "Kapitel" ersetzt werden soll, wird es nicht klappen.

Achtung Falle: Da soll "See also" durch "Siehe auch" ersetzt werden. Aber da gibt es auch eine Stilvorlage, welche so heisst. Zwar kein eigentliches Problem, weil in der Datei ja auch die Definition der Stilvorlage steht und ebenfalls umbenannt werden wird.

Aber in einem anderen Fall geht es bestimmt schief, wenn nicht die Reihenfolge umgekehrt wird: Zuerst "Disorders of the heart" suchen und ersetzen, bevor das einfache "Disorders" behandelt wird &#133;

Übrigens: Wenn der Text in ein XPress-Dokument importiert wird (Checkbox "Einschließlich Stilvorlagen" aktiviert), dann stören die optionalen Trennungen den Suchen-/Ersetzen-Vorgang nicht. Die Textketten können alle gefunden und ersetzt werden. Allerdings wird es mit XPress 6 ein Weilchen dauern.

Hans Haesler <[email protected]>


als Antwort auf: [#418673]

Suchen & ersetzen

Anonym
Beiträge gesamt: 22827

16. Mär 2004, 22:14
Beitrag # 7 von 9
Beitrag ID: #418679
Bewertung:
(5021 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

ich habe natürlich erstmal alle <\h> durch nix ersetzt. Das aber mit TextEdit :-))
Die Firma, von der dieses Problem stammt, verwendet irgendeine xtension, die automatisch weiche Trennungen einbaut. Die stören natürlich bei der Ersetzung. Also werden sie gnadenlos ersetzt/gelöscht. Mann kann ja nicht alles haben. Außer du schaftst selbst das mit regex.Aber damit habe ich mich abgefunden.

Gruß Michael


als Antwort auf: [#418673]

Suchen & ersetzen

Hans Haesler
  
Beiträge gesamt: 5816

17. Mär 2004, 08:07
Beitrag # 8 von 9
Beitrag ID: #418680
Bewertung:
(5021 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

ach soooo... Mit RegEx schafft man das leicht:
---
set aString to "Ad<\\h>re<\\h>na<\\h>li<\\h>nin<\\h>jek<\\h>tio<\\h>nen"
set aString to change "<\\h>" into "" in aString
-->"Adrenalininjektionen"

Die Backslashes (= \) sind verdoppelt, weil dieses Zeichen in AppleScript ein Sonderzeichen ist und durch einen &#133; Backslash deaktiviert werden muss.

Dieses Snippet benötigt die Scripting Addition "Satimage". Getestet unter Mac OS 9.2.1. Aber unter Mac OS X wird der Befehl genau gleich lauten. Ich werde gelegentlich versuchen, für Deine Aufgabe ein OSX-Droplet zu entwickeln.

Hans Haesler <[email protected]>


als Antwort auf: [#418673]

Suchen & ersetzen

Hans Haesler
  
Beiträge gesamt: 5816

18. Mär 2004, 22:29
Beitrag # 9 von 9
Beitrag ID: #418681
Bewertung:
(5021 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

entschuldige bitte die Verzögerung. Ich war am Mittwoch sehr beschäftigt und heute den ganzen Tag abwesend. Aber soeben habe ich das fertige Suchen/Ersetzen-Droplet an Dich gesandt.

Es funktioniert unter Mac OS X 10.3.2 und benötigt die Scripting Addition "Satimage.osax". Die Anwendung: eine (oder mehrere) XPress-Tags-Dateien auf das Icon des Droplets ziehen, im Dialog eine Konvertertabellen-Datei selektionieren und auf "Auswählen" klicken.

Trotzdem Deine Beispieldatei recht viel wiegt (169'683 Zeichen), ist der Spuk vorbei, bevor Du "Suchen/Ersetzen" sagen kannst. :-) Die 14'925 (sic!) optionale Trennungstags werden weggeputzt, eventuelle mehrfache Zwischenräume durch einen ersetzt und die 13 Suchen-/Ersetzen-Paare werden der Reihe nach durchgenommen.

Hier das Kernstück des Scripts. Die zu behandelnde XPress-Tags-Datei wird in die Variable 'aString' eingelesen. Die vom Anwender ausgewählte Konvertertabellendatei in die Variable 'convFile'. In den drei folgenden Handlern sagen die eingefügten Kommentare eigentlich alles.
---
on stripSpaces()
  -- zwei (oder mehr) Zwischenräume durch einen einzigen ersetzen
  set aString to change " +" into " " in aString with regexp
end stripSpaces

on stripHyph()
  -- die optionalen Trennungs-Tags rausschmeissen
  set aString to change "<\\h>" into "" in aString
end stripHyph

on searchReplace()
  -- mit einer Repeatschleife die Absätze der Konvertertabellen-Datei durchgehen
  repeat with i from 1 to count of paragraphs of convFile
    try
      -- den aktuellen Absatz in die Variable 'curPara' geben
      set curPara to paragraph i of convFile
      -- die Position des "="-Zeichens feststellen
      set equalPos to item 1 of (matchPos of (find text "=" in curPara) as list)
      -- den Suchstring, basierend auf der Position von "=" in die Variable 'searchStr' geben
      set searchStr to (text 1 thru equalPos) of curPara
      -- den Ersetzenstring, basierend auf der Position von "=" in die Variable 'replaceStr' geben 
      set replaceStr to text (equalPos + 2) thru -1 of curPara
      -- in der Variable das Suchen/Ersetzen vornehmen
      set aString to change searchStr into replaceStr in aString
    end try
  end repeat
end searchReplace
---
Von wegen RegExp: nur der erste Befehl, welcher die Zwischenräume reduziert, ist ein eigentlicher Regular-Expressions-Befehl, weil bei den weiteren die "buchstäblichen" Textketten angesprochen werden.

Hans Haesler <[email protected]>


als Antwort auf: [#418673]
X

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
29.09.2022

IDUGS#85 Press2id

Zoom Meeting
Donnerstag, 29. Sept. 2022, 19.00 - 21.00 Uhr

Vortrag

Kennst du WordPress? Vielleicht. Verwendest du WordPress? Ja, klar! WordPress ist das am weitesten verbreitete System für die Erstellung von Webseiten. Um Webseitenbau soll es auf dieser IDUG aber nicht gehen. Gregor zeigt press2id (github.com/grefel/press2id). Seine Open-Source-Lösung für die Verbindung von Web und InDesign. Richtig gelesen: InDesign liest mithilfe von press2id die Inhalte der WordPress-Webseiten und generiert daraus Zeitschriften, Kataloge, Programmhefte oder Bierdeckel (das zeigen wir natürlich auch!). So wird die „Content First“ Theorie zu einer konkret anwendbaren Praxis, ohne gleich die ganz großen Räder zu drehen. Versprochen: Jeder kann nach der IDUG innerhalb kürzester Zeit Daten von WordPress nach InDesign importieren. Aber Achtung: Prinzipiell kann press2id aus jeder Website, oder besser Contentmanagementsystem (CMS) Daten auslesen und nach InDesign importieren! Spannend, oder? Danach geht es in die Praxis: Stefan hat die Webseite des Parktheater Iserlohn (parktheater-iserlohn.de) gestaltet. Die gedruckten Spielpläne (parktheater-iserlohn.de/interaktive-spielplaene) werden mit press2id realisiert. Wir schauen in den Maschinenraum und zeigen, wie die Lösung des Projekts realisiert wurde.

Nein

Organisator: InDesign Usergroup Stuttgart

Kontaktinformation: Christoph Steffens, E-Mailidug AT satzkiste DOT de

https://idugs85.eventbrite.de/

Von Wordpress nach InDesign
Veranstaltungen
08.11.2022

Frankfurt, Fraport Conference Center
Dienstag, 08. Nov. 2022, 13.30 - 18.00 Uhr

Seminar

Auf der Enfocus World Tour stellen wir Ihnen gemeinsam mit Enfocus die aktuellen Highlights von Enfocus Switch und dem Impressed Workflow Server (IWS) vor. Wir präsentieren Ihnen anhand typischer Aufgabenstellungen in einem modernen Produktionsbetrieb die Möglichkeiten, die Enfocus Switch für die Automatisierung und Standardisierung von Abläufen bietet. Wir haben sowohl für Produktionsverantwortliche als auch technisch Interessierte ein spannendes Programm vorbereitet, bei dem Sie sicherlich viel Neues erfahren werden, welches Sie in Ihrem eigenen Betrieb umsetzen können. Die Veranstaltung bietet darüber hinaus eine hervorragende Möglichkeit, sich mit anderen Anwendern und Workflow-Spezialisten auszutauschen und Antworten auf konkrete Aufgabenstellungen zu erhalten, welche Sie mit Hilfe von Enfocus Switch/IWS umsetzen möchten.

Wir sind jeweils an 2 Tagen in Frankfurt, Hamburg und München vor Ort. Der erste (halbe) Tag richtet sich in erster Linie an Betriebsleiter und Produktionsverantwortliche in Druckereien - ist also weniger technisch orientiert - sondern gibt einen Überblick zu den heutigen Möglichkeiten einer automatisierten Produktion.

Der zweite Tag (Switch Anwender-Treffen) richtet sich an bestehende Switch-Anwender und Administratoren.

Anmeldung und weitere Infos: https://www.impressed.de/schulung.php?c=sDetail&sid=310

Ja

Organisator: Enfocus/Impressed

Kontaktinformation: Silvia Noack, E-Mailsnoack AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=310

Enfocus World Tour 2022