ich habe mal wieder ein Problemchen mit einem Makro. Hintergrund: Ich habe eine nette, ältere Person gefunden, die uns eine Menge an Texten (irgendwann werden das einmal 7800 Stück sein) übersetzt. Die gute Frau ist sehr fleißig am Tippen. Dummerweise benutzt sie (Marktführer aus Redmont) Wort.
Dabei kann sie mit dem Ding leider nicht perfekt umgehen und verwendet Absatzmarkierungen als Abstandhalter und Leerzeichen zur Formatierung... auch in Leerzeilen... sie möchte sie wohl gerne einrücken damit sie noch deutlicher unsichtbar sind?
Ich muß auch einige typographischen Änderungen vornehmen, um die Dokumente "in einem Rutsch" zu verarbeiten. Die meisten Probleme sind gelöst, allerdings funktionieren einige Ersetzungen nicht.
Zuerst einmal scheint das Ersetzen in BASIC nicht immer zu funktionieren, wenn ich Sonderzeichen aus einem M$ Word Dokument (natürlich mit OpenOffice geöffnet) in BASIC code kopiere. Aber halt nicht immer. Ich dachte, vielleicht konvertiere OpenOffice das Zeichen beim Einkopieren in den Quelltext.
RegExp funktionieren auch nicht immer (hat aber bestimmt nichts mit BASIC zu tun?)
Ich will alle Leerzeilen mit 0,1, oder mehreren Leerzeichen löschen. Dazu ersetze ich ^([:space:]*)$ durch "". Klappt aber nicht, ist das nicht richtig?
Gibt es eine Möglichkeit, in dem Wurschtelcode unten herauszufinden, wieviele Ersetzungen gemacht wurden?
Hier ist mal mein Code, damit ihr was zu Lachen habt:
Code: Alles auswählen
sub BD_Punkte
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
dim i as integer
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(18) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SearchItem.StyleFamily"
args1(0).Value = 2
args1(1).Name = "SearchItem.CellType"
args1(1).Value = 0
args1(2).Name = "SearchItem.RowDirection"
args1(2).Value = true
args1(3).Name = "SearchItem.AllTables"
args1(3).Value = false
args1(4).Name = "SearchItem.Backward"
args1(4).Value = false
args1(5).Name = "SearchItem.Pattern"
args1(5).Value = false
args1(6).Name = "SearchItem.Content"
args1(6).Value = false
args1(7).Name = "SearchItem.AsianOptions"
args1(7).Value = false
args1(8).Name = "SearchItem.AlgorithmType"
args1(8).Value = 0
args1(9).Name = "SearchItem.SearchFlags"
args1(9).Value = 65536
args1(10).Name = "SearchItem.SearchString"
args1(11).Name = "SearchItem.ReplaceString"
args1(12).Name = "SearchItem.Locale"
args1(12).Value = 255
args1(13).Name = "SearchItem.ChangedChars"
args1(13).Value = 2
args1(14).Name = "SearchItem.DeletedChars"
args1(14).Value = 2
args1(15).Name = "SearchItem.InsertedChars"
args1(15).Value = 2
args1(16).Name = "SearchItem.TransliterateFlags"
args1(16).Value = 1280
args1(17).Name = "SearchItem.Command"
args1(17).Value = 3
args1(18).Name = "Quiet"
args1(18).Value = true
rem Normale Ersetzungen
rem Literarischer Punkt
args1(10).Value = "…"
args1(11).Value = "..."
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
rem Vier Punkte in drei Punkte
args1(10).Value = "...."
args1(11).Value = "..."
for i = 1 to 3
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
next
rem Nun drei Punkte in vier Punkte. Wir sollten dann immer vier haben, es sei denn wir finden irgendwo 7
args1(10).Value = "..."
args1(11).Value = "...."
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
rem Typographischer Bindestrich
args1(10).Value = "–"
args1(11).Value = "-"
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
rem Typographische Anführungszeichen
args1(10).Value = "’"
args1(11).Value = "'"
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
args1(10).Value = "‘"
args1(11).Value = "'"
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
rem ** Nun die Regulären Ausdrücke
args1(8).Value = 1
rem Fettdruck in Sterne einschließen
args1(10).Value = "(.*)"
args1(11).Value = "**$1**"
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
args1(10).Value = "^([:space:]*)$"
args1(11).Value = ""
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
end sub