Absatzmarken ersetzen

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

Moderator: Moderatoren

Mr.Ed
**
Beiträge: 47
Registriert: Di, 16.02.2010 18:38

Absatzmarken ersetzen

Beitrag von Mr.Ed »

Hallo allerseits,

ich möchte per Makro in einem Writer-Dokument Absatzmarken durch Leerzeichen ersetzen. Bis jetzt funktionierte das recht zuverlässig mit dem regulären Ausdruck "$" als Suchbegriff und dem Leerzeichen (" ") als Ersetze-Zeichen. Seit dem Update auf die neue Apache-Version von Open Office habe ich damit Schwierigkeiten. Leere Absätze ("^$") werden übrigens nach wie vor zuverlässig gefunden und bei Bedarf ersetzt.

Wie kann ich Absatzmarken als regulären Ausdruck formulieren? "\n" steht ja für einen mit Umschalt+Eingabetaste eingefügten Zeilenumbruch, kommt also nicht infrage. Vielen Dank für weiterführende Hinweise!

Mr.Ed
manese
*****
Beiträge: 482
Registriert: Mo, 03.10.2005 17:20
Wohnort: Borgholzhausen
Kontaktdaten:

Re: Absatzmarken ersetzen

Beitrag von manese »

Hallo, Mr.Ed,
ich kann dein Problem nicht nachbilden.
Bei mir klappt es nach wie vor.
Möglicherweise liegt es an deiner LO-Version und/oder deinem Betriebssystem.

Für Härtefälle benutze ich folgendes Makro:

Code: Alles auswählen

Sub KolongrenzeAufheben
	Dim oDoc as Object
		oDoc = ThisComponent
''''''''''''''''''''''''''''''''''''
'Viewcursor und Textcursor erstellen		
	Dim oViewC as Object
		oViewC = oDoc.getCurrentController().getViewCursor()
	Dim oTextC as Object
		oTextC = oDoc.Text.createTextCursorByRange(oViewC)
''''''''''''''''''''''''''''''''''''''
'Zeilenende durch Leerzeichen ersetzen		
	oTextC.goToEndOfParagraph(False) : oTextC.goRight(1, True)
	oTextC.setString(" ", True)
End Sub
Das Makro ist übrigens auch ganz schön praktisch,
wenn man z.B. per Hand aus PDF-Dateien oder E-Mails störende LFs entfernen will

Alles Gute
matthias
Mr.Ed
**
Beiträge: 47
Registriert: Di, 16.02.2010 18:38

Re: Absatzmarken ersetzen

Beitrag von Mr.Ed »

Vielen Dank für den Hinweis, matthias! (Ich hatte schon gar nicht mehr damit gerechnet, dass jemand sich auf meine Frage meldet.)

Dein Code leuchtet mir ein. Ich werde am Wochenende mal ausprobieren, ob ich mir damit helfen kann.

Ich will trotzdem mal mein Problem etwas genauer beschreiben. Mein Makro soll Absatzmarken durch Leerzeichen ersetzen. Dazu verwende ich folgenden Code:

Code: Alles auswählen

	REM Absatzmarken durch Leerzeichen ersetzen
	oSuche = oDoc1.createSearchDescriptor()
	With oSuche
		.SearchRegularExpression = True
		.setSearchString("$")
		.setReplaceString(" ")
	End With
	oDoc1.replaceAll(oSuche)
Ergebnis: Manche Absatzmarken werden einfach gelöscht (ohne Ersatz durch Leerzeichen), andere bleiben stehen, aber mit einem davor eingesetzten Leerzeichen. Ich versuche gerade nachzuvollziehen, worauf das zurückzuführen sein könnte.

Grund für meine Frage hier: Das Problem ist vor dem Update auf Apache-OO nicht aufgetaucht. Es taucht jetzt auch dann auf, wenn ich ältere Quelltexte mit dem Makro bearbeite, also Quelltexte, die vor dem Update ohne weiteres richtig ausgewertet worden sind. Wahrscheinlich ist die Ursache für das alles – wie so oft – trivial!

MfG Mr.Ed
Mr.Ed
**
Beiträge: 47
Registriert: Di, 16.02.2010 18:38

Re: Absatzmarken ersetzen

Beitrag von Mr.Ed »

Hallo matthias, hallo andere Mitstreiter!

Ich bin endlich dazu gekommen, deinen Hinweis auszuprobieren. Ich benutze die Makros in einem relativ umfangreichen Textverarbeitungsprojekt. Dort kam der in meinem letzten Posting wiedergegebene Code an insgesamt vier Stellen vor. Erst als den Code an allen vier Stellen durch folgenden, von matthias angeregten Code ersetzt hatte, lief mein Projekt wieder einwandfrei:

Code: Alles auswählen

	REM Absatzmarken durch Leerzeichen ersetzen
	oSuche = oDoc1.createSearchDescriptor()
	With oSuche
		.SearchRegularExpression = True
		.setSearchString("^[:print:]{1}")
	End With
	oSuchErg = oDoc1.findNext(oDoc1.text.start, oSuche)
	Do While Not isNull(oSuchErg)
		oViewC = oDoc1.getCurrentController().getViewCursor()
		oTxtC = oDoc1.Text.createTextCursorByRange(oViewC)
		oTxtC.goToEndOfParagraph(False)
		oTxtC.goRight(1, True)
		oTxtC.setString(" ")
		oSuchErg = oDoc1.findNext(oSuchErg.End, oSuche)
	loop
Mein Problem ist also soweit gelöst, für mich ist die Sache damit abgeschlossen. Trotzdem bleibt es mir rätselhaft, warum der ursprüngliche Code plötzlich nicht mehr funktioniert hat. Ich habe diesen Code hier im Forum auch an anderen Stellen gefunden, zum Beispiel zur Bearbeitung von PDF-Dokumenten. Vielleicht ist mein Hinweis deshalb auch für andere Leute interessant.

Gruß Mr.Ed
Antworten