Das OpenOffice-Forum braucht Eure HILFE und sagt DANKE!

replaceAll - Punkte durch Absätze ersetzen

Alles zur Programmierung im OpenOffice.org
Antworten
Mario_Bastler
Beiträge: 4
Registriert: Mi 25. Mär 2020, 17:34

replaceAll - Punkte durch Absätze ersetzen

Beitrag von Mario_Bastler » Mi 25. Mär 2020, 18:49

Hallo,
ich versuche in einem Writer-Dokument alle Punkte durch Absätze mittels eines Makros zu ersetzen, sodass jeder Satz in einem eigenem Absatz steht. Allerdings wird nur der erste Punkt ersetzt. Was mache ich falsch? Gibt es eine andere Möglichkeit?
Vielen Dank für Hilfen

Code: Alles auswählen

Sub PunkteErsetzen

	Dim Doc As Object
	Dim Replace As Object
	Dim I As Long
	 
	Doc = ThisComponent
	Replace = Doc.createReplaceDescriptor
	Replace.SearchRegularExpression = True
	Replace.SearchString = "\. "
	Replace.ReplaceString = ".\n"
	 
	Doc.replaceAll(Replace)

End Sub

craig
Beiträge: 184
Registriert: Sa 14. Mai 2016, 12:36

Re: replaceAll - Punkte durch Absätze ersetzen

Beitrag von craig » Mi 25. Mär 2020, 20:25

Hallo Mario,
Was mache ich falsch?
Nichts.
Dein Code läuft bei mir einwandfrei.

aus:
Hallo Ananas. Hallo. Hallo. Hallo Apfel. Hallo.

wird:
Hallo Ananas.
Hallo.
Hallo.
Hallo Apfel.
Hallo.

Getestet mit:
  • LibreOffice Version: 6.3.4.2 (x64)
  • AOO 4.1.6
Gruß

Craig

Nie die Sicherungskopie vergessen!

═══════════════════════════════════════
WIN 10 Pro 64-Bit • AOO 4.1.6 • LO 6.3.2.2 (x64)

Mario_Bastler
Beiträge: 4
Registriert: Mi 25. Mär 2020, 17:34

Re: replaceAll - Punkte durch Absätze ersetzen

Beitrag von Mario_Bastler » Mi 25. Mär 2020, 21:23

Hallo Craig,

vielen Dank für deine rasche Antwort, auch wenn sie mich sehr erstaunt.

Inzwischen habe ich ein Workaround, indem ich statt des Replace-Characters ".\n" nun Chr$(13) & Chr$(10) benutze und so zwar keine neuen Absätze aber neue Zeilen bekomme.

Ich benutze LibreOffice Version: 5.1.6.2 (x64)

craig
Beiträge: 184
Registriert: Sa 14. Mai 2016, 12:36

Re: replaceAll - Punkte durch Absätze ersetzen

Beitrag von craig » Mi 25. Mär 2020, 22:26

Hallo Mario,
auch wenn sie mich sehr erstaunt.
Ich denke es ist ein Problem mit der Zeichencodierung Punkt ist nicht = Punkt.

Unicode Punkt:
dezimal = 46
hexadezimal = U+002e

Leider kenne ich in AOO keinen Shortcut, um sich die Zeichencodierung anzeigen zu lassen.
In LIbreOffice stellt man den Cursor hinter das gewünschte Zeichen und drückt [ALT]+[c]
Die Anzeige toggelt bei wiederholtem drücken zwischen dem Zeichen und der Codeangabe hin und her.
A <--> U+0041
Entspricht CHR(65)
65 = dezimal
--------------------------------

Es bringt aber auch nichts, die Punkte aus Writer per c&p in die Basic-IDE zu kopieren,
denn der Punkt wird wohl in U+002e umgewandelt.

Folgender Vorschlag:
Speichere eine Kopie Deines Dokuments.
Lasse von jedem Satz das letzte Wort und den Punkt stehen. Alles andere löscht Du.
Dann lade diese Datei hier hoch und ich untersuche die Datei mit Libreoffice.
Sollte es sich tatsächlich um verschiedene Codierungen für die Punkte handeln,
dann benötigst Du lediglich eine zusätzlich Replace-Anweisung in Deinem Makro.
Gruß

Craig

Nie die Sicherungskopie vergessen!

═══════════════════════════════════════
WIN 10 Pro 64-Bit • AOO 4.1.6 • LO 6.3.2.2 (x64)

Mario_Bastler
Beiträge: 4
Registriert: Mi 25. Mär 2020, 17:34

Re: replaceAll - Punkte durch Absätze ersetzen

Beitrag von Mario_Bastler » Do 26. Mär 2020, 00:13

