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
-
Hallo DLZBB,
mit
cnt(split(Textfeld,Suchwort))-1
sollte es gehen
Leo
-
@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
-
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.
-
Ups, "Worte" = "Wörter"
-
@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
-
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.
-
...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
-
...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
*
-
Sehr interessante Unterhaltung,
wie wäre es damit:
---
cnt(splitx(TEXTFELD, "[^\bTEXT\b*]" )) - 1
---
Leo
-
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 -
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 3 JahrenZuletzt aktiv
- 11Antworten
- 588Ansichten