Donnez vie à vos documents numériques !
 

Vérification

abracadabraPDF Forums PDF – Général Vérification

  • Ce sujet contient 35 réponses, 3 participants et a été mis à jour pour la dernière fois par michel c., le il y a 1 mois.
  • Créateur
    Sujet
  • #74407
    michel c.
    Participant

    Bonjour, j’ai un document dont les scripts ne tolèrent aucun doublon sur les champs dont les noms commencent par la suite de caractère

    • Verifier.
    • Recommencer.
    • Titre.
    • Question.
    • Q.
    • R.
    • Aide.
    • cAc.

    j’aimerais créer une fonction permettant de vérifier qu’il n’y a aucun doublon parmi ces champs et qui ouvre une boite de dialogue précisant les noms des champs en double ou triple…

    Autre vérification pour chacun de ces champs cités précédemment : j’aimerais vérifier que leurs indices soient bien des nombres successifs.

    Par exemple je peux avoir des champs qui se nomment R.1.1 ; R.1.2 ; R.1.3 ; R.2.1 ; R.2.2 ; R.2.3 ; R.2.4

    J’aimerais qu’une boite de dialogue prévienne l’utilisateur s’il manque le champ R.2.3 par exemple.

    Pour ces 2 vérifications, cela dépasse mes compétences et je ne sais pas si cela est possible.

    Merci

