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 7 mois.
-
CréateurSujet
-
12 juin 2024 à 17:45 #74407michel 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
-
CréateurSujet
-
AuteurRéponses
-
12 juin 2024 à 17:59 #74408MerlinMaître des clés
Bonjour
Installe le module “FormReport” des abracadabraTools et essaie le, il est fort possible qu’il réponde à ta demande.
13 juin 2024 à 07:50 #74411michel c.ParticipantBonjour, 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.
13 juin 2024 à 18:59 #74417bebarthMaître des clésbonjour,
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
@+
😎14 juin 2024 à 07:14 #74422michel c.ParticipantMerci, 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
14 juin 2024 à 08:01 #74423bebarthMaître des clésbonjour,
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…@+
😎14 juin 2024 à 12:23 #74424michel c.ParticipantMerci 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.
14 juin 2024 à 12:42 #74425MerlinMaître des clésMaintenant 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++) {…
14 juin 2024 à 13:50 #74428bebarthMaître des clésMaintenant 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…
@+
😎14 juin 2024 à 21:31 #74431michel c.ParticipantMerci, c’est parfait
14 juin 2024 à 21:32 #74432bebarthMaître des clésL’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);
@+
😎15 juin 2024 à 08:01 #74433michel c.ParticipantMerci 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.15 juin 2024 à 09:05 #74435bebarthMaître des clésbonjour,
Etrange, effectivement ! Juste ce champ… Je regarde dès que je peux.@+
😎15 juin 2024 à 12:41 #74436MerlinMaître des clésLors 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é.
15 juin 2024 à 13:30 #74437bebarthMaître des clésJe 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…
@+
😎15 juin 2024 à 22:03 #74438michel c.ParticipantSinon ta proposition précédente me va très bien.
17 juin 2024 à 15:37 #74469bebarthMaître des clésbonjour,
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 7 mois et 1 semaine par bebarth.
Attachments:
You must be logged in to view attached files.17 juin 2024 à 18:20 #74475michel c.ParticipantMerci, 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 7 mois et 1 semaine par michel c..
Attachments:
You must be logged in to view attached files.17 juin 2024 à 18:42 #74479bebarthMaî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.17 juin 2024 à 19:32 #74483bebarthMaître des clésToujours 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 !@+
😎17 juin 2024 à 20:38 #74484michel c.ParticipantTout est nickel.
Merci
18 juin 2024 à 19:38 #74485michel c.ParticipantBonjour, 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 7 mois et 1 semaine par michel c..
19 juin 2024 à 10:32 #74487MerlinMaître des clésPlutô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
}
}
19 juin 2024 à 10:34 #74488MerlinMaître des clésQue 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
}
}
19 juin 2024 à 13:11 #74489michel c.ParticipantBonjour, 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.19 juin 2024 à 15:54 #74491MerlinMaître des clésDé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.
19 juin 2024 à 18:58 #74492michel c.ParticipantJ’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…
19 juin 2024 à 22:33 #74493bebarthMaî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…
@+
😎20 juin 2024 à 06:29 #74494michel c.ParticipantPour 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
}
20 juin 2024 à 14:06 #74499MerlinMaître des clésDans 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;
}
}
20 juin 2024 à 16:22 #74501michel c.ParticipantBonjour, 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 7 mois par michel c..
Attachments:
You must be logged in to view attached files.20 juin 2024 à 16:56 #74505bebarthMaître des clésbonjour,
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.20 juin 2024 à 17:35 #74512MerlinMaître des clésBonjour, 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.
21 juin 2024 à 12:51 #74518michel c.ParticipantJ’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.1Je vais me pencher là dessus.
Merci beaucoup en tout cas pour ce script !
21 juin 2024 à 18:55 #74524bebarthMaître des clésbonjour,
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 !@+
😎22 juin 2024 à 10:47 #74525michel c.ParticipantMerci beaucoup !!!
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.