tableau de données : la colonne de message existe-t-elle (colname) ? (:green_heart:)☐ nouvelle fonctionnalité intéressante
☑ pourrait aider de nombreux utilisateurs !
☑ supprime un « bug »
☐ agréable à avoir
☐ personne n'en a besoin
Existe-t-il une colonne nom de la colonne dans ma table de données ?
C'est l'une des questions les plus souvent posées dans la communauté :
https://community.jmp.com/t5/Discussions/Check-column-name-if-existing/mp/312011/highlight/true#M56...
https://community.jmp.com/t5/Discussions/How-to-check-if-list-of-columns-exist-and-report-those-that...
https://community.jmp.com/t5/Discussions/If-column-exists/td-p/348
https://community.jmp.com/t5/Discussions/how-to-creat-new-column-if-same-name-column-does-not-exist/...
https://community.jmp.com/t5/Discussions/Create-a-new-Row-column-only-if-it-does-not-exist/td-p/3091...
https://community.jmp.com/t5/Discussions/Determining-if-a-column-exists/mp/6268#M6267
https://community.jmp.com/t5/Discussions/Validate-column-name-exists-before-graphing/mp/5088#M5087
Il semble donc que la manière dont cela est mis en œuvre à l’heure actuelle ne soit pas assez simple.
Mais c'est encore plus intéressant – et cela comporte beaucoup de dangers.
Un utilisateur qui ne connaît pas les obstacles associés aux conventions de nommage JSL, écrit très probablement simplement
Contains( dt << Get Column Names(String), "age" )
dans son code. Assez facile…
mais extrêmement dangereux - voir :
https://community.jmp.com/t5/Discussions/check-if-column-exists/mp/572468
Ce qui ressemble à d'étranges discussions de certains nerds de scripts JSL montre que la déclaration ci-dessus, bien sûr, fonctionnera dans de nombreux cas, mais :
échouera une fois que des espaces, des lettres majuscules et des caractères spéciaux seront présents dans les noms de colonnes.
Pour empêcher les utilisateurs d'utiliser un code aussi dangereux, il est préférable de « institutionnaliser »
- c'est-à-dire fournir aux utilisateurs une solution simple qui tient compte automatiquement de tous les pièges.
Mon souhait :
il devrait être possible de demander un tableau de données :
dt << contains column("colname")
Cette fonction peut prendre en compte tous les pièges :
- compare with exact match - or check match for as name("colname")<FONT face="arial,helvetica,sans-serif">, comptabilisation des espaces</FONT>
- distinguer ou ne pas distinguer les lettres minuscules/majuscules
- gérer les caractères spéciaux
L'avantage :
- moins de questions dans la communauté
- un code automatiquement meilleur.
- moins de frustration.
plus de souhaits soumis par 
Automatisation et scriptsRe : table de données : la colonne de message existe (colname) ?Merci 
Re : table de données : la colonne de message existe (colname) ? - Le statut a été modifié en : Oui, restez à l'écoute !Development is exploring a solution: "avoir un message sur la table pour demander directement, commedt << Has Column("age"), potentiellement avec une option permettant de donner des réponses différentes si vous souhaitez des correspondances exactes ou des correspondances de nom (insensible aux espaces et à la casse)".
Passer à Oui, restez à l’écoute.
Re : table de données << la colonne existe ("nom") ? - Statut changé en : EnquêteRe : table de données << la colonne existe ("nom") ?Merci @hogi et @jthi pour leurs commentaires. Changer le statut en enquête.
Re : table de données << la colonne existe ("nom") ? - Statut changé en : AcquittéSalut @hogi , merci pour votre suggestion ! Nous avons pris en compte votre demande et la prendrons en considération.
Re : table de données << la colonne existe ("nom") ?Il pourrait être préférable de faire comprendre à JMP qu'il s'agit de noms de colonnes identiques ou différents ? Cela pourrait bien sûr casser des choses, et ne serait donc peut-être pas si facile à mettre en œuvre.
Quelque chose est un peu confus ici :
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt:age << set name("a g e");
dt:age[1] = 999;
Show(Column(dt, "age")); //Column(dt, "age") = Column("a g e");
Show(dt:age[1]); //dt:age[1] = 999;
dt << New Column("age", Numeric, Ordinal);
Show(Column Name(2) == Column Name(6)); // Column Name(2) == Column Name(6) = 1; // Columns don't need unique names?
Show(Column(dt, "age")); //Column(dt, "age") = Column("age");
dt:age[1] = 9999;
Show(dt:age[1]); //dt:age[1] = 9999;
wait(1);
dt << Delete Column("age");
Show(Column(dt, "age")); //Column(dt, "age") = Column("a g e");
Show(dt:age[1]); //dt:age[1] = 999;
Les colonnes suivent-elles un nom spécifique ? Les noms suivants doivent commencer par des caractères alphabétiques ou un trait de soulignement , mais les espaces sont importants (parfois) pour les colonnes. Peut-être que le problème (s'il y en a un) est simplement de savoir comment fonctionne le référencement des colonnes ?