0

Wortzähler und Wortlimitierung

Ich möchte gerne ein Textfeld auf eine bestimmte Anzahl an Wörtern beschränken (Nicht Zeichen) und diese auch mit einem Zähler anzeigen lassen. Ist dies möglich?

4 Antworten

null
    • Ninox-Professional
    • planoxpro
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo, m. W. gibt es keine fertige Funktion, um Wörter zu zählen und Textfelder auf eine bestimmte Anzahl zu begrenzen. Ich nutze selbst gelegentlich ein Funktionsfeld mit folgendem Code:

    let x := length(Textfeld);
    let z := 0;
    for i in range(0, x) do
        if substr(Textfeld, i, 1) = " " then
            z := z + 1
        end
    end;
    z + 1

    Da werden aber nur die Leerzeichen gezählt, was natürlich nicht immer exakt den Wörtern entspricht. Für meine Zwecke (mehrzeilige Textfelder mit Fließtext) hat mir die ungefähre Zahl aber bisher immer genügt. Bei Überschreiten eines bestimmten Wertes könnte man das Ergebnis bspw. rot einfärben oder so. Aber das wäre natürlich nur ein Provisorium.

    Genauer könnte man es wahrscheinlich mit Regulären Ausdrücken hinbekommen. Und das Ergebnis ließe sich dann auch "Nach Änderungen" überprüfen. Aber mit so sehr diffizilen String-Operationen habe ich leider keine Erfahrung.

    • Christian.3
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Guten Morgen,

     

    vielen Dank für die Formel, geht das auch wenn die Kommazeichen gezählt werden?

    Das würde mir alternativ noch besser helfen 😀

    Ich bin was Funktionen angeht jedoch noch nicht so bewandert dass ich die Funktion verstehe die Du mit gesendet hast :)

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

    Moin Christian, das Script ist im Grunde sehr banal, alte Schule sozusagen. Gut möglich, dass es auch mit Ninox inzwischen besser und einfacher geht, aber solange es für mich halbwegs funktioniert, habe ich keinen Leidensdruck, lange nach einer Alternative zu suchen. ;)

     

    Zur Erläuterung:

     

    Mit der Funktion 'length()' kann man die Anzahl der Zeichen eines Textfeldes bzw. einer Zeichenkette ermitteln. Dieser Wert wird in die Variable 'x' geschrieben:

    let x := length(Textfeld);

     

    In der zweiten Zeile wird Variable 'z' der Startwert 0 zugewiesen. Diese Variable dient im weiteren Verlauf als Zähler:

    let z := 0;

     

    Dann folgt eine Schleife, die beginnend bei 0 'x' mal durchlaufen wird und die Variable 'i' dabei automatisch jeweils um 1 erhöht:

    for i in range(0, x) do ... end

     

    Mit der Funktion substr() lässt sich der Teil einer Zeichenkette bzw. eines Textfeldes extrahieren, als Parameter werden der Startunkt ('i') und die Länge (1) der Zeichenfolge angegeben. Im vorliegenden Fall wird mit 'if' gleich geprüft, ob das betreffende Zeichen = " ", also ein Leerzeichen ist:

    if substr(Textfeld, i, 1) = " " then ... end

     

    Wenn ja, wird der Wert der Variable 'z' um 1 erhöht:

    z := z + 1

     

    Und weil ich ja durch Leerzeichen getrennte Wörter zählen wollte, erhöhe ich den Wert zum Abschluss noch mal um 1 und lasse ihn als Ergebnis der Funktion anzeigen:

    z + 1

     

    Das war's. Will man also nun nach Kommas statt Leerzeichen suchen, muss man in der if-Abfrage nur das betreffende Zeichen ändern:

    if substr(Textfeld, i, 1) = "," then

     

    Das funktioniert mit jedem beliebigen Zeichen, und auch mit mehreren. Man könnte also bspw. auch nach der Zeichenfolge Komma plus Leerzeichen suchen (man beachte die 2 als Parameter):

    if substr(Textfeld, i, 2) = ", " then

     

    Wie gesagt, im Grunde sehr simpel, aber wenn's hilft ... Die genannten Funktionen sind übrigens auch alle im Handbuch beschrieben:
    https://ninoxdb.de/de/manual/erweiterte-Berechnungen/funktions-und-sprachreferenz

    • Matthias_S
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Die Frage ist zwar schon länger her, jedoch für alle, die Wörter im Textfeld zählen möchten. Es geht auch einfacher:

    count(split(Textfeld, " "))
    
    

    Einzige Einschränkung: Wenn im Text "Text - weiterer Text" vorkommt, zählt er das "-" als ein Wort. Dies könnte man aber auch vorher noch mit replace() rausfiltern.