🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Beliebige Textduplikate in EINER Zelle (!) löschen

CALC ist die Tabellenkalkulation, die Sie immer wollten.
Antworten
Dru Drury
Beiträge: 13
Registriert: Fr 7. Okt 2016, 02:08

Beliebige Textduplikate in EINER Zelle (!) löschen

Beitrag von Dru Drury » Fr 7. Okt 2016, 02:45

Liebe Leidensgenossen :oops:

Ich suche nach einer Lösung für das folgende Problem, das ich trotz diverses längerer online-Recherchen bislang nicht lösen konnte:

die (Text-)Felder einer Spalte meiner Tabelle enthalten eine Aufzählung von im Prinzip beliebigen Schlagworten (ihre Anzahl ist unbestimmt, liegt zwischen 5 und 15 Begriffen, sie sind aber jeweils eindeutig durch Semikolon oder Komma getrennt). Der Inhalt dieser Textfelder wird mir dummerweise geliefert, und ich kann keinerlei Einfluß auf das angelieferte Material nehmen. Nun kommt es vor, daß bestimmte Begriffe doppelt oder dreifach genannt werden (aber fein säuberlich mit Semikolon oder Komma getrennt). Gibt es die Möglichkeit in Libre Office, eine Zelle pauschal auf Dopplungen von beliebigen Zeichenketten zu durchsuchen und diese Dopplungen dann zu entfernen?

Beispiel:

Geliefert wird der folgende Zellinhalt:
"Bad ; Geschichte; Badezimmer ; Geschichte ; Bildband; Sanitärinstallation ; Geschichte ; Bildband"

wie man sieht, befindet sich hier 3 mal der Begriff "Geschichte" und 2 mal der Begriff "Bildband" in der Aufzählung.

Die unnötigen Dopplungen sollen eliminiert werden, alle Begriffe dürfen nur einmal aufgeführt werden.

Gibt es also in Libre Office eine Funktion bzw. eine Verschachtelung mehrerer, die dies unabhängig von den konkreten Begriffen in der Zelle ermöglicht? Also keine Individualbehandlung á la SUCHE "Geschichte" bzw. "Bildband" etc.... sondern eher etwas wie SUCHE "Text, der schon mal oder noch mal auftaucht".

Ich habe zwar im Prinzip kein Problem mit komplizierten oder stark verschachtelten Funktionen, finde aber bislang keinen Weg, das Problem auf halbwegs elegante Weise zu lösen. Der einzige Ansatz, den ich bislang finden konnte, stützt sich auf das Analysieren und Vergleichen der Zeichen zwischen zwei Trennzeichen (Semikolon oder Komma), nur wird diese Vorgehensweise bereits bei 3 bis 4 Begriffen zu exponentiellem Horror, was die dafür notwendige Funktion angeht....

Any idea anyone?

Danke für Eure Hilfe und Bemühungen!

Dru Drury

hylli
* LO-Experte *
Beiträge: 294
Registriert: Sa 19. Mär 2011, 19:00

Re: Beliebige Textduplikate in EINER Zelle (!) löschen

Beitrag von hylli » Fr 7. Okt 2016, 10:10

Womöglich eine Lösung mit Suchen&Ersetzen nach regulären Ausdrücken:
http://doc-tcpip.org/Unix/reg.exp.html
-> "Finden doppelter Worte im Text"

Evtl. das ganze in eine Formel verpackt.

Frag mich allerdings nicht wie!

Hylli
Geschäftlich: LibreOffice 7.2.x(als Citrix-Anwendung)
Privat: LibreOffice 7.3.x unter Linux Mint Cinnamon 64bit (jeweils aktuelle Version)

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Beliebige Textduplikate in EINER Zelle (!) löschen

Beitrag von F3K Total » Fr 7. Okt 2016, 15:59

Moin,
ich würde es mit einer Benutzerdefinierten Funktion, wie folgt, machen:

Code: Alles auswählen

function F_DISTINCT_TEXT(sCellString)
    Dim aNewData(0) as string
    nCounter = 0
    aData = split(sCellString,"; ")'Trennen an Semikolon, gefolgt von einem Leerzeichen
    for i = 0 to uBound(adata)
        for k = i + 1 to ubound (aData)
            if adata(i) = adata (k) then
                aData(k) = "" 'Doppelte löschen
            endif
        next k
        if adata(i) <> "" then  
            redim preserve aNewData(nCounter)
            aNewData(nCounter) = adata(i)
            nCounter = nCounter + 1
        endif
    next i
    F_DISTINCT_TEXT = Join(aNewData,"; ")'Zusammenfügen mit Semikolon, gefolgt von einem Leerzeichen
End function
Wenn du nun in Spalte A deine Texte mit doppelten Worten hast, sauber getrennt, durch ein Semikolon, gefolgt von einem Leerzeichen, sagen wir den ersten Text in Zelle A2, schreibst Du in die Zelle B2

Code: Alles auswählen

=F_DISTINCT_TEXT(A2)
Schwubs steht in B2: Bad; Geschichte; Badezimmer; Bildband; Sanitärinstallation
Die Funktion kannst Du nun herunterziehen.
Beispiel anbei.
Makros müssen zugelassen werden.
Gruß R
Dateianhänge
DISTINCT_UDF.ods
(12.76 KiB) 194-mal heruntergeladen
Windows 11: AOO, LO Linux Mint: AOO, LO

balu
* LO-Experte *
Beiträge: 370
Registriert: Mi 1. Jun 2011, 16:21

Re: Beliebige Textduplikate in EINER Zelle (!) löschen

Beitrag von balu » Fr 7. Okt 2016, 16:59

Hallo Dru Drury,
sie sind aber jeweils eindeutig durch Semikolon oder Komma getrennt
Nachtigall ik hör dir trapsen.

Der Inhalt dieser Textfelder wird mir dummerweise geliefert, und ich kann keinerlei Einfluß auf das angelieferte Material nehmen.
Und was für eine Dateiendung hat die gelieferte Datei?
Kannst Du sie in einem Text-Editor öffnen?

Ich glaube nämlich das es sich um eine CSV-Datei (oder ähnliche) handelt.




Gruß
balu

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

Re: Beliebige Textduplikate in EINER Zelle (!) löschen

Beitrag von Dru Drury » So 9. Okt 2016, 20:12

Hallo F3K,

danke für die schnelle Hilfe und Programmierung der funktion - ich werde das heute abend noch ausprobieren (war das WE off) und das Ergebnis posten!

Gruß & Dank,

Dru Drury

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

Re: Beliebige Textduplikate in EINER Zelle (!) löschen

Beitrag von Dru Drury » Mo 10. Okt 2016, 02:25

Moinsen F3K,

hab's ausprobiert, leider bleibt nach Öffnen Deiner Datei und Ausführung des Makros einfach nur die Fehlermeldung "WERT!" in der mit Funktion gefüllten Zelle/Spalte stehen und nichts passiert.....

mach ich da was falsch?

Gruß,
DruDrury

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

Re: Beliebige Textduplikate in EINER Zelle (!) löschen

Beitrag von Dru Drury » Mo 10. Okt 2016, 02:31

KORREKTUR: funktioniert wie versprochen! Neustart von LO war erforderlich nach Aktivierung der Makros bzw. Herabsetzen der Sicherheitsstufe für deren Ausführung.

Vielen, vielen Dank!
Gruß aus der Nacht,

DruDrury

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2535
Registriert: Fr 10. Dez 2010, 10:01

Re: Beliebige Textduplikate in EINER Zelle (!) löschen

Beitrag von karolus » Mo 10. Okt 2016, 20:58

Hallo

@F3K Total: der gezeigte Text wird nicht ausschliesslich durch '; ' getrennt, da gibts auch ';' und ' ; '

Python-lösung angewendet auf eine[n] selektierte[n] Zell[e|bereich]:

Code: Alles auswählen

import re

rex = re.compile(r'[ ;]+').split

def worker(entry):
    return '; '.join( sorted( set( rex( entry ) ) ) )

def main(*_):
    doc = XSCRIPTCONTEXT.getDocument()
    sel = doc.CurrentSelection
    sel.DataArray = tuple( tuple( map( worker, row ) ) for row in sel.DataArray )
 
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten