💚 BITTE helfen Sie uns das LibreOffice Forum zu erhalten! 💚
Helfen Sie uns bitte noch HEUTE!

❤️ DANKE >><< DANKE ❤️

Vielen Dank für Ihre SPENDE.

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Substring längste/kürzeste Worte auslesen

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
RobertG
Beiträge: 2756
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Substring längste/kürzeste Worte auslesen

Beitrag von RobertG » So 9. Jun 2024, 15:31

Warum machst Du da eine SQL-Abfrage innerhalb eines Makros? Ich dachte, dass Dein Formular auf einer Abfrage beruht, die ganz normal im Abfrageordner liegt.

Was ist aktuell falsch? Du hast oConnection nicht beschrieben. Wenn Du ein Makro mit (oEvent AS OBJECT) beginnst, so kannst Du daraus in der Regel auf das Formular beziehen und die Verbindung erstellen. Du kannst natürlich auch mit

Code: Alles auswählen

oDatasource = thisDatabaseDocument.CurrentController
oConnection = oDatasource.getConnection("","")
die Verbindung erstellen.
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Dru Drury
Beiträge: 13
Registriert: Fr 7. Okt 2016, 02:08

Re: Substring längste/kürzeste Worte auslesen

Beitrag von Dru Drury » Mo 10. Jun 2024, 01:39

Hallo Robert,

nein, also da liegt ein Mißverständnis vor, die Tabelle wird nicht via vorgeschalteter Abfrage über ein Formular befüllt, sondern direkt ohne Umwege (Formular ->Tabelle). Wahrscheinlich gründet das Mißverständnis auf meinem Eingangspost, in dem ich erwähnte, daß einige der gewünschten String-Auslesungen mir in SQL im Prinzip zugänglich sind, das bezog sich aber auf die Formulierung, nicht auf die Implementierung. Anyway, ich formuliere die Fragestellung/Aufgabe nochmal neu, so daß das für alle Mitlesende besser nachvollziehbar wird.

Die Datenbank (HSQLDB) wird genutzt, um einzelne physische Objekte in ihren Eigenschaften zu beschreiben.

Hierfür besteht eine TABELLE_1, deren Datensätze jeweils ein Objekt erfassen. Diese TABELLE_1 wird über ein FORMULAR_1 direkt befüllt. Einzelne Felder dieser TABELLE_1 speichern INTEGER-Werte aus Listenfeldern ab, die ihrerseits auf anderen Tabellen beruhen. Der Einfachheit halber kann man von nur einer solchen Tabelle ausgehen, hier als TABELLE_2 bezeichnet.




TABELLE_1 umfaßt die für die Fragestellung relevanten Felder:


(Nummer) Name (Datentyp, Eingabeweg)


(1) ID (Integer, Autofeld)
(2) Person (Integer, via Listenfeld)
(3) Bezeichnung (Varchar, direkt)
(4) Jahreszahl (Varchar, direkt)
(5) String (Varchar, zu befüllen via Makro und/oder SQL)

TABELLE_2 dient als Quelle für das Listenfeld "Person" (2) und umfaßt die Felder
"ID_person" (Integer & key, wird abgespeichert in TABELLE_1) und ein Feld
"Name" (Varchar, wird im FORMULAR_1 angezeigt)


Die Aufgaben (A-C) betreffen das Feld (5) dieser TABELLE_1

Dieses Feld (5) soll einen String aufnehmen, der zusammengesetzt wird aus

(A) einer beschränkten Auslesung des Textes im Feld "Bezeichnung" (3): -> die zwei längsten Wörter: Dein Makro (gelöst, funktioniert, danke!)

(B) ergänzt um eine Auslesung der ersten X Zeichen von (4)

(C) ergänzt um eine Auslesung der aller Zeichen bis zum Auftreten eines Kommas im Feld "Name" der dem Listenfeld (2) zugrundliegenden TABELLE_2



Die Auslesung/Weitergabe der Daten in/an das Feld (5) soll mittels Button in FORMULAR_1 erfolgen, nachdem zuvor alle hierfür notwendigen Felder im FORMULAR_1 befüllt worden sind. Die Ausgabe/Weitergabe soll keine sofortige Speicherung zur Folge haben, es geht zunächst nur um das Befüllen des entsprechenden Feldes im FORMULAR_1, es soll weiter bearbeitbar bleiben und dann mit schließen des Datensatzes gespeichert werden (funktioniert so bereits in Deinem Makro).

