Text zwischen 2 Markern Formatieren

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Benutzeravatar
Nightskull
**
Beiträge: 25
Registriert: Mo, 22.01.2024 07:07

Text zwischen 2 Markern Formatieren

Beitrag von Nightskull »

Guten Morgen Forum.
Zunächst möchte ich mich vorstellen. Mein Name ist Michael habe PC Knntnisse soweit das ich Server aufsetzen kann, oder mit der Verwaltung von Synology NAS Systemen.
Leider ist meine Programmierkenntnisse sehr eingeschränkt. In früheren Jahren konnte ich etwas Basic Programmieren, aber schon lange her.

Folgendes Erbe musste ich antreten. Ein Bekannter macht mit einer Apache Xampp Datenbank aus 2007 Historische Auktionen. Diese Daten werden ab und zu überarbeitet und neu Kategorien angelegt. Da ein Kolege,der ihm diese Daten in eine katalog.txt exportiert hat, leider verstorben ist, versuche ich mich nun daran.

Mein Problem ist folgendes:

In der exportierten Datei sind die Kategorien mit dem Anfangsmarker und Endmarker versehen (#KAT# #kat#), analog dazu die Überschrift mit (#TI# #ti#), der eigentliche Text mit (#TXT #txt#)
und dazwischen noch der Preis (#P# #p#)

Beispiel:

#KAT#VARIA; GEMÄLDE u. GRAPHIKEN#kat#
#TI#0 2 Radierungen von A. Lancon - André al. Auguste Lancon 1836 - 1885#ti#
#TXT#je eine Szene aus dem Deutsch-französischen Krieg 1870-71 darstellend: 1 x
Reiterpatrouille in Stonne bei Sedan am 29. August 1870; 1 x ratsende
franzöische Kolonne auf der Route d`Amagne am 26. August 1870; je neuzeitlich
ger. mit Passepartout u. Glas, 35 x 30 cm - qualitätvolle Graphiken (62/3/119) [1-2] alte Originalgraphiken - Rahmen leicht bestoßen #P#EUR20,-#p##txt#

Formatierungen:

Kategorie: Schriftart Arial 9 Fett
Überschrift: Arial 7 Fett
Text: Arial 7
Preis : Arial 7 Fett
Auktionsnummer: Arial 6


Ergebnis sollte dann folgendes ergeben:

VARIA; GEMÄLDE u. GRAPHIKEN
1 2 Radierungen von A. Lancon - André al. Auguste Lancon 1836 - 1885
je eine Szene aus dem Deutsch-französischen Krieg 1870-71 darstellend: 1 x Reiterpatrouille in Stonne bei Sedan am 29. August 1870; 1 x ratsende franzöische Kolonne auf der Route d`Amagne am 26. August 1870; je neuzeitlich ger. mit Passepartout u. Glas, 35 x 30 cm - qualitätvolle Graphiken [1-2] alte Originalgraphiken - Rahmen leicht bestoßen
[62/3/119] EUR 20,-

Mein erstes Macro zum entfernen der Marker lautet:

Code: Alles auswählen

sub EinheitenErsetzen
dim myDoc as object, mySuche as Object
'oFunctionAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )
myDoc = thisComponent
mySuche=myDoc.createReplaceDescriptor()
With mySuche
.SearchRegularExpression = True
.setSearchString("#KAT#")
.setReplaceString("")
end With
myDoc.replaceAll(mySuche)

end sub
Das ist alles was ich zur Zeit mir erarbeitet habe. diesen Code kann ich als Macro einbinden und auch ausführen.
Diese Macro kann ich auch umschreiben für die Überschrift, den Text usw.
Aber leider weis ist nicht wie ich mit Formatierung im Code arbeiten kann.

Vorab vielen dank für eure Hilfe.
Gruß
Michael
Gruß
Michael
Mondblatt24
*******
Beiträge: 1144
Registriert: So, 14.05.2017 16:11

Re: Text zwischen 2 Markern Formatieren

Beitrag von Mondblatt24 »

https://www.openoffice-forum.de/viewtop ... 84#p163584

@ Nightskull,
Siehe Allgemeine Hinweise zu Forumsbenutzung

Unterpunkt: Crossposting nicht erwünscht, aber toleriert
Win 11 (x64) ▪ 24.2.2.2 (x64) ▪ AOO Portable 4.1.15
Wurde die Frage zutreffend beantwortet bitte den Betreff der Eingangsfrage mit [GELÖST] ergänzen. Beschreibung
Hiker
******
Beiträge: 591
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

Re: Text zwischen 2 Markern Formatieren

Beitrag von Hiker »

Nightskull hat geschrieben: Fr, 26.01.2024 07:14 ... Apache Xampp Datenbank ...
D.h. da gibt es eine MySQL-Datenbank?

Dann würde ich eher versuchen diese mit Base zu verbinden ( s. Handbuch LibreOffice Base ) und die Daten direkt per SQL-Abfrage zu erzeugen. Das Ergebnis in eine Calc-Tabelle zu übernehmen ist dann trivial...

Wenn Du "nur" versuchst den exportierten Text "aufzuhübschen", könnte man einen entsprechenden Report für die Datenbank erzeugen.
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
Benutzeravatar
Nightskull
**
Beiträge: 25
Registriert: Mo, 22.01.2024 07:07

Re: Text zwischen 2 Markern Formatieren

Beitrag von Nightskull »

Mondblatt24 hat geschrieben: Fr, 26.01.2024 07:36 https://www.openoffice-forum.de/viewtop ... 84#p163584

@ Nightskull,
Siehe Allgemeine Hinweise zu Forumsbenutzung

Unterpunkt: Crossposting nicht erwünscht, aber toleriert
Sorry @Mondblatt24, ich wusste nicht das diese Forums zusammen gehören.
Ich hoffe das dies mir verziehen wird. War keine böse Absicht dahinter, wegen dem Crossposting.
Gruß
Michael
Benutzeravatar
Nightskull
**
Beiträge: 25
Registriert: Mo, 22.01.2024 07:07

Re: Text zwischen 2 Markern Formatieren

Beitrag von Nightskull »

Hiker hat geschrieben: Fr, 26.01.2024 14:22
Nightskull hat geschrieben: Fr, 26.01.2024 07:14 ... Apache Xampp Datenbank ...
D.h. da gibt es eine MySQL-Datenbank?

Dann würde ich eher versuchen diese mit Base zu verbinden ( s. Handbuch LibreOffice Base ) und die Daten direkt per SQL-Abfrage zu erzeugen. Das Ergebnis in eine Calc-Tabelle zu übernehmen ist dann trivial...

Wenn Du "nur" versuchst den exportierten Text "aufzuhübschen", könnte man einen entsprechenden Report für die Datenbank erzeugen.
Aber den Weg über Calc-Tabelle bringt mir leider nichts, da der importierte Text später an eine Druckerei geschickt wird. Deshalb brauche ich ein funktionierendes Macro, das mir bei der Formatierung hilft.
Nochmals viele lieben Dank für euer Bemühen.
Gruß
Michael
Hiker
******
Beiträge: 591
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

Re: Text zwischen 2 Markern Formatieren

Beitrag von Hiker »

Nightskull hat geschrieben: Fr, 26.01.2024 19:51...

Aber den Weg über Calc-Tabelle bringt mir leider nichts, da der importierte Text später an eine Druckerei geschickt wird. Deshalb brauche ich ein funktionierendes Macro, das mir bei der Formatierung hilft.
...
Bisher hattest Du nicht erwähnt, was Du da eigentlich vorhast. Jetzt nehme ich an, dass Du einen Katalog erzeugen willst...

Das geht bei mir etwas komplizierter: Ein Datenbank-Report wird als xml gespeichert, das vom Layouter in InDesign importiert werden kann. InDesign erzeugtvdann das fertige PDF/X.

Für Deine Frage kannst Du reguläre Ausdrücke verwenden und nach

Code: Alles auswählen

#KAT#(.*)#kat#
suchen, dann mit $1 ersetzen und dabe das gewünschte Format setzen. Kann man als Macro aufzeichnen. Bedingung ist, dass das Suchmuster in einem Absatz steht. Das Suchmuster speichert den Text in der Klammer in $1, das Muster zur ersetzung liefert nur den gefundenen Text und eliminiert #KAT# und #kat# dadurch "nebenbei".
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
Benutzeravatar
Nightskull
**
Beiträge: 25
Registriert: Mo, 22.01.2024 07:07

Re: Text zwischen 2 Markern Formatieren

Beitrag von Nightskull »

Hallo @Hiker ,

deine Frage:
Jetzt nehme ich an, dass Du einen Katalog erzeugen willst...
Genau, ich habe den exportierten Text und muss ihn soweit formatieren, das man das an eine Druckerei schicken kann. Die sollen daraus ein Katalog erstellen und drucken.

Schon mal danke für dein Tipp. Das Problem ist, das ich von Macro und dem Coden keine Ahnung habe.

Wenn ich wüsste wie ich euch ein Abschnitt der exportierten Datei zukommen lassen könnte, und wie das Ergebnis aussehen soll, könnte ich das besser klarstellen.

Gibt es eventuell sowas?
Gruß Michael
Gruß
Michael
Benutzeravatar
Nightskull
**
Beiträge: 25
Registriert: Mo, 22.01.2024 07:07

Re: Text zwischen 2 Markern Formatieren

Beitrag von Nightskull »

Hallo @Hiker,

nochmal danke für den Code und den Tipp:
suchen, dann mit $1 ersetzen und dabe das gewünschte Format setzen. Kann man als Macro aufzeichnen. Bedingung ist, dass das Suchmuster in einem Absatz steht. Das Suchmuster speichert den Text in der Klammer in $1, das Muster zur ersetzung liefert nur den gefundenen Text und eliminiert #KAT# und #kat# dadurch "nebenbei".
Habe nicht gewusst, das der Macronrecorder so mächtig ist!!

Teil1 der Suche erledigt. werde nun das Macro mit dem Recorder für alle Marker, wie #TI# ..#ti# usw. erledigen und formatieren.
Gruß
Michael
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Text zwischen 2 Markern Formatieren

Beitrag von mikeleb »

Hallo,
ich würde die Idee mit der Calc-Datei verfolgen.
Aus der txt-Datei hättest du dann eine übersichtliche Liste und könntest diese dann (praktisch als Serienbrief) in Writer einfügen und mit den gewünschten Formatierungen versehen.
Hier mal ein Makro, das die txt-Datei öffnet,die Daten extrahiert und als auktion.ods abspeichert.

Code: Alles auswählen

Sub Main
	'Import txt-Datei
 	Dim args(1) as New com.sun.star.beans.PropertyValue
	args(0).Name= "FilterName"
	args(0).Value = "Text - txt - csv (StarCalc)"
	
	'ASCII-Codes 44 (Komma), 32 (Leerzeichen), 9 (Tabulator), 35 (#)
	'Mehrfachauswahl durch / trennen, z. B. 44/9
	sFeldSeparator="35"
	'ASCII-Codes 34 (doppelte Hochkomma), 39 (einfache Hochkomma)
	sTextBegrenzer="34"
	'Systemzeichensatz 0
	sZeichensatz="0"
	'erste einzulesende Zeile
	sErste="1"
	'Spaltenformat für jede Spalte festlegen
	'Spalte/Format/Spalte/Format/...
	'Formate: 1 Standard, 2 Text, 3 Datum (MTJ), 4 Datum (TMJ), 5 Datum (JMT), 9 nicht importieren, 10 US-englisch
	'nicht aufgeführte Spalten werden als Standard importiert
	sSpaltenFormate="1/9"
	args(1).Name="FilterOptions"
	args(1).Value =sFeldSeparator & "," & sTextBegrenzer & "," & sZeichensatz & "," & sErste & "," & sSpaltenformate
	'Dialog zur Dateiauswahl
	oFilepicker = createUnoService("com.sun.star.ui.dialogs.FilePicker")
	if oFilepicker.execute()=1 then
		sUrl = oFilepicker.getSelectedFiles(0)
		oDoc=StarDesktop.LoadComponentFromURL(sUrl(i), "_blank",0,args())
	end if
	oTab=oDoc.Sheets(0)
	zeilen= oTab.Columns(0).queryEmptyCells.rangeaddresses(0).startrow
	'Daten auslesen
	aDaten=oTab.getCellRangeByPosition(0,0,3,zeilen).getDataArray
	'neue Überschriften
	aNeu=Array(Array("Kategorie", "Überschrift", "Text", "Preis", "Auktionsnummer"))
	'Zeiger für neue Zeilen
	n=0
	
	for i=0 to zeilen-1
		sTag	=aDaten(i)(0)
		Select Case sTag
			Case "KAT" 'Kategorie erfassen
				sKat=aDaten(i)(1)
			Case "TI"	'Titel erfassen
				sTitel=aDaten(i)(1)
			Case "TXT"	'Text erfassen, Preis und Nummer auslesen
				aTxt1=split(aDaten(i)(1),"(")
				aTxt2=split(aTxt1(1),")")
				sNr="[" & aTxt2(0) & "]"
				sTxt=aTxt1(0) & trim(aTxt2(1))
				sPreis=aDaten(i)(3)
				'neue Zeile schreiben
				n=n+1
				ReDim Preserve aNeu(n)
				aNeu(n)=Array(sKat,sTitel, sTxt, sPreis, sNr)
		End Select
	next
	
	'ursprünglichen Inhalt löschen
	oTab.getCellRangeByPosition(0,0,6,zeilen).clearcontents(7)
	'neuen Inhalt schreiben
	oTab.getCellRangeByPosition(0,0,4,n).setDataArray(aNeu)
	oTab.Columns.optimalwidth=true	

	'neuer Dateiname
	aUrl=split(oDoc.Url,"/")
	aUrl(ubound(aUrl))="auktion.ods"
	oDoc.storeAsUrl(convertToUrl(join(aUrl,"/")),array())
	
End Sub	
Gruß,
mikeleb
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Text zwischen 2 Markern Formatieren

Beitrag von mikeleb »

Hallo,
ergänzend zu mienem letzten Psot: Man kann die Daten aus der txt-Datei natürlich auch per Makro in eine odt-Datei schrieben. Anbei mal eine Variante, bei der ich in der odt-Datei Absatz- und Zeichenvorlagen für die einzelnen Einträge angelegt habe und beim Einfügen der Texte diesen die entsprechende Vorlage zuweise.
Dateianhänge
vorlage_auktion.odt
(12.33 KiB) 41-mal heruntergeladen
Gruß,
mikeleb
Benutzeravatar
Nightskull
**
Beiträge: 25
Registriert: Mo, 22.01.2024 07:07

Re: Text zwischen 2 Markern Formatieren

Beitrag von Nightskull »

Hallo @mikeleb ,

ich bekomme eine Fehlermeldung meine Version OpenOffice wäre zu alt, ich sollte ein Update machen.

ich Habe die Version 4.1.14 auf dem iMac. Habe hier auch öfter mal Abstürzen mit OpenOffice 4.1.15. Deshalb nutze ich eine ältere Version.

Frage : wie kannst du Dateianhänge hier zum Donloaden posten?

Gruß
Michael
Gruß
Michael
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Text zwischen 2 Markern Formatieren

Beitrag von mikeleb »

Hallo,
da ich die Datei mit LibreOffice (7.3.7) erstellt habe, welches den odf-Standard in der Version 1.3 nutzt, kommt die Fehlermeldung zustande (AOO nutzt meines Wissens ODF 1.2). Anbei die (ungetestete) Datei mit Version 1.2
Unterhalb des Post-Bereiches findest du eine Reiter "Dateianhänge". Es werden allerding nicht alle Dateitypen unterstützt. Im Zweifelsfall benennst die die Datei um von z. B. auktion.txt in auktion.txt.ods
Dateianhänge
vorlage_auktion_odf1_2.odt
(12.29 KiB) 43-mal heruntergeladen
Gruß,
mikeleb
Benutzeravatar
Nightskull
**
Beiträge: 25
Registriert: Mo, 22.01.2024 07:07

Re: Text zwischen 2 Markern Formatieren

Beitrag von Nightskull »

Hallo mikeleb,

es kommt diese Fehler beim importieren mit dem Macro deiner Datei:
error_imoprt_katalog.png
error_imoprt_katalog.png (141.45 KiB) 1359 mal betrachtet
Gruß
Michael
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Text zwischen 2 Markern Formatieren

Beitrag von mikeleb »

Hallo,
Versuch mal getFiles anstelle von getSelectedFiles
Auch das ist ein Unterschied zwischen LO und AOO.
Gruß,
mikeleb
Benutzeravatar
Nightskull
**
Beiträge: 25
Registriert: Mo, 22.01.2024 07:07

Re: Text zwischen 2 Markern Formatieren

Beitrag von Nightskull »

Hallo, mikeleb,
jetzt hat es funktioniert mit der Änderung.

Nun habe ich eine Calc Tabelle mit zwei Spalten aber auch hier ist ja noch keine Formatierung.

Ich denke mit dem Macrorecorder und suchen ersetzen werde ich mich mal weiter beschäftigen.

Vielen Dank für deine Anregungen zunächst mal.
Gruß
Michael
Antworten