Donnez vie à vos documents numériques !
 

Compter le nombre de mots dans un champ

abracadabraPDF Forums PDF – Général Compter le nombre de mots dans un champ

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #46210
    _seb_
    Participant

    Salut tout le forum, j’ai besoin de votre aide.

    J’ai créé un devoir pour mes élèves avec différentes questions.

    Il y a un champ de texte par question.

    Pour chaque question, j’ai imposé un minimum de mot.

    Je voudrais indiquer sous chaque champ de texte le nombre de mots qu’il contient.

    Est-il possible de faire ça ?

    J’ai cherché autour de getPageNthWord, getPageNumWords, selectPageNthWord mais je n’ai rien trouvé de concluant.

    Merci pour votre aide.

Affichage de 9 réponses de 1 à 9 (sur un total de 9)
  • Auteur
    Réponses
  • #66792
    bebarth
    Maître des clés

    bonjour,
    Pour compter le nombre de mots, on remplace dans la valeur du champ les espaces et les apostrophes en espace, puis on transforme la chaine en table et on regarde la longueur de la table.
    En script de validation de chaque champ.
    @+
    :bonjour:

    #66793
    _seb_
    Participant

    :PouceHaut: Top merci

    j’avais trouvé ce code mais ça fonctionne moins bien que le tiens. Je n’ai pas compris comment fonctionne RegExp.

    Code:
    var chaine = this.getField(‘reponse1’).value;
    var regex = new RegExp(« [ ‘-]+ », « g »);
    chaine = chaine.split(regex);
    var nb = chaine.length;
    this.getField(‘nbrMotReponse1’).value = nb;

    source : compteur de mots

    Merci pour ton aide.

    _seb_

    #66794
    bebarth
    Maître des clés

    bonjour,

    J’ai pas compris comment fonctionne RegExp.

    Ne t’inquiète pas, celle-ci est simple mais pour moi les expressions régulières ne sont pas évidentes non plus…
    C’est une manière plus rapide (mais donc pas plus simple) d’écrire la même chose.
    Pour correspondre exactement à mon script, j’aurai pu écrire :

    Code:
    var lesMots=event.value;
    var lExpression=RegExp(« [ ‘/r/]+ », « g »);
    var enTable=lesMots.split(lExpression);
    this.getField(« nbMots »).value=enTable.length;

    Le script que tu donnes ne tient pas compte des sauts de lignes et compte le nombre de mots séparés par un trait d’union. Dans mon script les mots avec un trait d’union ne comptent que pour un mot et les sauts de lignes sont pris en compte.
    @+

    #66795
    Merlin
    Maître des clés

    Pour compter le nombre de mots, on remplace dans la valeur du champ les espaces et les apostrophes en espace

    Quand on est payé au mot : OK.
    Mais dans le cadre d’un devoir d’élève je supprimerais juste l’apostrophe, parce-que je trouverais logique que :
    – l’apostrophe
    – l’estime
    – l’Irlande
    – etc.
    Soit considérés comme un seul mot.

    (C’est juste mon avis et je le partage)

    #66796
    Merlin
    Maître des clés

    j’avais trouvé ce code mais ça fonctionne moins bien que le tiens.

    Dans ce cas utilise celui de Bebarth
    :geek:

    #66797
    Merlin
    Maître des clés

    et compte le nombre de mots séparés par un trait d’union. Dans mon script les mots avec un trait d’union ne comptent que pour un mot

    Oui, par principe le trait d’union (à ne pas confondre avec le tiret*) sert à créer un mot composé, qui doit donc compter comme un seul mot.
    :Smiley03:

    * Il n’y a pas d’espaces autour du trait d’union

    #66798
    bebarth
    Maître des clés

    Quand on est payé au mot : OK.
    Mais dans le cadre d’un devoir d’élève je supprimerais juste l’apostrophe, parce-que je trouverais logique que :
    – l’apostrophe
    – l’estime
    – l’Irlande
    – etc.
    Soit considérés comme un seul mot.

    (C’est juste mon avis et je le partage)

    Dans ce cas il faut écrire :

    Code:
    var lExpression=RegExp(« [ /r/]+ », « g »);

    @+
    :bonjour:

    #66799
    Merlin
    Maître des clés

    Bebarth, ton exemple affiche 29 mots pour mon pangramme préféré, qui en contient 25 :
    Dès Noël où un zéphyr haï me vêt de glaçons würmiens je dîne d’exquis rôtis de bœuf au kir à l’aÿ d’âge mûr & cætera !

    Je connais bien ce genre de regex qu’on utilise couramment avec InDesign (voir : https://www.abracadabrapdf.net/?p=659 ), alors j’ai amélioré le concept :
    var lesMots = lesMots.replace(/”|*|-|_|,|.|;|:|!|?|’|(|)|{|}|[|][/color/g, «  »);
    var lesMots = lesMots.replace(/s+/g,  » « );

    En GREP le pipe | signifie « ET ». L’antislash sert à échapper le caractère suivant.
    s capte tout type d’espace, saut de ligne, tabulation…
    Explications dans le script, dans l’exemple ci-joint.

    :Smiley15:

    #66800
    Merlin
    Maître des clés

    Je viens de l’essayer en situation et je m’aperçois que j’avais oublié le =, le +, le # et les flèches…  :oh:
    Ce qui donne pour la première regex :

    var lesMots = lesMots.replace(/+|#|||[/color]« |”|*|-|_|,|.|;|:|!|?|’|(|)|{|}|[|][/color/g, «  »);

    :extra:

Affichage de 9 réponses de 1 à 9 (sur un total de 9)
  • Vous devez être connecté pour répondre à ce sujet.