Recoder plusieurs colonnes avec la listeJe souhaite recoder plusieurs colonnes à l'aide d'une formule conditionnelle en parcourant chaque colonne avec une fonction For Each. Je n'arrive pas à recoder avec succès avec le code suivant :
<
//Créer la liste des colonnes à recoder
NomsCol = {dt:Nom("col 1"), dt:Nom("col 2"),
dt:Nom("col 3"), dt:Nom("col 4")} ;
Pour chaque({listitem}, ColNames, Recode(
élément de liste,
{Minuscule( _rcNow ), Si( Contient( _rcNow, "trop" ),
"1000",
_rcNow
), Regex( _rcNow, "\D*(\d+\.?\d*)\D*", "\1", GLOBALREPLACE )}
));
Mon intuition est que le corps de la clause For Each est incorrect - que je dois en quelque sorte appeler les colonnes plus clairement.
La table de données en tant que "dt" est établie plus tôt dans le code. Pour mémoire, je n'obtiens pas d'erreur lorsque j'utilise le script mais les colonnes ne sont pas recodées correctement. Merci.
ScriptRe : Recoder plusieurs colonnes avec la listePeut-être avez-vous simplement besoin d'utiliser Recode Column au lieu de Recode, puis de bricoler un peu sur la façon de référencer les colonnes.
Cela semble fonctionner, au moins il remplace trop par 1000 dans la col 1 :
Names Default To Here(1);
dt = New Table("Untitled 2",
Add Rows(1),
New Column("col 1", Character, "Nominal", Set Values({"too much"})),
New Column("col 2", Character, "Nominal", Set Values({"a"})),
New Column("col 3", Character, "Nominal", Set Values({"c"})),
New Column("col 4", Character, "Nominal", Set Values({"d"}))
);
//Create list of columns to be recoded
ColNames = {"col 1"};
For Each({listitem}, ColNames,
dt << Recode Column(
//As Column(dt, listitem),
AsColumn(listitem),
{Lowercase(_rcNow), If(Contains(_rcNow, "too much"),
"1000",
_rcNow
), Regex(_rcNow, "\D*(\d+\.?\d*)\D*", "\1", GLOBALREPLACE)},
Update Properties(1),
Target Column(Column(listitem))
)
);Re : Recoder plusieurs colonnes avec la listeJ'ai adapté le code ici pour mes besoins (plusieurs colonnes dans la liste) mais cela ne fonctionne toujours pas :
ColNames = {dt:Name("col 1"), dt:Name("col 2"),
dt:Name("col 3"), dt:Name("col4")};
For Each({listitem}, ColNames,
dt<<RECODE column=""></RECODE>Me suggériez-vous d'aller colonne par colonne pour recoder ?
Re : Recoder plusieurs colonnes avec la listeJe ne suis pas sûr des formats de colonnes requis par Recode Columns. Vous pouvez voir que nous utilisons différentes syntaxes pour ColNames (j'utilise une liste de noms de colonnes et vous utilisez l'ancienne méthode pour référencer les colonnes (Name("col name"), il a été remplacé par "col name"n) , nous utilisons également différentes colonnes dans Target Column.
Si exécutez l'exemple que j'ai donné avec cette table de données :

je me retrouve avec ça

Voici un exemple mis à jour avec une nouvelle table et plus de colonnes ajoutées à la liste ColNames
Names Default To Here(1);
dt = New Table("Untitled 2",
Add Rows(3),
Compress File When Saved(1),
New Column("col 1", Character, "Nominal", Set Values({"1000", "too much", "too much"})),
New Column("col 2",
Character,
"Nominal",
Set Values({"too much", "", ""}),
Set Display Width(65)
),
New Column("col 3", Character, "Nominal", Set Values({"c", "", "too much"})),
New Column("col 4", Character, "Nominal", Set Values({"d", "", ""}))
);
wait(1);
//Create list of columns to be recoded
ColNames = {"col 1", "col 2", "col 3", "col 4"};
For Each({listitem}, ColNames,
dt << Recode Column(
//As Column(dt, listitem),
As Column(listitem),
{Lowercase(_rcNow), If(Contains(_rcNow, "too much"),
"1000",
_rcNow
), Regex(_rcNow, "\D*(\d+\.?\d*)\D*", "\1", GLOBALREPLACE)},
Update Properties(1),
Target Column(Column(listitem))
)
);
Re : Recoder plusieurs colonnes avec la listeMerci pour ton aide! Jordan Hiller m'a aidé à comprendre votre réponse initiale. Je ne comprends pas pourquoi l'utilisation de la liste des colonnes en tant que chaînes fonctionne alors que l'utilisation d'une liste de colonnes réelles ne fonctionne pas, mais je suis quand même votre solution maintenant. Utile pour voir comment les noms de colonne sont également appelés maintenant. Bon rappel. Merci encore.