Problem mit Suchen & Ersetzen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Sakura
Beiträge: 9
Registriert: Di, 10.06.2008 02:15

Problem mit Suchen & Ersetzen

Beitrag von Sakura »

Huhu,

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
[/code]
Sakura
Beiträge: 9
Registriert: Di, 10.06.2008 02:15

Re: Problem mit Suchen & Ersetzen

Beitrag von Sakura »

Ich hab keine Ahnung was für einen bescheuerten Code mir OpenOffice da als Vorlage gab. Mein Ansatz steuert irgendwie das Dialogfenster... was für eine verrückte Idee wenn ein sog. "TextCursor" viel besser ist. Ich probiere erst noch ein paar Stündchen rum, aber Dank an alle, die versucht haben durch den Mist zu blicken.

Coole Funktion: Entfernen von überflüssigen Spaces vor und hinter jedem Paragraph. Super für Word-User die keine Absatzformatierung kennen:

Code: Alles auswählen

Dim TextDocument As Object
Dim Cursor As Object
Dim Weiter As Boolean

TextDocument = StarDesktop.CurrentComponent
Cursor = TextDocument.Text.createTextCursor()

Cursor.gotoStart(False)
do
  Cursor.goRight(1, True)
  do while Cursor.String = " "
    Cursor.String = ""
    Cursor.goRight(1, True)
  loop
  Cursor.gotoEndOfParagraph(False)
  Cursor.goLeft(1, True)
  do while Cursor.String = " "
    Cursor.String = ""
    Cursor.goLeft(1, True)
  loop
  Weiter = Cursor.gotoNextParagraph(False)
loop while Weiter
Antworten