cloner une colonne<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Salut tout le monde,
Je veux cloner une colonne dans la table de données (créer une nouvelle colonne identique en tout sauf son nom). Existe-t-il une manière plus élégante (et robuste) de le faire ou dois-je extraire les valeurs et toutes les propriétés et les affecter à la nouvelle colonne en tant que telles:
dt3 = Ouvrir ( "$SAMPLE_DATA/Voitures.jmp" ) ;
// ajoute une propriété de colonne
dt3 : Faire << Définir la propriété (
"Valeur des couleurs" ,
{ "Acura" = - 13977687 , "Audi" = - 3780931 , "BMW" = - 4222943 , "Buick" = -
13596966 , "Cadillac" = - 2211217 , " Chevrolet " = - 10562780 , "Chrysler" = -
13156647 , "Daihatsu" = - 2078390 , "Esquiver" = - 13182413 , "Aigle" = - 9549600 ,
"Gué" = - 2334147 , "Géo" = - 13772446 , "Honda" = - 9282864 , "Hyundaï" = -
6995852 , "Infiniti" = - 1524612 , "Isuzu" = - 9458080 , "Jeep" = - 14452073 ,
"Lexus" = - 6391856 , "Lincoln" = - 2745505 , "Mazda" = - 10199751 , "Mercedes" =
- 7150697 , "Mercure" = - 10513726 , "Mitsubishi" = - 8381519 , " Nissan " = -
3502441 , "Oldsmobile" = - 3615440 , " Peugeot " = - 13925307 , "Plymouth" = -
11502354 , "Pontiac" = - 7449196 , "Renault" = - 9229791 , "Saab" = - 4074344 ,
"Saturne" = - 13050224 , "Subaru" = - 12565885 , « Suzuki » = - 2068529 , "Toyote" =
- 4494272 , "Volkswagen" = - 11824110 , " Volvo " = - 8734293 , "Yougo" = - 13849421 }
) << colorer la cellule par valeur ;
// cloner la colonne
clone_column = dt3 : Faire << Obtenir le script ;
clone_column ;
Re : cloner une colonneNon, cette interprétation est complètement fausse.
La création de scripts JMP implique généralement l'utilisation d'objets JMP intégrés tels que des tables de données, des colonnes de données ou des plates-formes d'analyse. Vous utilisez ces objets en envoyant un message à l'objet qui indique l'action souhaitée. La forme générale est présentée ici dans les deux versions : en utilisant la fonction JMP réelle et en utilisant l'opérateur équivalent.
Send( object, message );
object << message;
L'objet est représenté par une valeur de référence. Le message est représenté par son nom. Cet exemple s'interprète de la manière suivante :
dt3:Make << Get Script
Envoyez le message Obtenir le scénario à l'objet dénommé dt3 : Faire . Cette référence utilise la forme tableau:colonne . Une référence à une table de données était auparavant stockée dans la variable dt3 . La référence à la colonne est par nom.
Le message Obtenir le scénario peut être envoyé à n'importe quel objet JMP. La méthode 'getter' derrière ce message est remplacée par chaque objet pour renvoyer le script qui reproduira l'objet d'origine. C'est-à-dire qu'il renvoie le code qui clonera l'objet. Ainsi, vous pouvez toujours utiliser le même message pour obtenir le code unique de n'importe quel objet.
Re : cloner une colonneMerci pour l'explication et la réponse rapide. Je suppose que Get est le nom du script qui est "intégré" à jmp et qui est exécuté. Sinon, comment saurait-il cloner la colonne au lieu d'effectuer une autre opération. J'ai beaucoup appris de votre réponse.
Re : cloner une colonneTravaillons dans l'ordre dans lequel l'expression sera évaluée.
dt3:Make << Get script
Le message entraînera le renvoi par JMP du code JSL qui créerait la même colonne.
Eval(dt3:Make << Get script)
Le code JSL est évalué, ce qui donne une nouvelle colonne de données qui est une copie de la colonne :Make d'origine. La fonction Eval() renverra également une référence à cette nouvelle colonne.
Eval(dt3:Make << Get script) << set name("Clone");
Enfin, envoyez à la nouvelle colonne le message pour modifier le nom de la nouvelle colonne à l'aide de la référence d'objet.
Re : cloner une colonneSalut MS, Cela vous dérangerait-il d'expliquer comment cette commande clone la colonne sélectionnée dans un dt ? Eval(dt3:Make << Get script) << set name("Clone"); Je me rends compte que ce n'est normalement pas le genre de question posée ici et c'était il y a 5 ans, mais c'est la commande la plus opaque que j'ai vue dans tous les langages de programmation que j'ai utilisés. Je travaille très bien cependant!Re : cloner une colonneMerci SP ,
Il est vrai que les couleurs ne sont pas très utiles dans une table privée.
le fait est que j'écris un algorithme basé sur un processus heuristique. cela signifie que j'ai besoin d'un script qui ferait ce que je ferais si je devais "lire" moi-même les lignes de données une par une et les interpréter (c'est là que j'ai besoin des couleurs). d'autre part, le script doit être rapide lors de son exécution, donc j'ai besoin de rebondir entre les tables que je vois et celles qui s'exécutent rapidement (privées). cette transition entre les tables visuelles et privées introduit des défis de robustesse lors de l'écriture de scripts sur quelques tables ouvertes.
Ron
Re : cloner une colonneJe ne sais vraiment pas quelle valeur il y a à conserver les propriétés de colonne comme les couleurs de valeur dans une table privée.Si les données sont tout ce qui vous intéresse (généralement vrai pour les tables privées), la méthode plus simple ci-dessous peut être utilisée :
dt3 << Nouvelle colonne ( "Faire un clonage" , Formule ( dt3 : Faire ))
Re : cloner une colonnemerci Dave@Pega-Analytics txnelson ,
C'est ce que je cherchais. Je ne m'attendais pas à ce que la duplication d'une colonne soit si lourde.
voici mon script final:
Noms par défaut ici ( 1 ) ;
dt3 = Ouvrir ( "$SAMPLE_DATA/Voitures.jmp" , privé ) ;
// cloner dans la même table
Éval ( Analyser ( "(dt3<<" || carboniser ( dt3 : Faire << Obtenir le script ) || ") << définir le nom(\!"Clone\!");" )) ;
// preuve que la colonne a été clonée - vérifier le journal
dt3 : Cloner << obtenir le script ;
fermer ( dt3 , pas de sauvegarde ) ;
meilleur,
Ron
Re : cloner une colonneVoici un exemple complet d'une façon d'ajouter le pointeur de table de données :
Eval(Parse("(dtxxx<<"||char(dt3:Make << Get script)||") << set name(\!"Clone\!");"));
Re : cloner une colonneVous pouvez le rendre plus robuste en éditant la variable de script avant l'évaluation, c'est-à-dire ajouter "dt << " à l'expression.
Re : cloner une colonnele problème de robustesse survenait lors de l'utilisation de tables privées puisque le clone était envoyé à une autre table qui n'était pas privée.
Re : cloner une colonneMerci SP ,
Je suis surpris qu'il n'y ait pas de commande jsl pour dupliquer une colonne existante. de plus, si dt3 n'est pas la table active, il crée la nouvelle colonne dans une autre table.
Re : cloner une colonneCela m'a l'air très élégant. Avez-vous rencontré des problèmes de robustesse ?
Si vous ne voulez pas gaspiller de mémoire sur une variable, cela peut être simplifié o oneliner :
Éval ( dt3 : Faire << Obtenir le script ) << définir le nom ( "Cloner" ) ;
Pour cloner plusieurs colonnes, j'envisagerais d'en créer un sous-ensemble, de renommer les colonnes et de mettre à jour avec la table de données d'origine.