Seite 2 von 3

Re: Zeilenumbruch entfernen

Verfasst: Mo 4. Jun 2018, 20:57
von DavidG
Hallo Hans,

in meiner Anleitung habe ich Dir ein Bild des Menüs Extras → „Anpassen“ (Seite 5) hinterlegt.
Da ich eine neuere Version von LO verwende, kann es sein, dass das Fenster „Anpassen“ etwas anders aussieht.
Kann mich aber nicht mehr erinnern wie es in der Version 5.4.7 aussah.

Rufe bitte das Fenster auf und klicke gemäß Punkt 2 meiner Anleitung (Seite 5) auf das DropDown-Menü unter Kategorie.
Dort scrolle ganz nach unten.

Steht dort nichts in Bezug auf Makros?
Wenn nicht, mache nun einen Screenshot von dieser Ansicht (mit ausgeklapptem DropDown-Menü und
nach unten gescrollt) und lade ihn hoch, damit ich sehen kann was dort steht.

Aus dem Objektkatalog-Bild, welches Du hochgeladen hast, lese ich folgenden Pfad für das erforderliche Makro:
Entweder:
Meine Makros & Dialog\WriterMakros\Modul1\RegExSuchenErsetzen
ODER
Meine Makros\WriterMakros\Modul1\RegExSuchenErsetzen

Einer dieser Pfade müsstest Du eigentlich auch in der LO-Version im Anpassen-Fenster sehen.
Zumindest irgendetwas mit Makros, ggf. auch Basic.

Gruß
David

Re: Zeilenumbruch entfernen

Verfasst: Di 5. Jun 2018, 19:24
von anaxagoras
Hallo David,
bei mir ist keine Kategorie sondern Symbolleisten mit einem Dropdown Menü.
Makros habe ich gestern hineingeschrieben (oder wars Sonntag?)

Das einzige wo Makros steht unter Tastatur. Dann eben mit der Tastatur.

Gruß Hans

Re: Zeilenumbruch entfernen

Verfasst: Di 5. Jun 2018, 20:45
von DavidG
Hallo Hans,
Hans hat geschrieben:bei mir ist keine Kategorie sondern Symbolleisten mit einem Dropdown Menü.
Makros habe ich gestern hineingeschrieben (oder wars Sonntag?)
Du hast eine neue Symbolleiste namens "Makros" erstellt?
Wenn ja, dann sollte darunter in der Rubrik "Symbolleisteninhalt" das Fenster leer sein, oder?

Ich frage deshalb, weil es auch eine Makrossymbolleiste von LO gibt, in der schon Symbole und Funktionen enthalten sind.

Nun gehe ich mal davon aus, dass das Fenster leer ist. Dieses würde bedeuten,
dass Du per MENÜ Ansicht --> Symbolleisten eine neue Symbolleiste hast, die aktiviert werden kann.
Sie erscheint bei Aktievierung irgendwo oben rechts neben den Standardsymbolleisten, hat aber noch kein Symbol!

Wenn dies so ist, dann rufe Menü Extras --> Anpassen Register Symbolleisten auf.
Suche nochmals die von Dir erstellte "Makros" Leiste aus.
Jetzt klickst Du auf "Befehl hinzufügen".
Welches Menü dann erscheint, weiß ich auch nicht mehr.
Ich gehe aber davon aus, dass Du dort so etwas wie "LibreOffice Makros" findest.

---------------------------
Zum Bild Tastenkombination
In dem von Dir hochgeladenen Bild siehst Du in der Rubrik "Funktionen/Bereich" die Option "LibreOffice Makros", mit einem + davor.
Erweitere die Ansicht und Du solltest einen dieser Pfade finden:
Entweder:
Meine Makros & Dialog\WriterMakros\Modul1
ODER
Meine Makros\WriterMakros\Modul1