Affichage de 35 réponses de 1 à 35 (sur un total de 35)
  • Auteur
    Réponses
  • #74408
    Merlin
    Maître des clés

    Bonjour

     

    Installe le module “FormReport” des abracadabraTools et essaie le, il est fort possible qu’il réponde à ta demande.

    abracadabraTools

    #74411
    michel c.
    Participant

    Bonjour, malheureusement à mon travail nous avons opté pour un autre logiciel qu’adobe acrobat (PDF XChange editor)

    Je ne pense pas que ce soit compatible. Je viens de regarder, on peut installer des modules supplémentaires mais seulement ceux proposés par l’éditeur.

    #74417
    bebarth
    Maître des clés

    bonjour,
    Voici quelques lignes que j’avais écrites il y a un certain temps et que j’utilise pour gérer les doublons d’une table.

    // Suppression des doublons
    var laTable=["pomme","banane","orange","pomme","banane","pomme"];
    console.println("laTable : "+laTable);
    function sansDoublons(uneTable) {
    return uneTable.filter((valeur,indice)=>uneTable.indexOf(valeur)===indice);
    }
    console.println("laTable sans doublons mais non triée : "+sansDoublons(laTable));
    // Retour : laTable sans doublons mais non triée : pomme,banane,orange

    // Suppression des doublons
    var laTable=["pomme","banane","orange","pomme","banane","pomme"];
    console.println("laTable : "+laTable);
    function sansDoublons(uneTable){
    var newArr=[];
    for (var i=0; i<uneTable.length; i++) {
    if (newArr.indexOf(uneTable)===-1) newArr.push(uneTable);
    }
    return newArr;
    }
    console.println("laTable sans doublons mais non triée : "+sansDoublons(laTable));
    // Retour : laTable sans doublons mais non triée : pomme,banane,orange

    // Tous les doublons
    var laTable=["pomme","banane","orange","pomme","banane","pomme"];
    console.println("laTable : "+laTable);
    function lesDoublons(uneTable) {
    return uneTable.filter((valeur,indice)=>uneTable.indexOf(valeur)!==indice);
    }
    console.println("Tous les doublons : "+lesDoublons(laTable));
    // Retour : Tous les doublons : pomme,banane,pomme

    // Tous les doublons uniques
    var laTable=["pomme","banane","orange","pomme","banane","pomme"];
    console.println("laTable : "+laTable);
    function lesDoublonsUniques(uneTable){
    var newArr=[];
    for (var i=0; i<uneTable.length; i++) {
    if (newArr.indexOf(uneTable)===-1 && uneTable.indexOf(uneTable)!==i) newArr.push(uneTable);
    }
    return newArr;
    }
    console.println("Tous les doublons : "+lesDoublonsUniques(laTable));
    // Retour : Tous les doublons : pomme,banane

    // Suppression des doublons et tri
    var laTable=["pomme","banane","orange","pomme","banane","pomme"];
    console.println("laTable : "+laTable);
    function triSansDoublons(uneTable) {
    return uneTable.sort().filter(function(valeur,indice,cetteTable) {
    return !indice || valeur!=cetteTable[indice-1];
    });
    }
    console.println("laTable sans doublons mais triée : "+triSansDoublons(laTable));
    // Retour : laTable sans doublons mais triée : banane,orange,pomme

    @+
    😎

    #74422
    michel c.
    Participant

    Merci, je vais essayer de voir ce que je peux faire.

    Je suppose qu’au départ, je vais devoir lister tous les noms de champs pour les inscrire dans la table.

    Je pensais commencer par quelque chose comme ça :

    function doublons() {
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    }

    var laTable=[.........];

    Je ne maitrise pas du tout les tables mais je vais chercher.

    Merci

    #74423
    bebarth
    Maître des clés

    bonjour,
    Si tu listes juste les noms des champs, tu ne trouveras pas de doublons !
    Pour cela, il faut vérifier le paramètre “page” de chaque champ : si c’est un nombre le champ n’existe qu’une fois et si c’est une table, elle indique ou sont ces champs.

    Voici un script simple pour vérifier :
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    if (typeof this.getField(nomChamp).page=="object") app.alert("Le champ \""+nomChamp+"\" est présent sur en page(s) : "+this.getField(nomChamp).page,3);
    }
    Ici la table des pages est listée, donc les numéros sont basés sur 0 et peuvent être identiques…

    @+
    😎

    #74424
    michel c.
    Participant

    Merci beaucoup. J’ai modifié légèrement le texte pour que le message soit plus clair.

    function doublons() {
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    if (typeof this.getField(nomChamp).page=="object") app.alert("Le champ \""+nomChamp+"\" n'est pas unique; il se trouve sur la(les) page(s) : "+this.getField(nomChamp).page,3);
    }
    }

    Maintenant je vais essayer de transformer la valeur this.getField(nomChamp).page pour que la numérotation commence à 1 et non pas à 0.

    Je pensais qu’il fallait convertir cette chaine en nombre avant de lui ajouter 1 mais je crois que ce n’est pas si simple.

    #74425
    Merlin
    Maître des clés

    Maintenant je vais essayer de transformer la valeur this.getField(nomChamp).page pour que la numérotation commence à 1 et non pas à 0.

    Je n’ai peut-être pas bien compris la problématique mais je crois qu’il serait plus simple de faire commencer la boucle à 1 au lieu de zéro :

    for (var i=1; i<this.numFields; i++) {…

    #74428
    bebarth
    Maître des clés

    Maintenant je vais essayer de transformer la valeur this.getField(nomChamp).page pour que la numérotation commence à 1 et non pas à 0. Je pensais qu’il fallait convertir cette chaine en nombre avant de lui ajouter 1 mais je crois que ce n’est pas si simple.

    Tu peux écrire :
    function doublons() {
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    if (typeof this.getField(nomChamp).page=="object") {
    var lesPages=this.getField(nomChamp).page;
    for (var j=0; j<lesPages.length; j++) lesPages[j]=lesPages[j]+1;
    var lesPages=lesPages.toString();
    var n=lesPages.lastIndexOf(",");
    var lesPages=(lesPages.substring(0,n)+" et "+lesPages.substring(n+1)).replace(/,/g,", ");
    app.alert("Le champ \""+nomChamp+"\" n'est pas unique; il se trouve sur la(les) page(s) : "+lesPages,3);
    }
    }
    }

    L’idéal serait encore de ne pas citer x fois la page lorsque le champ se trouve plusieurs fois sur cette page…

    @+
    😎

    #74431
    michel c.
    Participant

    Merci, c’est parfait

     

    #74432
    bebarth
    Maître des clés

    L’idéal serait encore de ne pas citer x fois la page lorsque le champ se trouve plusieurs fois sur cette page…

    Ça me trottait dans la tête :
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    if (typeof this.getField(nomChamp).page=="object") {
    var lesPages=this.getField(nomChamp).page;
    }
    }
    for (var j=0; j<lesPages.length; j++) lesPages[j]=lesPages[j]+1;
    var frequences={};
    for (var i=0; i<lesPages.length; i++) {
    var nb=lesPages;
    if (frequences[nb]===undefined) frequences[nb]=1;
    else frequences[nb]++;
    }
    var parPage=[];
    var txt="Le champ \""+nomChamp+"\" n'est pas unique; il se trouve "
    for (var nb in frequences) parPage.push(frequences[nb]+" fois en page "+nb);
    if (parPage.length>1) txt+=": ";
    var parPage=parPage.toString();
    var n=parPage.lastIndexOf(",");
    if (n>-1) var parPage=(parPage.substring(0,n)+" et "+parPage.substring(n+1)).replace(/,/g,", ");
    app.alert(txt+=parPage+".",3);

    @+
    😎

    #74433
    michel c.
    Participant

    Merci pour cette dernière version.

    Le script précédent marchait parfaitement mais pour celui-ci c’est curieux il me détecte des doublons sur des champs uniques.

    Lors de l’exécution de la fonction, il me détecte le champ RepOpi en double sur les pages 1 et 2 mais il n’y en a pas sur la page 2.

    Si j’efface ce champ, il me détecte ensuite le champ meca qui est toujours en un seul exemplaire et ainsi de suite…

    Et contrairement à l’autre script, je suis obligé de l’exécuter plusieurs fois : une détection à la fois…

    Attachments:
    You must be logged in to view attached files.
    #74435
    bebarth
    Maître des clés

    bonjour,
    Etrange, effectivement ! Juste ce champ… Je regarde dès que je peux.

    @+
    😎

    #74436
    Merlin
    Maître des clés

    Lors de l’exécution de la fonction, il me détecte le champ RepOpi en double sur les pages 1 et 2 mais il n’y en a pas sur la page 2.

    Assure toi que le nom de champ “RepOpi” soit bien écrit avec un “o” et non pas avec un “zéro”, ça m’a déjà joué des tours par le passé.

     

    #74437
    bebarth
    Maître des clés

    Je pense que c’est une erreur de script.

    Ce champ est le dernier et si on le supprime, ça fait la même chose avec le nouveau dernier champ.

    De ce que j’ai pu constater, ça ne fait ça que si il n’y a pas de champs multiples.

    Je ne peux pas regarder aujourd’hui…

    @+
    😎

    #74438
    michel c.
    Participant

    Sinon ta proposition précédente me va très bien.

    #74469
    bebarth
    Maître des clés

    bonjour,

    Sinon ta proposition précédente me va très bien.

    Très bien ! Mais perso il fallait que je trouve.
    Voici donc un script qui fonctionne avec ton fichier :

    var lesChamps=[];
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    if (typeof this.getField(nomChamp).page=="object") {
    lesChamps.push([nomChamp,this.getField(nomChamp).page])
    }
    }
    if (lesChamps.length) {
    var leTexte="";
    for (var k=0; k<lesChamps.length; k++) {
    var nom=lesChamps[k][0];
    var lesPages=lesChamps[k][1];
    for (var j=0; j<lesPages.length; j++) lesPages[j]=lesPages[j]+1;
    var frequences={};
    for (var j=0; j<lesPages.length; j++) {
    var nb=lesPages[j];
    if (frequences[nb]===undefined) frequences[nb]=1;
    else frequences[nb]++;
    }
    var parPage=[];
    var txt="• \""+nom+"\" - ";
    for (var nb in frequences) parPage.push(frequences[nb]+" fois en page "+nb);
    var parPage=parPage.toString();
    var n=parPage.lastIndexOf(",");
    if (n>-1) var parPage=(parPage.substring(0,n)+" et "+parPage.substring(n+1)).replace(/,/g,", ");
    if (!leTexte) leTexte+="Champs dupliqués :";
    leTexte+="\r"+txt+parPage+".";

    }
    console.clear();
    console.show();
    console.println(leTexte);
    app.alert(leTexte,3);
    } else app.alert("Tout est OK !!!",3);

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 mois et 1 semaine par bebarth.
    Attachments:
    You must be logged in to view attached files.
    #74475
    michel c.
    Participant

    Merci, j’ai essayé mais la console et la boite de dialogue renvoient un message curieux :

    Champs dupliqués :
    • "Aller,0,1" - 1 fois en page Doc.0.01, 1 fois en page 0 et 11.
    • "Aller,0,1" - 1 fois en page Doc.0.011, 1 fois en page 0 et 111.
    • "Aller,0,1" - 1 fois en page Doc.0.0111, 1 fois en page 0 et 1111.
    • "Aller,0,1" - 1 fois en page Doc.0.01111, 1 fois en page 0 et 11111.
    • "Aller,0,1" - 1 fois en page Doc.0.011111, 1 fois en page 0 et 111111.
    • "Aller,0,1" - 1 fois en page Doc.0.0111111, 1 fois en page 0 et 1111111.
    • "Aller,0,1" - 1 fois en page Doc.0.01111111, 1 fois en page 0 et 11111111.
    • "Aller,0,1" - 1 fois en page Doc.0.011111111, 1 fois en page 0 et 111111111.
    • "Aller,0,1" - 1 fois en page Doc.0.0111111111, 1 fois en page 0 et 1111111111.
    • "Aller,0,1" - 1 fois en page Doc.0.01111111111, 1 fois en page 0 et 11111111111.
    • "Aller,0,1" - 1 fois en page Doc.0.011111111111, 1 fois en page 0 et 111111111111.
    • "Aller,0,1" - 1 fois en page Doc.0.0111111111111, 1 fois en page 0 et 1111111111111.
    • "Aller,0,1" - 1 fois en page Doc.0.01111111111111, 1 fois en page 0 et 11111111111111.

    J’essaye de me pencher un peu dessus mais certaines lignes dépassent mes compétences…

    • Cette réponse a été modifiée le il y a 1 mois et 1 semaine par michel c..
    Attachments:
    You must be logged in to view attached files.
    #74479
    bebarth
    Maître des clés

    Ça marche chez moi… et avec ton dernier fichier !
    Je regarde plus tard.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #74483
    bebarth
    Maître des clés

    Toujours le souci d’affichage sur le forum lorsqu’un “i” est entre crochets “[]” !
    J’ai changé le “i” en “k” dans le script précédent, ça devrait marcher beaucoup mieux maintenant !

    @+
    😎

    #74484
    michel c.
    Participant

    Tout est nickel.

    Merci

    #74485
    michel c.
    Participant

    Bonjour, comme je le disais au 1er message, j’aimerais aussi vérifier que les indices des champs qui sont sensés se suivre soient bien des nombres successifs.

    Par exemple je peux avoir des champs qui se nomment R.1.1 ; R.1.2 ; R.1.3 ; R.2.1 ; R.2.2 ; R.2.3 ; R.2.4

    J’aimerais qu’une boite de dialogue prévienne l’utilisateur s’il manque le champ R.2.3 par exemple.

    Pour ces 2 vérifications, cela dépasse mes compétences et je ne sais pas si cela est possible.

    En fait j’aimerais avoir un fichier de base que mes collègues pourront utiliser pour créer des formulaires à leur convenance, cependant lorsqu’ils vont copier et renommer certains champs, il est probable qu’ils renomment mal un champ ou qu’ils en oublient un. Ne connaissant pas le JavaScript, ils ne pourront pas interpréter correctement le message d’erreur de la console.

    Merci

    • Cette réponse a été modifiée le il y a 1 mois par michel c..
    #74487
    Merlin
    Maître des clés

    Plutôt que de lister les champs éventuellement manquants et de compliquer la vie de l’utilisateur est-ce qu’il ne serait pas plus simple de faire en sorte que le script les ignore (sans rien dire à l’utilisateur) ?

    Par exemple :

    for (var i=0; i<this.numFields; i++) {
    if (this.getField("R.1." + i) != null) { // si le champ existe
    this.getField("R.1." + i).value // code à exécuter
    }
    }

    #74488
    Merlin
    Maître des clés

    Que l’on peut simplifier ainsi :

    for (var i=0; i<this.numFields; i++) {
    if (this.getField("R.1." + i)) { // si le champ existe
    this.getField("R.1." + i).value // code à exécuter
    }
    }

    #74489
    michel c.
    Participant

    Bonjour, en fait beaucoup de scripts dépendent de la bonne numérotation des champs ; quasiment tous en fait.

    Comme à mon habitude, ce formulaire est une petite usine à gaz mais qui fonctionne si les champs sont correctement nommés et numérotés.

    Pour ne citer qu’un exemple, le script verifier va comparer la valeur du champ Q.a.b à celle du champ R.a.b.

    Si l’utilisateur oublie un champ ou le numérote mal, il faudra que je modifie ce script mais quelles valeurs dois-je prendre en compte pour la comparaison?

    Merci

     

    Attachments:
    You must be logged in to view attached files.
    #74491
    Merlin
    Maître des clés

    Désolé, je n’ai pas tout suivi ci-dessus, mais dans ce cas je crois qu’il vaut mieux rester sur ton idée et sur les propositions de bebarth.

    #74492
    michel c.
    Participant

    J’ai une petite idée de algorithme mais dans la partie codage il y a un truc qui me dépasse.

    Je pensais commencer comme cela :

    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    var b = nomChamp.split(".");
    var P1 = (b[0]);
    var P2 = (b[1]);
    var P3 = (b[2]);

    ...code que je ne sais pas faire....}

    A partir de la je me disait que pour un nom P1 donné, extraire l’indice P2 mini P2 maxi.

    déclarer une variable i = P2max-P2min+1

    Si cette la valeur de cette variable est supérieure au nombre de champs P1+”.”+P2+”.”P3 Alors afficher un message d’alerte indiquant qu’il manque un champ dans la série P1+”.”+P2+”.”P3

    déclarer une variable j = P3max-P3min+1

    Si cette la valeur de cette variable est supérieure au nombre de champs P1+”.”+P2+”.”P3 Alors afficher un message d’alerte indiquant qu’il manque un champ dans la série P1+”.”+P2+”.”P3

    Mais il y a peut être mieux à faire…

    #74493
    bebarth
    Maître des clés

    …dans le principe c’est à peu près ça, et je voyais ça pas si compliqué, mais je crois que je me suis lancé dans une usine à gaz ! Je reprendrai à zéro ce weekend et à tête reposée…

    @+
    😎

    #74494
    michel c.
    Participant

    Pour l’algorithme, j’ai pensé à autre chose :

    A partir de la je me disait que pour un nom P1 donné, extraire l’indice P2 mini P2 maxi.

    boucle :

    for (var i=P2min ; i<=P2max ; i++) {

    Si un champ P1+”.”+i+”.”P3 n’existe pas, alors afficher un message d’alerte indiquant le nom du champ manquant

    }

     

    pour un nom P1 donné, extraire l’indice P3 mini P3 maxi.

    boucle n°2 :

    for (var i=P3min ; i<=P3max ; i++) {

    Si un champ P1+”.”+P2+”.”i n’existe pas, alors afficher un message d’alerte indiquant le nom du champ manquant

    }

    #74499
    Merlin
    Maître des clés

    Dans ce cas tu peux reprendre mon script ci-dessus à l’inverse :

    for (var i=0; i<this.numFields; i++) {
    if (this.getField("R.1." + i)) === null { // si le champ n'existe pas
    app.alert("Le champ " + this.getField("R.1." + i).name + " n'existe pas.");

    break;
    }
    }

     

    #74501
    michel c.
    Participant

    Bonjour, j’ai testé, ça ne fonctionne pas. J’ai déplacé la parenthèse mal placée à la ligne 4 : if (this.getField("R.1." + i) === null) mais j’ai une erreur à la ligne 5 : app.alert("Le champ " + this.getField("R.1." + i).name + " n'existe pas.");

    Doc:Open:5: TypeError: this.getField(...) is null

     

    Sinon, je pensais à quelque chose comme ça mais il me manque quelques lignes de code pour y arriver….

    function verif() {

    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    var b = nomChamp.split(".");
    var P1 = (b[0]);
    var P2 = (b[1]);
    var P3 = (b[2]);
    }
    if (P1 == "R") {
    //code pour trouver les valeurs mini et maxi de P2→mise en variable amin et amax
    //code pour trouver les valeurs maxi de P3→mise en variable bmin et bmax
    for (var j=amin ; j<=amax ; j++) {
    if (this.getField("P1+"."+j+"."+P3) === null) {app.alert("Le champ "+"P1+"."+j+"."+P3+" n'existe pas");}
    }

    for (var k=bmin ; k<=bmax ; k++) {
    if (this.getField("P1+"."+P2+"."+k) === null) {app.alert("Le champ "+"P1+"."+P2+"."+k+" n'existe pas");}
    }
    }

    if (P1 == "Q") {
    //code pour trouver les valeurs mini et maxi de P2→mise en variable cmin et cmax
    //code pour trouver les valeurs maxi de P3→mise en variable dmin et dmax
    for (var l=cmin ; l<=cmax ; c++) {
    if (this.getField("P1+"."+l+"."+P3) === null) {app.alert("Le champ "+"P1+"."+l+"."+P3+" n'existe pas");}
    }

    for (var m=dmin ; m<=dmax ; d++) {
    if (this.getField("P1+"."+P2+"."+m) === null) {app.alert("Le champ "+"P1+"."+P2+"."+m+" n'existe pas");}
    }
    }
    }

    • Cette réponse a été modifiée le il y a 1 mois par michel c..
    Attachments:
    You must be logged in to view attached files.
    #74505
    bebarth
    Maître des clés

    bonjour,
    Voici donc un script pour vérifier les indices de tes champs :
    var reponse="";
    while (!/^(\w+,*)+$/.test(reponse)) {
    var reponse=app.response({
    cQuestion: "Indiquez les différents noms de champs en les séparant par une virgule. Exemple :",
    cTitle: "Vérification des indices de champs",
    cDefault: "Verifier,Recommencer,Titre,Question,Q,R,Aide,cAc",
    cLabel: "Champ(s) :"
    });
    }
    if (reponse!=null) {
    var reponse=reponse.replace(/[,]{2,}/g,",").replace(/^,/,"").replace(/,$/,"");
    var aVerifier=reponse.split(",");
    var lesSeries=[];
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    for (var j=0; j<aVerifier.length; j++) {
    var RegExTest=new RegExp("^"+aVerifier[j]+"\\.(\\d+)\\.(\\d+)$");
    var OK=nomChamp.match(RegExTest);
    if (OK) {
    var ind1=OK[1];
    var ind2=OK[2];
    if (lesSeries[j]==undefined) lesSeries[j]=[aVerifier[j],[]];
    if (lesSeries[j][1][ind1]==undefined) lesSeries[j][1][ind1]=[ind1,[]];
    if (lesSeries[j][1][ind1][1][ind2]==undefined) lesSeries[j][1][ind1][1][ind2]=[ind2];
    break;
    }
    }
    }
    var txt=""
    for (var ind=0; ind<lesSeries.length; ind++) {
    if (lesSeries[ind]==undefined) txt+="Il n'y a pas de champ \""+aVerifier[ind]+"\" avec indices.\r";
    else {
    for (var j=1; j<lesSeries[ind][1].length; j++) {
    if (lesSeries[ind][1][j]==undefined) txt+="Il n'y a pas d'indice de premier niveau \""+aVerifier[ind]+"."+[j]+"\".\r";
    else {
    for (var k=1; k<lesSeries[ind][1][j][1].length; k++) {
    if (lesSeries[ind][1][j][1][k]==undefined) txt+="Il n'y a pas d'indice de second niveau \""+aVerifier[ind]+"."+[j]+"."+k+"\".\r";
    }
    }
    }
    }
    }
    if (!txt) txt="Tout est OK !!!";
    console.clear();
    console.show();
    console.println(txt);
    }

    Ce script tient compte qu’il n’y a apparemment pas d’indices 0 pour tes champs. Je joint un fichier où le script regarde si il y a des indices 0.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #74512
    Merlin
    Maître des clés

    Bonjour, j’ai testé, ça ne fonctionne pas. J’ai déplacé la parenthèse mal placée à la ligne 4 : if (this.getField(“R.1.” + i) === null) mais j’ai une erreur à la ligne 5 : app.alert(“Le champ ” + this.getField(“R.1.” + i).name + ” n’existe pas.”);

    Doc:Open:5: TypeError: this.getField(…) is null

    Mea culpa, je n’avais pas vérifié. Il faut placer le nom du champ en variable.

    #74518
    michel c.
    Participant

    J’ai essayé le script de BB qui fonctionne parfaitement.

    Je l’ai modifié en fonction de mes besoins.

    Je préfère qu’il n’y ait pas de boite de dialogue qui s’ouvre pour la saisie des noms de champs, j’ai supprimé cette fonctionnalité (je vais la garder dans un coin pour moi mais je préfère simplifier le formulaire pour mes collègues qui vont l’utiliser)

    En fonction du nom de champ, les indices a et b de départ ne sont pas les mêmes :

    • pour les champs Question ; Q et R les indices commencent à 1.1
    • pour les champs cAc : les indices commencent à 1.0
    • pour les champs Verifier ; Recommencer et Aide : les indices commencent à 1.0

    Le script modifié a l’air de bien fonctionner :

    var reponse="Titre,TQ,Question,Q,R,Aide,Verifier,Recommencer,cAc,Doc";

    var reponse=reponse.replace(/[,]{2,}/g,",").replace(/^,/,"").replace(/,$/,"");
    var aVerifier=reponse.split(",");
    var lesSeries=[];
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    for (var j=0; j<aVerifier.length; j++) {
    var RegExTest=new RegExp("^"+aVerifier[j]+"\\.(\\d+)\\.(\\d+)$");
    var OK=nomChamp.match(RegExTest);
    if (OK) {
    var ind1=OK[1];
    var ind2=OK[2];
    if (lesSeries[j]==undefined) lesSeries[j]=[aVerifier[j],[]];
    if (lesSeries[j][1][ind1]==undefined) lesSeries[j][1][ind1]=[ind1,[]];
    if (lesSeries[j][1][ind1][1][ind2]==undefined) lesSeries[j][1][ind1][1][ind2]=[ind2];
    break;
    }
    }
    }
    var txt=""

    for (var i=0; i<lesSeries.length; i++) {
    if (lesSeries==undefined) txt+="Il n'y a pas de champ \""+aVerifier+"\" avec indices.\r";
    else {
    if (aVerifier=="Titre") {
    for (var j=0; j<lesSeries[1].length; j++) {
    if (lesSeries[1][j]==undefined) txt+="Il n'y a pas d'indice de premier niveau \""+aVerifier+"."+[j]+"\".\r";
    else {
    for (var k=0; k<lesSeries[1][j][1].length; k++) {
    if (lesSeries[1][j][1][k]==undefined) txt+="Il n'y a pas d'indice de second niveau \""+aVerifier+"."+[j]+"."+k+"\".\r";
    }
    }
    }
    }

    if (aVerifier=="Question" || aVerifier=="Q" || aVerifier=="R" || aVerifier=="TQ") {
    for (var j=1; j<lesSeries[1].length; j++) {
    if (lesSeries[1][j]==undefined) txt+="Il n'y a pas d'indice de premier niveau \""+aVerifier+"."+[j]+"\".\r";
    else {
    for (var k=1; k<lesSeries[1][j][1].length; k++) {
    if (lesSeries[1][j][1][k]==undefined) txt+="Il n'y a pas d'indice de second niveau \""+aVerifier+"."+[j]+"."+k+"\".\r";
    }
    }
    }
    }

    if (aVerifier=="cAc") {
    for (var j=1; j<lesSeries[1].length; j++) {
    if (lesSeries[1][j]==undefined) txt+="Il n'y a pas d'indice de premier niveau \""+aVerifier+"."+[j]+"\".\r";
    else {
    for (var k=0; k<lesSeries[1][j][1].length; k++) {
    if (lesSeries[1][j][1][k]==undefined) txt+="Il n'y a pas d'indice de second niveau \""+aVerifier+"."+[j]+"."+k+"\".\r";
    }
    }
    }
    }

    if (aVerifier=="Verifier" || aVerifier=="Recommencer" || aVerifier=="Aide") {
    for (var j=1; j<lesSeries[1].length; j++) {
    if (lesSeries[1][j]==undefined) txt+="Il n'y a pas d'indice de premier niveau \""+aVerifier+"."+[j]+"\".\r";
    else {
    for (var k=0; k<lesSeries[1][j][1].length; k++) {
    if (lesSeries[1][j][1][k]==undefined) txt+="Il n'y a pas d'indice de second niveau \""+aVerifier+"."+[j]+"."+k+"\".\r";
    }
    }
    }
    }

    }
    }

    console.clear();
    console.show();
    console.println(txt);

     

     

     

    Il me reste quelques modifications encore à apporter :

    S’il n’y a aucun message à afficher : ne pas afficher la console
    pour tout champ nommé Verifier.a.0 faire apparaitre un message s’il n’existe pas de champ nommé Recommencer.a.0
    pour tout champ nommé Aide.a.0 faire apparaitre un message s’il n’existe pas de champ nommé Aide.a.1

    Je vais me pencher là dessus.

    Merci beaucoup en tout cas pour ce script !

    • Cette réponse a été modifiée le il y a 1 mois par michel c..
    • Cette réponse a été modifiée le il y a 1 mois par michel c..
    #74524
    bebarth
    Maître des clés

    bonjour,
    Dans les boucles de vérifications, i est le premier indice et j le second. Donc si il y a des seconds indices qui commencent à 0, il faut écrire : “for (var j=0; j<lesSeries[1].length; j++)…”

    S’il n’y a aucun message à afficher : ne pas afficher la console

    ...
    if (txt) {
    console.clear();
    console.show();
    console.println(txt);
    }

    Pour info, var reponse=reponse.replace(/[,]{2,}/g,",").replace(/^,/,"").replace(/,$/,""); supprime les éventuelles virgules en début et fin de chaine, et remplace les virgules multiples par une simple. J’avais rajouté cette ligne au cas ou il y avait une erreur de frappe dans la boite de dialogue, mais cette ligne n’est pas nécessaire si on écrit la chaine dans la ligne de code. Je suppose que celui qui lancera le script fera attention à ce qu’il écrit !

    @+
    😎

    #74525
    michel c.
    Participant

    Merci beaucoup !!!

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