Gestion intelligente des colonnes<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Gens,
Comment gérez-vous les colonnes de manière intelligente?
Disons que j'ai un script et une table.
Le script crée des colonnes dans celui-ci.
Pendant que je travaille sur un script, je l'exécute plusieurs fois sur une table. Lorsque le script crée une colonne, il crée plusieurs colonnes portant le même nom mais un nombre différent. Si je me réfère à la colonne créée par son nom plus tard dans le script, cela ferait référence aux anciennes colonnes (comme "Nouvelle colonne", mais pas "Nouvelle colonne 23").
La solution consiste à supprimer une colonne portant ce nom avant de créer. Les problèmes commencent lors de la première utilisation de ce script sur une nouvelle table - lorsqu'il n'y a pas de colonne à supprimer ....
Quoi qu'il en soit, comment réaliseriez-vous l'ajout de la colonne intelligente?
Certains, comme:
Je veux créer une nouvelle colonne avec ce nom. Existe-t-il des colonnes avec ce nom ou un nom qui est ce nom et un nombre (colonnes à dupliquer)? Si oui, alors supprimez-les et créez ma colonne. S'il n'y a pas de telles colonnes, créez simplement une nouvelle colonne portant ce nom ...
Re: gestion intelligente des colonnesOh, c'était facile:
dt = Ouvrir ( "$ sample_data \ Big Class.jmp" ) ;
new_column = "IMC" ;
nouvelle formule = "7 *: poids /: hauteur /: hauteur" ;
SmartColumn = une fonction ({ new_column , nouvelle formule } ,
// ----- Démarrer SmartColumn
expr_missing = Eval Insert ( "col = dt << Nouvelle colonne (new_column, Formula (^ new_formula ^));" ) ;
expr_exists = Eval Insert ( "col = Column (new_column) << Définir la formule (^ new_formula ^) << EvalFormula;" ) ;
Si ( Est manquant ( Est scriptable ( Essayer ( Colonne ( new_column ) ) ) ) ,
eval ( analyser ( expr_missing )) ;
, eval ( analyser ( expr_exists )) ;
) ;
// - Fin SmartColumn
) ;
SmartColumn ( new_column , nouvelle formule ) ;
Re: gestion intelligente des colonnesOk, je pense que je l'ai cloué.
S'il est écrit en tant que fonction, ce ne serait qu'un remplacement intelligent de la colonne add.
Cela prend le nom de la colonne, la formule souhaitée et, si une colonne portant ce nom existe, la met à jour et l'évalue, si elle n'existe pas - créez et définissez la formule. Aucun problème si cette colonne est référencée ailleurs dans d'autres formules.
Est-ce que quelqu'un peut m'aider avec la syntaxe de l'écrire comme une formule prête à l'emploi?
Plus tard, j'ajouterais d'autres propriétés de colonne en tant qu'arguments de fonction.
dt = Ouvrir ( "$ sample_data \ Big Class.jmp" ) ;
new_column = "IMC" ;
nouvelle formule = "700 *: poids /: hauteur /: hauteur" ;
// ----- Démarrer SmartColumn
expr_missing = Eval Insert ( "col = dt << Nouvelle colonne (new_column, Formula (^ new_formula ^));" ) ;
expr_exists = Eval Insert ( "col = Column (new_column) << Définir la formule (^ new_formula ^) << EvalFormula;" ) ;
Si ( Est manquant ( Est scriptable ( Essayer ( Colonne ( new_column ) ) ) ) ,
eval ( analyser ( expr_missing )) ; ,
eval ( analyser ( expr_exists )) ;
) ;
// - Fin SmartColumn
Re: gestion intelligente des colonnesMon erreur sur les disparus "," dans le code que je vous ai envoyé. Je m'excuse pour cela.
Mon intention, avec le code, est de vous donner un moyen de détecter si une colonne donnée est présente.
Si vous avez créé une colonne dont la formule utilise la colonne que vous souhaitez supprimer, le moyen le plus simple de rompre cette dépendance consiste à transformer les valeurs de la colonne dont la formule pointe vers la colonne à supprimer des valeurs plutôt que des valeurs basées sur des formules. Pour ce faire, il vous suffit de supprimer la formule de la colonne et JMP convertira les valeurs en données réelles. Une fois que cela est fait, la colonne d'origine peut être supprimée.
Noms par défaut ici ( 1 )
dt = ouvrir ( "$ SAMPLE_DATA \ big class.jmp" )
// Créer une nouvelle colonne avec une formule
dt << Nouvelle colonne ( "Rapport" , formule (: taille / poids));
// Supprime la propriété de formule et les données de la colonne
// est converti en valeurs réelles, pas en valeurs naturelles
dt: Ratio << supprimer la propriété ( "Formule" )
Re: gestion intelligente des colonnesEn fait, je vais reprendre ça. Il ne permet pas de supprimer des colonnes, si elles sont référencées dans les formules des autres colonnes.
Un autre moyen?
Est-il même possible de récupérer des données ou de modifier une formule pour une colonne, que cette autre colonne a dans sa formule?
Re: gestion intelligente des colonnesCela fonctionnera si vous mettez "," avant le deuxième "dt".
Et vous n'utilisez pas "Throw ()" avec "Try ()"?
Re: gestion intelligente des colonnesVoici ce que j'utilise:
If (Try (column (dt, "") << get nom, "")! = "" Dt << delete colonnes ("<"));