Mehrere Spalten mit Liste umcodierenIch möchte mehrere Spalten mit einer bedingten Formel neu codieren, indem ich jede Spalte mit einer For Each-Funktion durchgehe. Ich kann mit dem folgenden Code nicht erfolgreich recodieren:
<
//Liste der umzucodierenden Spalten erstellen
Spaltennamen = {dt:Name("Spalte 1"), dt:Name("Spalte 2"),
dt:Name("Spalte 3"), dt:Name("Spalte 4")};
For Each({listitem}, ColNames, Recode(
Listenpunkt,
{Kleinbuchstaben( _rcNow ), If( Contains( _rcNow, "too much" ),
"1000",
_rcNow
), Regex( _rcNow, "\D*(\d+\.?\d*)\D*", "\1", GLOBALREPLACE )}
));
Meine Vermutung ist, dass der Körper der For Each-Klausel falsch ist – dass ich die Spalten irgendwie klarer benennen muss.
Die Datentabelle als "dt" wird früher im Code eingerichtet. Fürs Protokoll: Ich erhalte keinen Fehler, wenn ich das Skript verwende, aber die Spalten werden nicht richtig neu codiert. Vielen Dank.
SkripterstellungBetreff: Mehrere Spalten mit Liste umcodierenVielleicht müssen Sie nur Recode Column anstelle von Recode verwenden und dann ein wenig daran basteln, wie Sie auf Spalten verweisen.
Dies scheint zu funktionieren, zumindest wird in Spalte 1 zu viel durch 1000 ersetzt:
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))
)
);Betreff: Mehrere Spalten mit Liste umcodierenIch habe den Code hier für meine Zwecke angepasst (mehrere Spalten in der Liste), aber es funktioniert immer noch nicht:
ColNames = {dt:Name("col 1"), dt:Name("col 2"),
dt:Name("col 3"), dt:Name("col4")};
For Each({listitem}, ColNames,
dt<<RECODE column=""></RECODE>Wollten Sie vorschlagen, dass ich Spalte für Spalte umcodiere?
Betreff: Mehrere Spalten mit Liste umcodierenIch bin mir nicht sicher, welche Formate für Spalten Recode Columns benötigt. Sie können sehen, dass wir unterschiedliche Syntaxen für ColNames verwenden (ich verwende eine Liste von Spaltennamen, und Sie verwenden die alte Methode, um Spalten zu referenzieren (Name ("col name"), es wurde durch "col name" n ersetzt) , außerdem verwenden wir verschiedene Spalten in der Zielspalte.
Wenn Sie das Beispiel ausführen, das ich mit dieser Datentabelle gegeben habe:

Ich schließe damit ab

Hier ist ein aktualisiertes Beispiel mit einer neuen Tabelle und weiteren Spalten, die der ColNames-Liste hinzugefügt wurden
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))
)
);
Betreff: Mehrere Spalten mit Liste umcodierenDanke für Ihre Hilfe! Jordan Hiller hat mir geholfen, Ihre ursprüngliche Antwort zu verstehen. Ich verstehe nicht, warum die Verwendung der Spaltenliste als Zeichenfolgen funktioniert, während die Verwendung einer Liste der tatsächlichen Spalten nicht funktioniert, aber ich folge jetzt trotzdem Ihrer Lösung. Hilfreich zu sehen, wie Spaltennamen jetzt auch aufgerufen werden. Gute Erinnerung. Danke noch einmal.