Markieren "Modul1", dann erscheint im Fenster rechts daneben der Makroname "RegExSuchenErsetzen" oder "SuchenErsetzen".
Diesen Eintrag ebenfalls markieren.
Jetzt sucht Du eine nicht besetzte Tastenkombination aus und markierst diese.
Dann auf den BUtton "Ändern" klicken, damit erscheint die gewählte Tastenkombination im Fenster "Funktionen/Tasten".
Nun mit OK bestätigen und die Tastenkombination ausprobieren, ob das Makro startet.

Gruß
David

Re: Zeilenumbruch entfernen

Verfasst: Mi 6. Jun 2018, 16:49
von anaxagoras
Hallo David,
Ich konnte unter Ansicht > Symbolleisten meinen Eintrag "Makros" finden und habe auch versucht ein Symbol zuzuweisen, habe aber im ersten Schritt nur geschafft die Schrift statt dem Symbol hinzukriegen. In einem zweiten Schritt habe ich den Weg zm Symbol gefunden, habs aber einmal so belassen (siehe hochgeladenes Bild) weil ich mich nicht entscheiden konnte welches Symbol, da brauche etwas ich Ruhe die ich jetzt nicht habe. Vielleicht probier ich es auch mit einer Tastenkombination. Auf alle Fälle funktioniert es.
Ich bin mit der Lösung sehr zufrieden, machmal machts zwar Leerzeichen weg wo eins hingehört, das füge ich dann einfach wieder ein.
Ich danke dir nochmals für die perfekte Hilfe.

Gruß Hans

Re: Zeilenumbruch entfernen

Verfasst: Mi 6. Jun 2018, 19:44
von DavidG
Hallo Hans,

es freut mich, dass es nun fast funktioniert. Habe gern geholfen.
Hans hat geschrieben:Ich bin mit der Lösung sehr zufrieden, machmal machts zwar Leerzeichen weg wo eins hingehört,
das füge ich dann einfach wieder ein
Wenn Du mir ein Beispiel nennst, unter welche Bedingungen ein
Leerzeichen zuviel ersetzt wird, kann ich das Makro noch anpassen.

Gruß
David

Re: Zeilenumbruch entfernen

Verfasst: Do 7. Jun 2018, 18:49
von anaxagoras
Hallo David,
Wenn Du mir ein Beispiel nennst, unter welche Bedingungen ein
Leerzeichen zuviel ersetzt wird, kann ich das Makro noch anpassen.
Ja das wäre natürlich perfekt wenn das auch behoben ist. Beim nächsten mal verwenden schicke ich dir am besten die Urdatei d.h. die der Scanner ausspuckt (rtf) und die berichtigte mit LO. Das ist die nächsten Tage, ich habe da eh noch was zu scannen.

Gruß Hans

Re: Zeilenumbruch entfernen

Verfasst: Di 12. Jun 2018, 17:00
von anaxagoras
Hallo David,
ich habe etwas eingescannt, da lade ich einmal die Wordpad Datei hoch die der Scanner ausgibt, und dann die Writer Datei nach dem Makro. Ich habe, um es dir leichter zu machen, jeweils das wort nachdem ein Leerzeichen eingefügt werden soll rot markiert.
Würde mich freuen wenn du das auch noch lösen kannst.

Gruß Hans

Re: Zeilenumbruch entfernen

Verfasst: Di 12. Jun 2018, 23:59
von DavidG
Hallo Hans,

hier der neue Code:

Code: Alles auswählen

REM  *****  BASIC  *****

Sub RegExSuchenErsetzen
Dim oDoc as Object
Dim oCC as Object
Dim oReplace as Object
Dim oSel as Object
 	
 	' Referenz auf aktuelles Dokument setzen
	oDoc =thiscomponent
		' Controller Referenz
		oCC=oDoc.getCurrentcontroller()
		
'			' OPTIONAL markierter Bereich
'			oSel=oDoc.getCurrentSelection

	' Text des Dokuments in Variable
	sStr=oDoc.getText().String  
	
	' Referanz des Suchen- und Ersetzen-Objektes
	 oReplace = oDoc.createSearchDescriptor()

