Text einlesen und verarbeiten

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

Moderator: Moderatoren

KriegerA
Beiträge: 5
Registriert: Di, 06.10.2009 15:21

Text einlesen und verarbeiten

Beitrag von KriegerA »

Hallo zusammen,

ich habe in unterschiedlichen Dokumenten Strings in der Form:

aaaaaa:bbbbb:ccccc:ddddd

Hierbei kann die Anzahl von Elementen, die durch einen Doppelpunkt getrennt werden variieren. Ziel ist es in einer Nachbearbeitung per Makro dafür zu sorgen, dass ausschliesslich die letzten beiden Elemente angezeigt werden. Es muss nicht nur ein String in dieser Form im Dokument auftreten, es können auch mehrere sein, die zeilenweise untereinander stehen.

Ich möchte also mit einem Makro genau den Punkt erwischen, wo die erste Zeile damit beginnt, diese einlesen, kleinhacken und als String wieder ausspucken, bei dem nur die letzten 2 Elemente getrennt von einem Doppelpunkt angezeigt werden. Danach möchte ich in die nächste Zeile, dort das gleiche machen und diesen Vorgang wiederholen bis es keinen String mehr mit dem angegebenen Muster gibt.

Nun habe ich überlegt, wie ich da am besten rankann. Ich kenne mich allerdings mit der ganzen Basic-Thematik noch nicht so gut aus, also...geht pfleglich mit mir um. *g*

Der erste Gedanke war, Textmarken in den Bereich einzurichten, in dem diese Strings vorkommen werden. Die nenne ich dann "START" und "ENDE" und kann damit in jedem Dokument die Strings an unterschiedlicher Stelle haben, aber dank der Marken immer korrekt finden.

Zur ersten Marke hinzuspringen war auch kein sonderlich großes Problem. Bisher sieht das so aus:

Code: Alles auswählen

dim oDocument, oBookmarks, oBookmark, oAnchor

oDocument = ThisComponent
oBookmarks = oDocument.getBookmarks
oBookmark = oBookmarks.getByName( "START" )
oAnchor = oBookmark.getAnchor
Jetzt bin ich bei der ersten Textmarke. Und nun? Ich habe gegoogled aber nichts gefunden, wie ich per Basic sagen kann "Lies den Inhalt der Zeile in eine Variable ein", damit ich den String isoliert in einer Variable habe und bearbeiten kann. Das Ergebnis würde ich dann vorerst an anderer Stelle wieder einfügen wollen und die originale Zeile löschen, damit am Anchor nun die nächste Zeile steht, die ich bearbeiten kann. Sind alle durch, würde ich dann die Ergebnisse von der temporären Stelle wieder an die originale Stelle kopieren wollen. Wenn das überhaupt geht, bzw. nicht irgendwas einfacherers gemacht werden kann.

Als ich nichts fand, habe ich nach alternativen Wegen gesucht und in der Variable "oDocument.text.string" den gesamten Text als einzelnen String gefunden. Dort könnte ich den Text wahrscheinlich auch bearbeiten, hätte aber nicht den Vorteil der Textmarken, sondern müsste eine Mustererkennung machen, die im Zweifel fehlschlägt, weil das Muster auch an Stellen erkannt werden könnte, wo es nicht verändert werden soll (Tippfehler, wenn jemand in einem Text zwei Wörter mit Doppelpunkt ohne Leerzeichen trennt bspw.). Bin ich mit dem String auf dem Holzweg, oder kann ich damit vielleicht sogar besser arbeiten, als mit der Idee oben?

Für Tipps und Hilfestellungen wäre ich unheimlich dankbar. :)
Frank88
Beiträge: 9
Registriert: Mi, 23.09.2009 21:23

Re: Text einlesen und verarbeiten

Beitrag von Frank88 »

Hallo,

ich bin kein Experte in OOo, habe also keine Ahnung, ob eventuell Deine Idee mit den Bookmarks (wie immer Du die auch einrichtest...) funktioniert.

Was immer geht, wenn man ungefähr die Position der gesuchten Zeile(n) im Dokument kennt, ist die "Line Input"-Methode: Zeilenweise bis kurz vor die Position Zeilen einlesen, dann eingelesene Zeilen mit "InStr" auf das Textmuster durchsuchen.

Das ganze sooft wiederholen, wie es vermutete Fundstellen gibt.

Bsp.: Zeilen mit den Strings in Zeile ca. 40...50 des Dokuments und Zeilen ca. 90-110
Datei öffnen, Zeilen 1-38 einlesen (dummy)
Zeilen 39-52 mit "InStr" auf enthaltenen Suchstring (":") prüfen und zerstückeln
Zeilen 53-88 einlesen (dummy)
Zeilen 89-112 mit "InStr" auf enthaltenen Suchstring (":") prüfen und zerstückeln
Datei schließen

Wie das konkret in Starbasic aussehen muß, müßte ich selber erst ausprobieren. Daß es so klappt, steht außer Frage.

Grüße, Frank
KriegerA
Beiträge: 5
Registriert: Di, 06.10.2009 15:21

Re: Text einlesen und verarbeiten

Beitrag von KriegerA »

Naja, ich verzweifel bisher schon daran, eine Funktion zu finden, mit der ich bspw. die Zeile in eine Variable eingelesen kriege. ;)

Die Textmarken setzt Du vorher im Text. Das ganze ist eine Dokumentenvorlage mit Datenfeldern. An einer Stelle werden besagte Strings eingemischt. Das können 1-n Strings in dieser Form sein. Wenn ich vor und hinter dem "Platzhalter"(also dem Datenfeld) die Bookmarks setze, schliessen diese beim fertigen Dokument genau diese Strings ein.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Text einlesen und verarbeiten

Beitrag von komma4 »

Willkommen im Forum.
KriegerA hat geschrieben:ich verzweifel bisher schon daran, eine Funktion zu finden
Für die Standards: kennst Du die StarBasic / OpenOffice.org Basic FAQ und Andrews Makro Dokument, das OOoWiki ist auch nicht schlecht.


KriegerA hat geschrieben:Die Textmarken setzt Du vorher im Text. Das ganze ist eine Dokumentenvorlage mit Datenfeldern. An einer Stelle werden besagte Strings eingemischt.
Was jetzt?
Daten(-zeilen) oder ein OOo-Textdokument/-Vorlage gefüllt?
Du sprichst von bookmarks und Zeilen - oder meinst Du Absätze als Trenner.

Welche OOo Version, welches Dateiformat hast Du?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Frank88
Beiträge: 9
Registriert: Mi, 23.09.2009 21:23

Re: Text einlesen und verarbeiten

Beitrag von Frank88 »

Hallo KriegerA,
Naja, ich verzweifel bisher schon daran, eine Funktion zu finden, mit der ich bspw. die Zeile in eine Variable eingelesen kriege.
Eben: 'Line Input'-Methode, siehe auch OOo-Hilfe
Besser (schlechter?) kann man's nicht erklären. Ich versuch's trotzdem: Liest immer eine Zeile der genannten Datei in die angegebene Variable und stellt den Zeiger auf die nächste Zeile. D.h., wenn ich die 4. Zeile einlesen will, muß ich die Methode 4x aufrufen, wobei die ersten 3x nur dazu dienen, zur 4. Zeile zu kommen. Der Inhalt der Variablen kann bei diesen 3x sofort wieder überschrieben werden, weil irrelevant (deshalb: Dummy)

Grüße, Frank
Antworten