Welcome to the LimeSurvey Community Forum

Ask the community, share ideas, and connect with other LimeSurvey users!

Identifier une sous question un tableau multiple (X /Y)...

  • Philippe
  • Philippe's Avatar Topic Author
  • Offline
  • Senior Member
  • Senior Member
More
3 years 4 months ago #207849 by Philippe
Bonjour à tous,

J'ai un tableau a multiples entrée texte (2 colonnes et 7 lignes comme sur la capture d'écran)
Je voudrais contrôler les entrées grace à une Regex (comme sur l'autre capture...)
Cependant je n'arrive pas a trouver comment identifier spécifiquement la cellule sur laquelle appliquer le Regex...

Habituellement par exemple je fais :
Équation de validation des sous-questions: regexMatch("/^(?:[01][0-9]|2[0-3]):[0-5][0-9]$/", Q200100_SQ001)
Sauf que la SQ001 définie comme ça représente la première ou la deuxième colonne de l'axe des X...

J'espère que je suis clair...
Merci de vous référer aux copies d'écrans qui sont plus explicite que mon charabia

Merci d'avance
Philippe
The topic has been locked.
  • Philippe
  • Philippe's Avatar Topic Author
  • Offline
  • Senior Member
  • Senior Member
More
3 years 4 months ago #207850 by Philippe
Bon, j'avance un peu quand même ...
Après différents test j'ai trouvé ça :
regexMatch("/^(?:[01][0-9]|2[0-3]):[0-5][0-9]$/", Q200100_SQ001_PECINIT)
Y a plus de surlignage en rouge indiquant une erreur cependant ça fonctionne pas... Je peux rentrer n'importnawouak dans la cellule ...
Je dois faire une bêtise ailleurs ...

Quelqu'un a t il déjà fait ce genre de manip ?

Mon idée est de contrôler les 14 cellules (7 en X1 (PECINIT) et 7 en X2 (PECFIN)

...
Si c'est possible ...

Amicalement
Philippe
The topic has been locked.
  • Philippe
  • Philippe's Avatar Topic Author
  • Offline
  • Senior Member
  • Senior Member
More
3 years 4 months ago #207851 by Philippe
Rhôôôôôô....
Je me réponds encore tout seul.... Décidément je fais vraiment n'importe quoi...
Apparemment le Regex ne fonctionne que si le questionnaire est "lancé" et pas avec une pré visualisation...
En fait ça agit lorsqu'on appuis sur le bouton suivant ...
--
Je pensais que c'était à la sortie du focus de la cellule...

Bref, perdez pas votre temps avec mes bêtises ... Je vais tenter de terminer et je reviens si ça fonctionne vraiment pas...

Amicalement
Philippe
The topic has been locked.
  • DenisChenu
  • DenisChenu's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
3 years 4 months ago #207861 by DenisChenu

Philippe wrote: Équation de validation des sous-questions: regexMatch("/^(?:[01][0-9]|2[0-3]):[0-5][0-9]$/", Q200100_SQ001)
Sauf que la SQ001 définie comme ça représente la première ou la deuxième colonne de l'axe des X...

C'est pour cela que j'utilise toujours SX01 … pour l'axe X et SX02 pour l'axe Y.

Mais ici : tu veux controller sur toute la colonne (ou ligne) ?
Si oui : il faut l'écrire au complet …
Tu ne peux pas faire un regexpMaptc sur un tableau de donnée …

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand , plugin development .
I don't answer to private message.
The topic has been locked.
  • Philippe
  • Philippe's Avatar Topic Author
  • Offline
  • Senior Member
  • Senior Member
More
3 years 4 months ago #208136 by Philippe
Bonjour Denis,

Toujours un grand merci pour ta disponibilité sur ce forum.

Je veux contrôler indépendament chaque case du tableau...

Alors j'ai "trouvé" des solutions avec des regex dans les options LOGIQUE et la zone "Équation de validation des sous-questions: "
J'y ai mis ça :
Code:
(Q200100_SQ001_PECINIT!="" AND regexMatch("/^(?:[01][0-9]|2[0-3]):[0-5][0-9]$/", Q200100_SQ001_PECINIT)) AND (Q200100_SQ001_PECFIN!="" AND regexMatch("/^(?:[01][0-9]|2[0-3]):[0-5][0-9]$/", Q200100_SQ001_PECFIN)) AND (Q200100_SQ001_PECFIN > Q200100_SQ001_PECINIT) AND (Q200100_SQ002_PECINIT!="" AND regexMatch("/\b([1-9]|[1-8][0-9]|9[0-9]|[12][0-9]{2}|3[0-4][0-9]|350)\b/", Q200100_SQ002_PECINIT)) AND (Q200100_SQ002_PECFIN!="" AND regexMatch("/\b([1-9]|[1-8][0-9]|9[0-9]|[12][0-9]{2}|3[0-4][0-9]|350)\b/", Q200100_SQ002_PECFIN)) AND (Q200100_SQ003_PECINIT!="" AND regexMatch("/\b([1-9]|[1-5][0-9]|60)\b/", Q200100_SQ003_PECINIT)) AND (Q200100_SQ003_PECFIN!="" AND regexMatch("/\b([1-9]|[1-5][0-9]|60)\b/", Q200100_SQ003_PECFIN)) AND (Q200100_SQ004_PECINIT!="" AND regexMatch("/^(0|[1-9]?[0-9]|100)$/",Q200100_SQ004_PECINIT)) AND (Q200100_SQ004_PECFIN!="" AND regexMatch("/^(0|[1-9]?[0-9]|100)$/",Q200100_SQ004_PECFIN)) AND  (Q200100_SQ005_PECINIT!="" AND regexMatch("/^(0|[1-9]?[0-9]|100)$/",Q200100_SQ005_PECINIT)) AND (Q200100_SQ005_PECFIN!="" AND regexMatch("/^(0|[1-9]?[0-9]|100)$/",Q200100_SQ005_PECFIN)) AND (Q200100_SQ006_PECINIT!="" AND regexMatch("/^(0|[2-4][0-9]{1})($|\,|.[0-9]{1})$/",Q200100_SQ006_PECINIT)) AND (Q200100_SQ006_PECFIN!="" AND regexMatch("/^(0|[2-4][0-9]{1})($|\,|.[0-9]{1})$/",Q200100_SQ006_PECFIN)) AND (Q200100_SQ007_PECINIT!="" AND regexMatch("/^([0-3]?[0-9][0-9]|2[0-3])\/[1-2]?[0-9][0-9]$/", Q200100_SQ007_PECINIT)) AND (Q200100_SQ007_PECFIN!="" AND regexMatch("/^([0-3]?[0-9][0-9]|2[0-3])\/[1-2]?[0-9][0-9]$/", Q200100_SQ007_PECFIN))

Globalement ça marche bien pour les réponses de 1 à 5 (c'est assez simple) mais où ça "marchouille" c'est pour les questions 6 et 7 ...
Par exemple la 6 j'aimerais que les bornes soient entre 28 et 45 max avec 1 ou pas chiffre après la virgule (genre 28.6 ou 39.8 mais pas 28.55 ou 45.1 ... ) J'ai trouvé pour vérifier le fait qu'on rentre des "." ou des "," ...
La 7 c'est encore pire il faut contrôler un schéma de type (n)nn/(n)nn avec le premier chiffre en option et pas plus de 320 par exemple ... ça j'y arrive pas... J'ai le schéma mais les limites ... Marche pô...

Je fouille sur le web mais les Regex c'est un peu du chinois pour moi...

Amicalement
Philippe
The topic has been locked.
  • DenisChenu
  • DenisChenu's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
3 years 4 months ago #208153 by DenisChenu

Philippe wrote: Je fouille sur le web mais les Regex c'est un peu du chinois pour moi...

Et on va dire de l'espagnole pourt moi (je suis nul en langie)

Sinon : regexMatch("/^(?:[01][0-9]|2[0-3]):[0-5][0-9]$/", Q200100_SQ001_PECINIT))
Cela confirme le besoin de le faire élément par élément ...

Par exemple la 6 j'aimerais que les bornes soient entre 28 et 45 max avec 1 ou pas chiffre après la virgule (genre 28.6 ou 39.8 mais pas 28.55 ou 45.1 ... ) J'ai trouvé pour vérifier le fait qu'on rentre des "." ou des "," ...

Je le ferais pas en regexp moi ...
Code:
(is_empty(Q200100_SQ001_PECINIT.NAOK) OR (
  intval(Q200100_SQ001_PECINIT.NAOK*10) == Q200100_SQ001_PECINIT.NAOK*10
  AND
  200100_SQ001_PECINIT.NAOK > 28
  AND
  200100_SQ001_PECINIT.NAOK <=45
))
AND
(is_empty(Q200100_SQ002_PECINIT.NAOK) OR (
  etc
)
Cela me semble plus simple à comprendre que des regexp complexe, même si plus long à écrire.

A la base : le princnipal est de comprendre et de pouvoir adapter facilement ;)

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand , plugin development .
I don't answer to private message.
The topic has been locked.
Moderators: Nickko

Lime-years ahead

Online-surveys for every purse and purpose