' MRI Codeinspektor 
'mri oReplace  

REM .....................................................................................................
REM ABSATZMARKEN  ¶
REM Absätze per RegEx entfernen 
REM "- "  = Sucht Absatzmarken, mit vorangestelltem Bindestrich und einem Leerzeichen
REM Die Suchmaske (REM RegEx Expression) besteht aus 4 Operationen:
REM RegEx Expression = \-\s+$
REM 1.1)	maskierter Bindestrich = \-
REM 1.2)	maskierter Leerzeichen (Space) = \s
REM 1.3)	UND Operator = +
REM 1.4)	Absatzemarke (¶) = $

REM "" = Ersetzung durch NICHTS

REM Es werden die Bindestriche und Leerzeichen (keine Whitespaces) vor den Absatzmarken entfernt
	With oReplace
		.SearchAll
		.SearchRegularExpression = True
		.SearchString ="\-\s+$"
		.ReplaceString = ""
	End With
	
	odoc.replaceAll(oReplace)
REM	oSel.replaceAll(oReplace)

REM .....................................................................................................
REM MANUELLE ZEILENUMBRÜCHE ⮠
REM ZEILENUMBRÜCHE per RegEx entfernen 
REM "- "  = Sucht ZEILENUMBRÜCHE, mit vorangestelltem Bindestrich und einem Leerzeichen
REM Die Suchmaske (REM RegEx Expression) besteht aus 4 Operationen:
REM RegEx Expression = \-\s+\n
REM 1.1)	maskierter Bindestrich = \-
REM 1.2)	maskierter Leerzeichen (Space) = \s
REM 1.3)	UND Operator = +
REM 1.4)	Absatzemarke (⮠ ) = \n

REM "" = Ersetzung durch NICHTS

REM Es werden die Bindestriche und Leerzeichen (keine Whitespaces) vor den Zeilenumbrüche entfernt

	With oReplace
		.SearchAll
		.SearchRegularExpression = True
		.SearchString ="\-\s+\n"
		'.SearchString = "[- ]^$"
		.ReplaceString = ""
	End With
	
	odoc.replaceAll(oReplace)
REM	oSel.replaceAll(oReplace)

REM .....................................................................................................
REM ABSATZMARKEN  ¶
REM Leere Absätze per RegEx entfernen 
REM "^$"  = Suche leeren Absatz
REM "" = Ersetze mit NICHTS
	With oReplace
		.SearchAll
		.SearchRegularExpression = True
		.SearchString = "^$"
		.ReplaceString = ""
	End With
	
	odoc.replaceAll(oReplace)
REM	oSel.replaceAll(oReplace)

REM .....................................................................................................
REM ABSATZMARKEN  ¶
REM Ersetzt Absatzmarken am Ende einer Textzeile per RegEx
REM "$"  = Suche Absatzmarken
REM "" = Ersetze mit "" = NICHTS
	With oReplace
		.SearchAll
		.SearchRegularExpression = True
		.SearchString = "$"
		.ReplaceString = ""
	End With
	
	odoc.replaceAll(oReplace)
REM	oSel.replaceAll(oReplace)

REM .....................................................................................................
REM MANUELLE ZEILENUMBRÜCHE ⮠
REM Manuelle Zeilenumbrüche per RegEx entfernen 
REM "\n"  = Suche manuelle Zeilenumbrüche
REM "" = Ersetze mit "" = NICHTS
	With oReplace
		.SearchAll
		.SearchRegularExpression = True
		.SearchString = "\n"
		.ReplaceString = ""
	End With
	
	odoc.replaceAll(oReplace)
REM	oSel.replaceAll(oReplace)


End Sub
Ersetze den alten Code in Deiner Bibliothek durch diesen Code.
Einfach diesen Code per Klick auf "Alles auswählen" markieren und per [STRG]+[c] kopieren.
Dann in die Basic-IDE wechseln, Deinen alten Code mit [STRG]+[a] komplett markieren und
den neuen Code aus der Zwischenablage per [STRG]+[v] einfügen.

