Après avoir regroupé plusieurs colonnes importantes, je souhaite masquer les colonnes restantes dans le « grenier ».
Comment obtenir la liste de toutes les colonnes non groupées ?
Obtenir la liste de toutes les colonnes, obtenir la liste des colonnes groupées et supprimer les colonnes groupées de la liste des colonnes.
Names Default To Here(1);
// Setup
dt = Open("$SAMPLE_DATA/Cities.jmp");
dt << group columns("xy", {:X, :y});
dt << group columns("pollutants", :Ozone :: :Lead);
collist = dt << Get Column Names("String");
grouped_list = {};
For Each({groupname}, dt << get column groups names,
c = dt << get column group(groupname);
groupcols = Transform Each({cr}, c, cr << get name);
Insert Into(grouped_list, groupcols);
);
nongrouped = Set Difference(collist, grouped_list);
For Each({colname}, nongrouped,
Column(dt, colname) << Hide(1);
);
wait(0);
Le détour par les cordes est logique 
Je me demande pourquoi c'est nécessaire...
Names Default To Here(1);
// Setup
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dd= dt << group columns("xy", {:X, :y});
ee= dt << group columns("pollutants", :Ozone :: :Lead);
Type(ee)
collist = dt << Get Column Names();
grouped_list = {};
groups= dt << get column groups names;
For Each({groupname},groups,
groupcols= dt << get column group(groupname);
Insert Into(grouped_list, groupcols);
);
Show(grouped_list); // list of names with ":" {:OZONE, :CO, :SO2, :NO, :PM10, :Lead, :X, :Y};
show(collist);// list of names without ":" {city, Latitude, Longitude, ... }
nongrouped = Set Difference(collist, grouped_list); // ?!?! {city, CO, Latitude, Lead, Longitude, Max deg. F Jan, NO, OZONE, PM10, POP,"pop- m"n, Region, SO2, State, X, Y}
détails importants à connaître :
- La valeur de retour de << group columns est une chaîne de caractères - et non un groupe de colonnes.
<< get column group returns a list of columns, not a column group
- Important : cette liste de colonnes répertorie les noms avec un préfixe :
- compare: get column names() renvoie une liste de noms sans le préfixe :
- -> les deux listes ne sont pas compatibles l'une avec l'autre
Solutions de contournement :
- via String
- via les colonnes
convert to list of columns = Function ({myColList},
Transform each({col},myColList, Name Expr(As column(dt, col)))
);
grouped_list = convert to list of columns(grouped_list); // looks like before, but is something completely different
collist = convert to list of columns(collist); //{:city, :Latitude, :Longitude, ... }
nongrouped = Set Difference(collist, grouped_list);
Show (nongrouped) // {:city, :Latitude, :Longitude, :Max deg. F Jan, :POP, :"pop- m"n, :Region, :State};
Quand je travaille avec des colonnes, mon seul objectif est de les convertir en chaînes de caractères, car cela évite de nombreux problèmes. À mon avis, il n'y a aucune raison de manipuler les colonnes autrement que par des chaînes de caractères, puisqu'on peut toujours les convertir en d'autres formats de colonnes. Et, s'il y a une raison de partir d'un autre format, cela n'en vaut pas la peine, d'après mon expérience.