Makro-Handler Makro-Handler markieren bestimmte Ausdrücke im Text, um sie z. B. durch Makros gesondert behandeln zu lassen. Anschließend werden sie wieder gelöscht. Beispiel: Buchstabengruppen im Text durch geschützte Leerzeichen zusammenfassen (Beispiel: "d.h. nichts" soll zwar als "d. h. nichts" geschrieben werden, aber durch geschützte Leerzeichen als Block an das nächste Wort gebunden werden, so daß es nicht mehr durch unwillkürlichen Zeilenumbruch getrennt werden kann. Ziel: Im Text soll immer "d. h. nichts" stehen und nie "d. h. nichts" oder "d. h. nichts" Textprobe: "BlahBlah. Nichts, d. h. nichts Neues..." Zuerst sorgt man z. B. durch entsprechende Schleifen dafür, daß hinter jeden Punkt im Text ein und nur ein einziges Leerzeichen steht. Jetzt kommt es darauf an, die jeweiligen Ausdrücke '. ' (Punkt und ein Leerzeichen) gesondert zu behandeln: Dazu ersetzt man hier alle Leerzeichen hinter einzelnstehenden Buchstaben mit Punkt durch geschützte Leerzeichen und -das ist der Trick- markiert diese mit '###' (in der Hoffnung, daß in einem normalen Text der Ausdruck '###' nicht anderweitig vorkommt! Mann kann natürlich zu Sicherheit auch '#1#2#3#' o. ä. nehmen - ggf '³³'; das ist recht selten und gilt im Gegensatz zu '#' o. ä. als Wortteil): I: BearbeitenErsetzen .Suchen = " ^$. ", .Ersetzen = "^&###^g"; => Suche "Leerzeichen+(Beliebiger_Buchstabe)+Punkt+Leerzeichen", Und => ersetze durch "[Leerzeichen+(Ebendieser_Buchstabe)+Punkt+Leerzeichen]+###+Geschütztes Leerzeichen" (=Klebe rechts an jeden einzelnstehenden Buchstaben mit Punkt den Ausdruck "###Geschütztes_Leerzeichen") Resultat: "BlahBlah. Nichts, d. ###°h. nichts Neues..." ['h. ' steht nun nicht mehr einzeln, wird also nicht behandelt!] II: BearbeitenErsetzen .Suchen = "###^g^$. ", .Ersetzen = "^&###^g"; => Nun Suche "###+Geschütztes_Leerzeichen+(Beliebiger_Buchstabe) +Punkt+Leerzeichen" Und => ersetze durch "[###+Geschütztes Leerzeichen+(Ebendieser_Buchstabe)+Punkt+Leerzeichen] +###+Geschütztes Leerzeichen (=Klebe rechts an jeden einzelnstehenden Buchstaben mit Punkt, vor dem bereits '###Geschütztes_Leerzeichen' steht, den Ausdruck "###Geschütztes_Leerzeichen") Resultat: "BlahBlah. Nichts, d. ###°h. ###°nichts Neues..." III. BearbeitenErsetzen .Suchen = " ###", .Ersetzen = ""; => Nun beseitige alle " ###" im Text Resultat: "BlahBlah. Nichts, d.°h.°nichts Neues..." - Wozu dabei das '###'? Es markiert die eingesetzten "geschützten Leerzeichen" als "besondere geschützten Leerzeichen" und verhindert so, daß andere, bereits in Text vorhanden sein könnende geschützte Leerzeichen in das weitere (häufig kompliziertere) Prozedere mit hineingezogen werden. Ersetzt man im Beispiel mit '^&^g' statt mit '^&###^g', hat man als Resultat '. °' statt '. ###°', und das generelle zusammenziehen von '. °' zu '.°' kann woanders im Text unerwünscht sein. Dieses ist nur ein einfaches und in diesem Fall unwahrscheinliches Beispiel. Das markieren bestimmter Gruppen allgemein vorkommender Ausdrücke mit bestimmten Anhängseln macht diese aber grundsätzlich handhabbar; beispielsweise könnten sich dadurch bestimmte Gruppen im Text vertauschen lassen. Man muß nur nachher die Markierer wieder löschen können, ohne Schaden anzurichten. Das heißt: Sie dürfen selber als Ausdruck im behandelten Text nicht vorkommen. --- Ein weiteres Beispiel ist das markieren von Zeilen, hier Zeilenende und - Anfang (WORD z. B. neigt dazu, Zeilenumbrüche sehr unterschiedlich und unzuverlässig zu begreifen und zu behandeln): EndeDokument EinfügenAbsatz BeginnDokument EinfügenAbsatz (Sorgt dafür, daß sich ein "überflüssiger" Absatz am Anfang und am Ende des Textes befindet) Dann: BearbeitenErsetzen .Suchen = "^a", .Ersetzen = "#E#^a#A#"; => Ersetzte jeden Zeilenumbruch durch #E#Zeilenumbruch#A# Im Text steht dann: #E# #A#Irgendetwas#E# #A#Irgendetwas anderes#E# #A# Damit ist eindeutig: Alles, was im Text mit #A# beginnt und mit #E# endet, ist insgesamt und als Ganzes als Zeile zu betrachten und zu behandeln - zum sortieren o. ä.. #A# und #E# natürlich anschließend wieder löschen. --- Etwas Ähnliches kann man auch benutzen, um in WORD schwierige Suche-Und-Ersetze- Operationen bei kombinierter Groß- und Kleinschreibungen durchzuführen. Wenn man zum Beispiel FISCHE, fische und Fische einheitlich durch FISCHe ersetzen will, erhält häufig das Resultat FISCHE, FISCHe und FISCHe Lösung: "Fische" ersetzen lassen durch "FISCH_e" dann "_e" durch "e" ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ JHR 2007 / 2009