table de données : la colonne de message existe (colname) ?☐ nouvelle fonctionnalité intéressante
☑ pourrait aider de nombreux utilisateurs !
☑ supprime un « bug »
☐ agréable à avoir
☐ personne n'en a besoin
Y a-t-il une colonne nom de famille 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 pour le moment ne soit pas assez simple.
Mais c’est encore plus intéressant – et comporte de nombreux dangers.
Un utilisateur qui ne connaît pas les pierres d'achoppement associées aux conventions de dénomination JSL écrit 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 des 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 majuscules et des caractères spéciaux seront dans les noms de colonnes.
Pour empêcher les utilisateurs d'utiliser un code aussi dangereux, le mieux est de "l'institutionnaliser"
- c'est-à-dire fournir aux utilisateurs une solution simple qui tient automatiquement compte 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 tenir compte de tous les pièges :
- comparer avec la correspondance exacte - ou vérifier la correspondance comme nom("nomcol")<FONT face="arial,helvetica,sans-serif"> , prenant en compte les espaces</FONT>
- distinguer ou ne pas distinguer les lettres minuscules/majuscules
- gérer les caractères spéciaux
Le bénéfice:
- moins de questions dans la communauté
- automatiquement un meilleur code.
- moins de frustration.
Automatisation et scriptsRe : table de données : la colonne de message existe (colname) ? - Le statut a été modifié en : Oui, restez à l'écoute !Le développement explore une solution : " avoir un message sur la table pour demander directement, comme dt << A une colonne ("âge") , 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 commenter. 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 ? Suivez les noms doivent commencer par des caractères alphabétiques ou un trait de soulignement , mais les espaces comptent (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 ?