Seite 1 von 1

Zeilenumbruch replaceAll

Verfasst: Do 11. Jun 2015, 11:40
von manese
Hallo,
ich habe ein Makro, das sehr lange funktioniert hat, es aber plötzlich nicht mehr tut.
Ich habe inzwischen herausgefunden, dass das an dem regulären Ausdruck " \n " liegt.

Code: Alles auswählen

Sub zeilenweise
	Dim oDoc as Object
		oDoc = ThisComponent
	Dim oSuche as object
		oSuche = oDoc.createReplaceDescriptor()
	With oSuche
		.setSearchString("[\.\,\;\:\?\!]")
		.setReplaceString("&\n")
		.searchRegularExpression = True
		.searchAll = True
	End With
	oDoc.replaceAll(oSuche)
end sub
Das Makro bricht jedesmal an der ersten Stelle im Text ab.
Wenn ich die gleiche Kombination direkt bei Suchen/Ersetzen eingebe, funktioniert es problemlos.
Wenn ich "\n" z.B. durch "\t" ersetze, funktioniert es auch.
Ist das ein Bug? Bzw. kennt jemand einen Workaround?

Vielen Dank für eure Hilfe!
matthias

Re: Zeilenumbruch replaceAll

Verfasst: Do 11. Jun 2015, 13:25
von karolus
Die meisten Zeichen verlieren innerhalb von [] ihre Sonderbedeutung, du musst sie nicht maskieren mit \backslash.

Karolus

Re: Zeilenumbruch replaceAll

Verfasst: Do 11. Jun 2015, 14:52
von manese
Hallo karolus,
vielen Dank für deine schnelle Reaktion,
aber das war es leider nicht.
Der Fehler liegt auch nicht im Search-String
sondern offensichtlich im Replace-String.
Und wie ich es schon geschrieben habe,
mit anderen Angaben geht es, auch mit regulären Ausdrücken wie "\t".
Trotzdem nochmals vielen Dank!

matthias

Re: Zeilenumbruch replaceAll

Verfasst: Do 11. Jun 2015, 15:57
von karolus
Hallo

ich hab das probiert direkt im S&E-Dialog, und es tut was ich erwarte.
Suchausdruck

Code: Alles auswählen

[,;.:!?]

Ersetzungsausdruck:

Re: Zeilenumbruch replaceAll

Verfasst: Do 11. Jun 2015, 22:54
von manese
Hallo karolus,
danke, dass du dich mit dem Thema beschäftigst,
es ist ja wirklich etwas speziell.
Aber die Beobachtung habe ich auch schon gemacht:
Wenn man die gleichen Werte bei Suchen/Ersetzen direkt einsetzt,
funktioniert es.

Es ist nur der ganz spezielle Fall,
dass man es in ein Makro einbaut
und dann eine Kombination mit "\n" wählt,
wo es nicht geht.

Eine andere Kombination (z.B. "\t") geht,
eine Direkteingabe geht.
Und bis vor kurzem ging es auch im Makro.
Ich fürchte, es ist ein Bug in meiner Version 4.4.3.2.

Aber nochmals vielen Dank!

matthias

Re: Zeilenumbruch replaceAll

Verfasst: Fr 12. Jun 2015, 07:43
von karolus
Im Makro hast du andere Möglichkeiten:

Code: Alles auswählen

               .setReplaceString("&" & chr(10)) 'oder chr(13)'


Karolus

Re: Zeilenumbruch replaceAll

Verfasst: Fr 12. Jun 2015, 20:04
von manese
Hallo karolus,
fast wärst du heute mein absoluter Held geworden.
Ich habe mich zunächst geärgert,
dass ich auf diese Lösung nicht selbst gekommen bin …
Dann habe ich es mit chr(10) ausprobiert,
und siehe da, es klappte wunderbar.
Dann habe ich es mit chr(13) probiert,
und schwupp, war der alte Fehler wieder da.
Da half auch kein Nachbessern mit einem zweiten Ersetzungsvorgang.
Wenn ich die Zeit dazu habe,
versuche ich es demnächst mit einer Schleife,
die sich Stück für Stück durch die Texte durcharbeitet.
Es war halt so schön einfach …
Nochmals vielen Dank.
Und wenn du noch eine Idee hast,
du weißt, ich kann so was immer gebrauchen.
Alles Gute
matthias