Qu'est-ce qui a inspiré cette demande de liste de souhaits ?
J'écris toujours des scripts plus ou moins compliqués pour "nettoyer" mes tables de données (supprimer les scripts de table, les variables de table, les propriétés des colonnes, ...)
Quelle amélioration souhaiteriez-vous voir ?
Propose une plateforme simple pour nettoyer les tables de données. Cela devrait permettre de supprimer les scripts de table, les variables de table, les propriétés de colonne, les états de ligne et toutes les différentes modifications. Dans le meilleur des cas, l'utilisateur pourrait décider lesquels supprimer. Certains d'entre eux pourraient être implémentés dans Subset, mais j'ai l'impression que cela devrait également être une plateforme distincte.
Pourquoi cette idée est-elle importante ?
Facilite la création de nouvelles tables de données à partir de tables existantes sans qu'elles ne transmettent des informations non pertinentes.
Idée intéressante @jthi . Comment fais-tu cela aujourd'hui ?
Selon les cas, soit je :
- Faites-les manuellement
- Écrivez-les (s'il s'agit d'automatisation)
- Parfois, je saute le nettoyage et je peux me retrouver avec une table de données un peu en désordre, mais ce n'est pas un problème jusqu'à ce que je partage la table
J'écrirai très probablement un module complémentaire (j'ai déjà commencé mais je suis tombé sur une « petite » prolifération de fonctionnalités avec toutes sortes de fonctionnalités inutiles) pour effectuer ces tâches spécifiques de nettoyage des « métadonnées » comme je les fais assez régulièrement.
En attendant que le souhait reçoive suffisamment de Kudos, ce script pourrait aider.
Il crée un script pour la table de données actuelle et, selon les paramètres, il supprime les scripts, les propriétés des colonnes et l'expression add rows().
Names Default To Here( 1 );
removeScripts = 1;
removeColumnProperties = 1;
remove rows = 1;
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << copy table script( "no data" );
tableScript = Eval( Eval Expr( Parse( Expr( Get Clipboard() ) ) ) );
tableScriptList = Substitute( Name Expr( tableScript ), Expr( New Table() ), Expr( List() ) );
If( removeScripts,
tableScriptList = Filter Each( {part}, tableScriptList, Not( Head( Part ) == Expr( New Script() ) ) )
);
tableScriptList = Transform Each( {part}, tableScriptList,
If(
Head( part ) == Expr( New Column() ) & removeColumnProperties,
Substitute( Name Expr( part ), Extract Expr( part, Set Property( Wild List() ) ), . ),
Head( part ) == Expr( Add Rows() ) & remove rows, .,
Name Expr( part )
)
);
newtableScript = Substitute( Name Expr( tableScriptList ), Expr( List() ), Expr( New Table() ) );
newtableScript;
C'est loin d'être idéal.
Le substitut est assez dangereux : il ne remplace pas seulement l’expression que l’utilisateur voulait remplacer, il remplace toutes les expressions correspondantes !
par exemple, toute liste qui reste à la fin du script sera remplacée par New Table() !!!
Toute nouvelle table() qui se trouve dans un script de table sera remplacée par List() [puis par New table() à la fin :]
Connaissez-vous une solution de contournement pour empêcher JMP de le faire ?
Chef de remplacement ?
C'est avec ce problème en tête que j'ai écrit ce souhait :
:folded_hands: Indexation des expressions : accès en lecture et en écriture
Une fois disponible, je mettrai à jour le script et le rendrai plus robuste.