Donnez vie à vos documents numériques !
 

Extraire un indice

abracadabraPDF Forums PDF – Général Extraire un indice

  • Créateur
    Sujet
  • #74439
    michel c.
    Participant

    Bonjour, j’ai des champs qui se nomment  : Aide.a.b

    Je voudrais exécuter une action à la condition que l’indice b soit supérieur à 0.

    J’avais pensé à ce code :

    var nomChamp=this.getNthFieldName(i);

    var b=nomChamp.substring(10, 11);

    if (b>0) {....action à exécuter...}

    Le souci c’est si le premier indice (a) possède un nombre de caractère supérieur à 1, alors la position de l’indice b va changer.

    Comment faire pour remédier à cela?

    En gros comment extraire la partie d’un nom de champ se trouvant après le 2ème point

    Question annexe : si j’avais voulu extraire l’indice a se trouvant entre les 2 points (et quelque soit la valeur de cet indice) comment aurais-je pu faire? (je n’ai pas besoin de ce code maintenant mais je pense qu’il me sera utile un jour)

    L’autre souci c’est que lorsque je rajoute cette condition (indice b>0), le script me fait planter le logiciel. Ci-dessous le script complet :

    function Raz() {
    decocheCorr();
    this.getField("Erreurs").value = 0;
    this.getField("meca").value = "\u00a9\u0020\u004d\u002e\u0020\u0043\u0061\u0072\u0063\u0061\u0073\u0073\u006f\u006e\u0020\u002d\u0020\u006d\u0065\u0063\u0061\u0030\u0035\u002e\u0066\u0072\u0020\u002d\u0020\u0061\u0064\u006d\u0069\u006e\u0040\u006d\u0065\u0063\u0061\u0030\u0035\u002e\u0066\u0072 ";
    this.getField("meca").readonly = true;
    this.getField("meca").display = display.visible;
    this.getField("cAc.").display = display.hidden;
    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    if (nomChamp.indexOf("R.")==0) {this.getField(nomChamp).display=display.hidden;}
    if (nomChamp.indexOf("Verifier.")==0) {this.getField(nomChamp).readonly=false;}
    if (nomChamp.indexOf("Recommencer.")==0) {this.getField(nomChamp).readonly=false;}
    if (nomChamp.indexOf("Aide.")==0) {
    var i=nomChamp.substring(10, 11);
    if (i>0) {
    this.getField(nomChamp).readonly=true;
    this.getField(nomChamp).display=display.hidden;
    this.getField("Aide.1.0").display=display.visible;
    }
    }
    if (nomChamp.indexOf("Aller")==0) {this.getField(nomChamp).readonly=false;}
    if (nomChamp.indexOf("Doc.")==0) {this.getField(nomChamp).readonly=false;}
    if (nomChamp.indexOf("Vid.")==0) {this.getField(nomChamp).readonly=false;}
    if (nomChamp.indexOf("Raz")==0) {this.getField(nomChamp).readonly=false;}
    if (nomChamp.indexOf("Menu.5")==0) {this.getField(nomChamp).value=1;EditReps();}
    if (nomChamp.indexOf("Menu.17")==0) {this.getField(nomChamp).value="";}
    if (nomChamp.indexOf("Q.")==0) {this.getField(nomChamp).fillColor=color.transparent;
    this.getField(nomChamp).readonly=false;
    if (this.getField(nomChamp).type=="text") {this.getField(nomChamp).value="";}
    else {this.getField(nomChamp).value=this.getField(nomChamp).getItemAt(0,false);}

    }

    var n1=nomChamp.indexOf(".");
    var n2=nomChamp.lastIndexOf(".");
    if (Number(nomChamp.substring(n1+1,n2))>1) {this.getField(nomChamp).display=display.hidden;
    }
    }

    }

    Merci

    • Ce sujet a été modifié le il y a 3 semaines et 6 jours par michel c..
    • Ce sujet a été modifié le il y a 3 semaines et 6 jours par michel c..
    • Ce sujet a été modifié le il y a 3 semaines et 6 jours par michel c..
    Attachments:
    You must be logged in to view attached files.
Affichage de 3 réponses de 1 à 3 (sur un total de 3)
  • Auteur
    Réponses
  • #74457
    Merlin
    Maître des clés

    Bonjour

     

    Le principe :

    // mettre la chaine de caractères en variable
    cTexte = "Aide.12.33";
    // découper la chaine de caractères sur les points qu'elle contient
    // ce qui la transforme en array
    aTexte = cTexte.split(".");
    // l'array "aTexte" comporte donc 3 éléments numérotés de zéro à 2,
    // 1 étant donc celui du milieu
    console.println(aTexte[1]);

     

    Donc ton script devrait ressembler à ça :

    var nomChamp = this.getNthFieldName(i);
    var b = nomChamp.split(".");
    if (Number(b[1]) > 0) {....action à exécuter...}

     

    Number() sert à convertir l’élément chaine de caractères (string) de l’array en chiffre (Number) pour qu’il soit évalué correctement par l’opérateur >

    #74460
    michel c.
    Participant

    Bonjour et merci. Je viens d’essayer avec ce code :

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

    var b = nomChamp.split(".");
    console.println("partie 0 : "+nomChamp[0]+" ; partie 1 : "+nomChamp[1])+" ; partie 2 : "+nomChamp[2];

    }

     

    Console :

    partie 0 : A ; partie 1 : i
    partie 0 : A ; partie 1 : i
    partie 0 : A ; partie 1 : i
    partie 0 : A ; partie 1 : i
    partie 0 : A ; partie 1 : i
    partie 0 : A ; partie 1 : i
    partie 0 : A ; partie 1 : i
    partie 0 : A ; partie 1 : i
    partie 0 : A ; partie 1 : i
    partie 0 : A ; partie 1 : i
    partie 0 : B ; partie 1 : u

     

     

    • Cette réponse a été modifiée le il y a 3 semaines et 5 jours par michel c..
    Attachments:
    You must be logged in to view attached files.
    #74464
    michel c.
    Participant

    La parenthèse était au mauvais endroit.

    J’ai modifié ainsi :

    for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    var a=nomChamp.substring(0, 4);
    var b = nomChamp.split(“.”);
    console.println(“partie 0 : “+a+” ; partie 1 : “+nomChamp[1]+” ; partie 2 : “+nomChamp[2]);

    }

    Pour la partie 1 je n’ai pas de souci. Par contre pour les parties 1 et 2 la console me renvoie le 2ème et le 3ème caractère de chaque nom de champ.

     

    Edit : je viens de comprendre :

    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]);

    console.println("partie 1 : "+P1+" ; partie 2 : "+P2+" ; partie 3 : "+P3);

    }

     

    Merci beaucoup en tout cas, je n’avais jusqu’à présent pas bien saisi la fonction split.

    Grâce à tes explications je pense avoir bien compris maintenant. Ça va m’apporter beaucoup je pense.

    • Cette réponse a été modifiée le il y a 3 semaines et 5 jours par michel c..
    • Cette réponse a été modifiée le il y a 3 semaines et 5 jours par michel c..
Affichage de 3 réponses de 1 à 3 (sur un total de 3)
  • Vous devez être connecté pour répondre à ce sujet.