Habe ich bei beiden Texten angewendet.
Es kann aber immer wieder zu Situationen kommen, die das Makro nicht abdeckt.
Naja, Du weißt ja wo Du mich findest ;)
Die Funktionsweise des Makros habe ich im Code kommentiert.

Eine Frage habe ich:
Warum speicherst Du den Scan erst als rtf-Datei?
Du kannst doch direkt aus LO scannen!
MENÜ Einfügen → Medien → Scannen → Anfordern
Dies funktioniert allerdings nur in eine LO-32-Bit Version.
Wenn Du eine 64-Bit Version hast, dann geht dieses erst ab LibreOffice 6.1 64-Bit, wird vermutlich ab Herbst verfügbar sein.

Viel Vergnügen beim Test... :D

Gruß

David

Re: Zeilenumbruch entfernen

Verfasst: Mi 13. Jun 2018, 11:07
von Rocko
anaxagoras hat geschrieben:
Di 12. Jun 2018, 17:00
ich habe etwas eingescannt, da lade ich einmal die Wordpad Datei hoch die der Scanner ausgibt
Wenn du auf Teufel komm raus unbedingt mit Makros arbeiten möchtest, hoffe ich für dich auf ein gutes Ergebnis. Vielleicht hilft dir aber auch zusätzlich bei der Bewältigung deines Problems die Abfolge der einzelnen Schritte mit Hilfe von Suchen und Ersetzen.

Re: Zeilenumbruch entfernen

Verfasst: Mi 13. Jun 2018, 14:08
von DavidG
@Rocko
Ob man nun "Suchen und Erstzen" mehrfach manuell aufruft oder dieses per Makro erledigt,
ist doch fast das Gleiche. Nur mit der Ausnahme, dass ein Makro zeitsparend arbeitet.

Der Vorschlag mit dem Makro kam von mir, denn wie Du weißt bietet das Makro die
Möglichkeit mehrere Einzelschritt in einem Durchgang abzuarbeiten.
Rocko hat geschrieben: Zunächst habe ich den offensichtlich leeren Absatz einfach gelöscht.

Davon kann es mehr, als nur einen geben. Auch innerhalb des Textstreams.
Rocko hat geschrieben: Abschließend stören noch die die vorhandenen Trennzeichen mit einem folgenden Leerzeichen.

Hierbei werden aber auch die Ergänzungsstriche entfernt, siehe:
Gurgel- und Mundspülmittel
wird zu
Gurgelund Mundspülmittel

-------------------------------------------------------------------------------------------------------
Wenn man alle Bedingungen manuell abarbeiten möchte, dann bedarf es fünf Schritte,
um in allen Mustertexten (Text1 und Text2) von Hans zu einem korrekten Ergebnis zu kommen.
Wer sich sehr gut mit RegEx auskennt, kann ggf. den ein oder anderen Schritt verketten, um
statt mit fünf Schritten vielleicht mit drei Schritten auszukommen.
Dieses wird für einen Laien aber sehr unübersichtlich.

Manuelles "Suchen und Ersetzen" per RegEx:
Schritt 1
Es werden die Bindestriche und Leerzeichen (keine Whitespaces) vor den Absatzmarken entfernt
Suche:
\-\s+$
Ersetzen durch Nichts
""
Schritt 2
Es werden die Bindestriche und Leerzeichen (keine Whitespaces) vor den Zeilenumbrüchen entfernt
Suche:
\-\s+\n
Ersetzen durch Nichts
""
Schritt 3
Leere Absätze entfernen
Suche:
^$
Ersetzen durch Nichts
""
Schritt 4
Ersetzt Absatzmarken am Ende einer Textzeile
Suche:
$
Ersetzen durch Nichts
""

Schritt 5
Ersetzt manuelle Zeilenumbrüche
Suche:
\n
Ersetzen durch Nichts
""

Nichts anderes macht das Makro in einem Rutsch.

Gruß
David