craig hat geschrieben:
Mi 25. Mär 2020, 22:26
Ich denke es ist ein Problem mit der Zeichencodierung Punkt ist nicht = Punkt.
Das erscheint mir eher unwahrscheinlich, schließlich wird der erste Punkt meines Textes tatsächlich durch eine Absatzmarke ersetzt.
craig hat geschrieben:
Mi 25. Mär 2020, 22:26
Folgender Vorschlag:
Speichere eine Kopie Deines Dokuments.
Guter Vorschlag, danke für deine Mühen, die Datei befindet sich im Anhang. Dort findest du die Sub PunkteErsetzen
Dateianhänge
Replace.odt
(15.3 KiB) 2-mal heruntergeladen

craig
Beiträge: 184
Registriert: Sa 14. Mai 2016, 12:36

Re: replaceAll - Punkte durch Absätze ersetzen

Beitrag von craig » Do 26. Mär 2020, 15:55

Hallo Mario,

hIer das Ergebnis aus LibreOffice:
This is the first sentenceU+002e This is the secondU+002e And this the thirdU+002e
There‘s a fourth, too? No, there isn‘t! But don‘t careU+002e


Alle Punkte = U+002e

Damit kann mein Verdacht eindeutig ausgeschlossen werden.

Dein Makro läuft bei mir sowohl unter AOO 4.1.6, als auch unter LibO 6.3.4.2 (x64) einwandfrei.
Warum bei Dir nur der erste Punkt ersetzt wird weiß ich nicht.
-----------------------
Ein paar sonstige Hinweise:
Als ich Dein Makro aus der Basic-IDE heraus startete, wurde diese Fehlermeldung angestoßen.

Code: Alles auswählen

Msgbox("This macro only works with Writer documents.", 16, GetProductName())
Ursache:
Mittels "StarDesktop.ActiveFrame.Controller.Model" erfaßt man das gerade vordergründig Frame.
Dieses ist aber nicht Writer, sondern die Basic-IDE.
Entweder man nutzt diesen Code:

Code: Alles auswählen

oDocument = ThisComponent
oder man startet ausschließlich aus dem Dokument heraus, dann ist eine Prüfung sDocType = GetDocumentType(oDocument)aus meiner Sicht überflüssig:

Code: Alles auswählen

oDocument = StarDesktop.ActiveFrame.Controller.Model
---------------------------
Du hast Dir in Deinem Makro die Mühe gemacht alle Satztrenner "\. |! |\? " zuerfassen und zu ersetzen.
Ich weiß nicht ob die die Möglichkeit in Betracht gezogen hast mit dem ViewCursor oder TextCursor zuarbeiten.
http://www.dannenhoefer.de/faqstarbasic ... tml#cursor
http://www.dannenhoefer.de/faqstarbasic ... ml#cursor2
  • Der ViewCursor ist der Cursor den man in einem Writerdokument blinkend sieht.
    Dieser ist nur einmalig vorhanden!
  • Der/ die TextCursor operieren unsichtbar und man kann hiervor mehrere anlegen.
    Des Weiteren biete der TextCursor die Möglichkeit ein Satzende zu erkennen:

    Code: Alles auswählen

    oDoc = ThisComponent
    oTC1=oDoc.text.createtextcursor()
    ' Code Inspektionstools:
    'mri oTC1
    'xray oTC1
    ' Ende des Satzes
    oTC1.gotoEndOfSentence
    ' nächster Satz
    oTC1.gotoNextSentence
    ' vorheriger Satz
    oTC1.gotoPreviousSentence
    ' Anfang des Satzes
    oTC1.gotoStartOfSentence
Auszug MRI-Code-Inspektionstool
Auszug MRI-Code-Inspektionstool
Macro some TextCursor Methods.JPG (95.82 KiB) 130 mal betrachtet
-----------------------

Leider kann ich Dir keine konkretere Hilfe bieten, weil der Fehler bei mir nicht vorhanden ist.

Auch diese Variante funktioniert einwandfrei:

Code: Alles auswählen

	ReplaceStrings(oContainer, "\. |! |\? ", ".\n")
'	ReplaceStrings(oContainer,  "\. |! |\? ", "&" & Chr$(13) & Chr$(10))
Gruß

Craig

Nie die Sicherungskopie vergessen!

═══════════════════════════════════════
WIN 10 Pro 64-Bit • AOO 4.1.6 • LO 6.3.2.2 (x64)

Mario_Bastler
Beiträge: 4
Registriert: Mi 25. Mär 2020, 17:34

Re: replaceAll - Punkte durch Absätze ersetzen

Beitrag von Mario_Bastler » Do 26. Mär 2020, 17:08

Hallo Craig,

vielen Dank für deine umfangreiche Hilfe. Ich habe das Makro nun an einem anderen Rechner mit einer neueren LibreOffice-Version getestet und da funktioniert es. Das Problem scheint also tatsächlich mit der Version zu tun zu haben. Für mich hat sich dadurch das Problem erledigt.

Antworten