0

Anzahl eines bestimmten Wortes in einem Textfeld ermitteln

Guten Tag,

ich möchte ein bestimtes Wort in einem Textfeld suchen und die Anzal / Menge des Wortes ermitteln, also wie oft dieses bestimmte Wort in diesem Text vorkommt.

Vielleicht kann mir jemand helfen Liebe Grüße und vielen Dank

11 Antworten

null
    • Leonid_Semik
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo DLZBB,

    mit 

    cnt(split(Textfeld,Suchwort))-1

    sollte es gehen

    Leo

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    @Leo. Das kann Differenzen von bis zu zwei Zählern ergeben. Wenn "X" gesucht wird, dann X M X = 1 oder M X M X M = 3. Oder liege ich da falsch. 
    alternativ hätte ich

    *

    let counter := 0;
    let b := TEXTFELD;
    while contains(b, "TEXT") do
    let a := replacex(b, "TEXT", "m", "*");
    b := a;
    counter := counter + 1
    end
    ;
    counter

    *

    Mirko

    • Ninox-Professional
    • planoxpro
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Moin, ich finde Leos Lösung mit einer einzigen Code-Zeile ziemlich clever. Auf die Idee, direkt nach dem Suchstring zu splitten, wäre ich gar nicht gekommen. Aber es führen ja viele Wege nach Rom, hier ist noch ein weiterer:

     

    let myS := SUCHWORT;
    let myZ := 0;
    let myA := split(TEXTFELD, " ");
    for i in myA do
       if i like myS then myZ := myZ + 1 end
    end;
    myZ

     

    Letztlich kommt es natürlich auch darauf an, ob es um ganze, eigenständige Worte geht oder auch Teilstrings berücksichtigt werden sollen.

    • Ninox-Professional
    • planoxpro
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Ups, "Worte" = "Wörter"

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    @Copytexter. Ich finde Leos Lösungen ja auch immer clever, aber diese ergibt schlicht ein falsches Ergebnis, wenn die Suchwörter am Anfang oder/und am Ende des Strings/Textes stehen. Bsp. Suchwort "TEXT" in  "TEXT B TEXT B TEXT b TEXT" ergibt bei Leo 2, bei Dir 4 und bei mir auch 4. Gruß Mirko

    • Ninox-Professional
    • planoxpro
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Das könnte man ja verhindern, indem man ein  Zeichen davor und dahinter setzt. Dann hat man zwei Zeilen und als Ergebnis auch 4. Ich wollte deine Variante aber keineswegs herabwürdigen, mir ging es wirklich nur um die Grundidee des Splittens nach dem betreffenden Wort, die mir so nicht eingefallen war. Meine Version unterscheidet sich insofern von euren, als sie weniger sensitiv sucht, also ggf. mehr Treffer anzeigt. Kann ja sein, dass dem Fragesteller das hilft. Deshalb der Hinweis im letzten Satz.

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    ...eigenlich wollte ich nur, wie Du schriebst, in Rom ankommen. Aber da sind wir alle drei noch nicht. Suchbegriff "TEXT". Mich stört nur selbst, wenn es nicht perfekt ist. Gruß Mirko

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    ...vielleicht so. \bTEXT\b arbeitet mit der nullbreiten Wortgrenze und ist also wortsensitiv (wenn das so heißt;-), der andere Code findet auch Wortteile. Flag m kann man sogar weglassen. Schönen Sonntag noch.

    *

    let counter := 0;
    let b := TEXTFELD;
    while extractx(b, "\bTEXT\b") != null do
    let a := replacex(b, "\bTEXT\b", "", "*");
    b := a;
    counter := counter + 1
    end
    ;
    counter

    *

    • Leonid_Semik
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Sehr interessante Unterhaltung,

    wie wäre es damit:

    ---

    cnt(splitx(TEXTFELD, "[^\bTEXT\b*]" )) - 1

    ---

    Leo

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Leo.
    ich verstehe split oder splitx so: (bei Suchwort: "item")
    1. item item item ---> ["",""] ---> ergibt 2 Arrayelemente, cnt() = 2.
    2. anderesWort item item item anderesWort ---> [anderesWort,"","",anderesWort] ---> ergibt cnt() = 4, weil die Plätze vor und nach dem ersten und letzten
    Komma Arrayelemente sind.
    3. anderesWort item item item ---> [anderes Wort,"", ""] ---> ergibt 3 Arrayelemente.
    4. item item item anderesWort ---> ["","",anderes Wort] ---> ergibt 3 Arrayelemente.
    damit ist die Zählung über split(x) eben schwierig, weil die ersten beiden Konstellationen nicht erfasst werden.
    Aus den Suchitem werden ja Kommas und nicht Arrayelemente.

    Ich befürchte, daß [^\bTEXT\b*] keine ganz guten Ergebnisse bringen wird. Es matcht nun auch "TE" und "TEX" etc., also Bestandteile
    der Suchwörter. Ausserdem wäre es nicht sensitiv auf das Wort, sondern findet es auch als Wortbestandteil. In dem obigen Beispiel von mir
    bringt es tatsächlich ein korrektes Ergebnis, aber gib mal am Ende noch "TE" ein, dann ist es ein weiterer Treffer.
    Mirko

    • Leonid_Semik
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Mirko,

    Ja, die Formel muss man noch anpassen. Man muss zuerst wissen was genau bei der Suche berücksichtig werden muss.

    Leo

Content aside

  • vor 2 JahrenZuletzt aktiv
  • 11Antworten
  • 585Ansichten