🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Zeilenumbruch replaceAll

Alles zur Programmierung im LibreOffice.
Antworten
manese
Beiträge: 27
Registriert: Mi 9. Feb 2011, 19:27

Zeilenumbruch replaceAll

Beitrag von manese » Do 11. Jun 2015, 11:40

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

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2536
Registriert: Fr 10. Dez 2010, 10:01

Re: Zeilenumbruch replaceAll

Beitrag von karolus » Do 11. Jun 2015, 13:25

Die meisten Zeichen verlieren innerhalb von [] ihre Sonderbedeutung, du musst sie nicht maskieren mit \backslash.

Karolus
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

manese
Beiträge: 27
Registriert: Mi 9. Feb 2011, 19:27

Re: Zeilenumbruch replaceAll

Beitrag von manese » Do 11. Jun 2015, 14:52

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

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2536
Registriert: Fr 10. Dez 2010, 10:01

Re: Zeilenumbruch replaceAll

Beitrag von karolus » Do 11. Jun 2015, 15:57

Hallo

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

Code: Alles auswählen

[,;.:!?]

Ersetzungsausdruck:
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

manese
Beiträge: 27
Registriert: Mi 9. Feb 2011, 19:27

Re: Zeilenumbruch replaceAll

Beitrag von manese » Do 11. Jun 2015, 22:54

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

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2536
Registriert: Fr 10. Dez 2010, 10:01

Re: Zeilenumbruch replaceAll

Beitrag von karolus » Fr 12. Jun 2015, 07:43

Im Makro hast du andere Möglichkeiten:

Code: Alles auswählen

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


Karolus
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

manese
Beiträge: 27
Registriert: Mi 9. Feb 2011, 19:27

Re: Zeilenumbruch replaceAll

Beitrag von manese » Fr 12. Jun 2015, 20:04

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


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten