Seite 1 von 1

Suchen / Ersetzen mit RegExp mit \n funktioniert nicht

Verfasst: Fr 25. Nov 2016, 13:40
von Maerad
Hallo,

hoffe Ihr könnt mir weiterhelfen, habe bereits ausführlich dazu gegoogelt :/

Habe eine Calcdatei eines Lieferanten in der auch eine Spalte mit dem Verkaufstext des Artikels vorhanden ist.
Zwar ist der Text mit Umbrüchen, aber unser ERP Programm erfordert, dass ich vor dem Einlesen in die Software die Zeichenanzahl auf ca. 70 Zeichen begrenze pro Zeile.

Dies habe ich versucht via suchen + ersetzen mit regulären Ausdrücken:

Suche: "(.{40,60}) " (Ohne die " natürlich, damit wir zwischen 40-60 Zeichen das Leerzeichen gesucht, weil Umbruch im Wort doof ist)
Ersetze durch: $1\n

Reguläre Ausdrücke ist natürlich aktiv.

Das Ganze funktioniert von der Suche her, aber beim Ersetzen wird \n eingefügt und eben kein Absatz / Zeilenumbruch.

Also z.B.
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam

Wird zu
Lorem ipsum dolor sit amet, consetetur\n sadipscing elitr, sed diam

Habe auch mal Testweise ohne Rexp usw. versucht und nur Zeichen ersetzt (immer "ersetzt mit \n"), aber nichts hat funktioniert ... In der Hilfe habe ich auch keine weiteren Hinweise gefunden und auch im Internet steht überall "suche nach zeichen, ersetzte durch \n"

Vielleicht ja auch eine Einstellungssache... jemand eine Idee was das sein könnte?

Re: Suchen / Ersetzen mit RegExp mit \n funktioniert nicht

Verfasst: Fr 25. Nov 2016, 22:16
von craig
Hallo,

genau das Problem hatte ich auch. Allerdings im Writer.
Es sollte nach jedem x-ten Wort ein Zeilenumbruch eingefügt werden.
Dann habe ich im O´Reilly Buch zu RegEx gelesen, dass RegEx zwar zählen kann,
aber rechnen ist nicht möglich. Das Einzige wäre eine Verkettung von Ausdrücke,
mit denen man ggf. sein Ziel trotzdem erreichen kann.
Ist mir jedoch nicht gelungen.
Also habe ich mir ein Makro geschrieben, dass keine Wünsche mehr offen lies.

Nun zu Deinem RegEx Problem
Der Punkt steht nicht für ein Leerzeichen, sondern für jedes Zeichen, außer siehe hier:
LO RegEx

Daraus folgt, dass Dein Ausdruck in Writer ein Ergebnis wie im Bild zu sehen ist liefert.
Es werden Leerzeichen und Buchstaben gezählt und mitten im Wort eine Absatzmarke eingefügt.

Bei meinen Recherchen zu diesem Thema bin ich noch über eine AOO-Seite gestolpert,
in der geschrieben stand, dass Calc bei der Interpretation der Reg-Ausdrücke Probleme
mit einigen Unicode-Zeichen hat.
Ob dies allerdings noch aktuell ist und ob die Aussage auch auf LO zutrifft kann ich nicht sagen.
Allerdings funktionierte die im Bild zu sehende “Lösung“ nicht in LO-Calc.

Beide Ausdrücke ohne Leerzeichen eingeben!
Suchen: (.{40,60})
Ersetzen: &\n
LO RegEx Absatzmarke.JPG
LO RegEx Absatzmarke.JPG (37.91 KiB) 2434 mal betrachtet
Für den Writer gibt es noch dieses Tool:
AltSearch
----------------------------------------------------------------------------------
In der im Anhang befindlichen Datei habe ich in eine Zelle einen Beispieltext geschrieben. Darunter befindet
sich ein Button, mit dem ein Makro gestartet werden kann, um eine Texttrennung vorzunehmen.
Im Augenblick funktioniert das Makro nur für eine, die jeweils selektierte Zelle mit Inhalt.
Kann aber mit ein wenig Aufwand erweitert werden, um auf mehrere Zellen zu zugreifen.
Array Wortzähler Zeilenumbruch.ods
(12.41 KiB) 126-mal heruntergeladen
Versuch macht kluuch. :D

Gruß

Craig

Re: Suchen / Ersetzen mit RegExp mit \n funktioniert nicht

Verfasst: Mo 28. Nov 2016, 14:47
von Maerad
craig hat geschrieben: In der im Anhang befindlichen Datei habe ich in eine Zelle einen Beispieltext geschrieben. Darunter befindet
sich ein Button, mit dem ein Makro gestartet werden kann, um eine Texttrennung vorzunehmen.
Im Augenblick funktioniert das Makro nur für eine, die jeweils selektierte Zelle mit Inhalt.
Kann aber mit ein wenig Aufwand erweitert werden, um auf mehrere Zellen zu zugreifen.
Array Wortzähler Zeilenumbruch.ods
Versuch macht kluuch. :D
Hallo!

Vielen Dank für deine Rückmeldung und die Arbeit mit dem Macro - hab es probiert und leider hat es aber nicht geklappt - zumindest nicht bei meinem 30-Minuten Probelauf :)

Habe mir vorerst damit beholfen, dass ich nach (.{40,60}) such und ersetze mit $1MACHABSATZ
Dann in CSV exportiert und mit Notepad++ MACHABSATZ geändert in " \n". Das ist zwar nicht schön, geht aber trotzdem :)

Wäre die Sache nicht zeitlich so problematisch, hätte ich gerne deinen Ansatz weiterverfolgt, da dies sicherlich bald wieder auftaucht ... aber Chef braucht ja wie immer alles am besten schon gestern.

Der war auch recht erstaunt, dass man nicht einfach mit 2 Klicks die Datei vom Lieferanten bei uns einbauen kann :D

Re: Suchen / Ersetzen mit RegExp mit \n funktioniert nicht

Verfasst: Mo 28. Nov 2016, 15:32
von craig
Hallo,
Vielen Dank für deine Rückmeldung und die Arbeit mit dem Macro - hab es probiert und leider hat es aber nicht geklappt - zumindest nicht bei meinem 30-Minuten Probelauf
Warum funktioniert es nicht?
Lag es ggf. an den Sicherheitseinstellungen für die Makroausführung?
Menü Extras --> Optionen --> LibreOffice --> Sicherheit
Option Makrosicherheit auf MITTEL stellen.
Dann Datei öffnen und die dann folgende Abfrage ob Makro ausgeführt werden soll mit "Makros aktivieren" beantworten.

Zweitens kann es daran liegen, dass der Button im Dokument sich im Entwurfsmodus befindet.
Erkennt man daran das er beim Anklicken verschiebbar ist.
Dann wie folgt einschalten:
Menü Ansicht --> Symbolleisten --> Formular-Entwurf
In der sich öffnenden Symbolleiste befindet sich links ein Pfeil und rechts daneben
das Symbol mit dem man den Entwurfsmodus ein-/ausschalten kann.
Damit wird der Button aktiviert und das Makro kann ausgeführt werden.
Zuvor den Cursor aber in die Zelle mit dem Text stellen!

Gruß

Craig

Re: Suchen / Ersetzen mit RegExp mit \n funktioniert nicht

Verfasst: Mi 30. Nov 2016, 23:46
von Wanderer
Maerad hat geschrieben: Habe mir vorerst damit beholfen, dass ich nach (.{40,60}) such und ersetze mit $1MACHABSATZ
Dann in CSV exportiert und mit Notepad++ MACHABSATZ geändert in " \n". Das ist zwar nicht schön, geht aber trotzdem :)

Wäre die Sache nicht zeitlich so problematisch, hätte ich gerne deinen Ansatz weiterverfolgt, da dies sicherlich bald wieder auftaucht ...
Hallo,
den Umweg über Notepad++ kannst Du Dir sparen:
Du hast es ja schon geschafft eine eindeutige Marke einzufügen. An dieser Stelle kannst Du mit WECHSELN weiterarbeiten,
wenn Du eine zusätzliche Zelle "opferst". Zelle musst Du natürlich anpassen.

Code: Alles auswählen

=WECHSELN(Zelle;"MACHABSATZ";ZEICHEN(10))
Vgl.: http://libreoffice-forum.de/viewtopic.php?f=6&t=16999