Wie gesagt, ursprünglich bestand die Schwierigkeit darin, die zwei längsten Wörter eines Textfeldes auszulesen. Das war mir in SQL nicht möglich, während die anderen Aufgaben für mich in SQL machbar waren (mir ist klar, daß ich bei Umsetzung in SQL das Ausgabergebnis nur über eine Abfrage des gespeicherten Datensatzes und über eine 1:1 Relation mittels Abfrage/Hilfstabelle in Feld (5) der Tabelle1 bekommen hätte, Dein Makro ist aber offensichtlich deutlich effizienter, erst recht, wenn man es um die anderen zwei genannten Anforderungen erweitern könnte - ich habe in meinen letzten Posts versucht, derartige SQL-Abfragen in Dein Makro hineinzukriegen, bin aber offensichtlich mangels Kenntnis der Makro-Sprache gescheitert. Wenn man das also komplett als Makro lösen kann... Sehr gerne!)

Dank & Gruß ,
DruDrury

Benutzeravatar
karolus
Beiträge: 2236
Registriert: Fr 10. Dez 2010, 10:01

Re: Substring längste/kürzeste Worte auslesen

Beitrag von karolus » Mo 10. Jun 2024, 09:41

Hallo
Bei sql kann ich nicht mitreden, aber das extrahieren der n längsten »Wörter« ohne Satzzeichen aus einem Text (natürlich in python):

Code: Alles auswählen

import re

rex = re.compile(r'\W+')

def get_long_words(data, limit=3): 
    adata = sorted(rex.split(data), key=len, reverse=True)
    lim = min((limit, len(adata)))
    return adata[:lim]

def main():
    """
    nur zum Testen
    """
    data = ("55 Zeichen, davon 6 Leerzeichen, ergo 7 Worte, deren mittlere Länge bei knapp über 6 liegt,"
        " alles über SQL leicht zu ermitteln. Es steht damit also fest,"
        " daß wenigstens ein Wort über 6 Zeichen enthalten ist - das/die will ich."
        " Nur wie komm ich an das Ding/die Dinger ran? Mariannen4graben")
    print(f'{", ".join(get_long_words(data))}')
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

RobertG
Beiträge: 2756
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Substring längste/kürzeste Worte auslesen

Beitrag von RobertG » Mo 10. Jun 2024, 11:04

@DruDrury: Du brauchst doch für Deinen Code bei dem ausgeworfenen Fehler nur die Verbindung zur Datenbank herstellen. Und da Du das Makro aus einem Formular heraus aufrufst dachte ich, dass Du die Verbindung über die Verbindung des Formulars am schnellsten bekommen kannst.

@karolus: Das Extrahieren der Wörter ist ja geklärt. Inzwischen geht es um die weitere Einbindung.
Hinzu kommt, dass ein Python-Makro da überhaupt nicht hilfreich ist, da es erst einmal viele zusätzlich Kenntnisse erfordert, um so etwas überhaupt sinnvoll zum Laufen zu bekommen - vor allem, wenn bereits mit Basic-Makros in einer Datenbank gearbeitet wird.
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Benutzeravatar
karolus
Beiträge: 2236
Registriert: Fr 10. Dez 2010, 10:01

Re: Substring längste/kürzeste Worte auslesen

Beitrag von karolus » Mo 10. Jun 2024, 12:56

RobertG hat geschrieben:
Mo 10. Jun 2024, 11:04
@karolus: Das Extrahieren der Wörter ist ja geklärt. …
Ja…ist das so? Bist du sicher das deine 30 bis 50 Zeilen ineffizientes Basic alle Arten von Whitespace, Punktuation und ein knappes Dutzend verschiedener Quotezeichen erfasst?
was machst du falls sich die Anforderung ändert auf 3 oder 5 oder x längste|kürzeste Wörter?
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

RobertG
Beiträge: 2756
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Substring längste/kürzeste Worte auslesen

Beitrag von RobertG » Mo 10. Jun 2024, 13:12

@karolus,

beschreibe doch bitte, wie Du diesen Code, den Du da schreibst, so einbaust, dass er für DruDruy anschließend in Basic auslesbar und weiter verarbeitbar ist. Schimpf einfach nicht über Basic, sondern mach eine Beschreibung für Python in Zusammenhang mit LibreOffice, die auch allgemein nutzbar ist. Ich habe das für Basic mit dem Base Handbuch gemacht, weil zu dem Zeitpunkt, als ich mit dem Base-Handbuch angefangen habe, noch niemand an Python dachte und die Beschreibungen für Basic da waren.

Ich weiss gerade einmal, wie ich über Python einen SQL-Befehl ausführen und die Ergebnisse abrufen kann. Das ist für mich deutlich zu kompliziert und kommt zumindest im Bereich SQL um keinen Deut mit weniger Codezeilen aus als eben Basic.
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten