Seite 1 von 1

Beliebige Textduplikate in EINER Zelle (!) löschen

Verfasst: Fr 7. Okt 2016, 02:45
von Dru Drury
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

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

Verfasst: Fr 7. Okt 2016, 10:10
von hylli
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

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

Verfasst: Fr 7. Okt 2016, 15:59
von F3K Total
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

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

Verfasst: Fr 7. Okt 2016, 16:59
von balu
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

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

Verfasst: So 9. Okt 2016, 20:12
von Dru Drury
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

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

Verfasst: Mo 10. Okt 2016, 02:25
von Dru Drury
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

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

Verfasst: Mo 10. Okt 2016, 02:31
von Dru Drury
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

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

Verfasst: Mo 10. Okt 2016, 20:58
von karolus
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 )