リストを使用して複数の列を再コーディングするFor Each関数を使用して各列を調べ、条件式を使用して複数の列を再コーディングしたいと思います。 次のコードでは正常に再コーディングできません。
<
//再コーディングする列のリストを作成します
ColNames = {dt:Name( "col 1")、dt:Name( "col 2")、
dt:Name( "col 3")、dt:Name( "col 4")};
For Each({listitem}、ColNames、Recode(
listitem、
{小文字(_rcNow)、If(Contains(_rcNow、 "too much")、
「1000」、
_rcNow
)、Regex(_rcNow、 "\ D *(\ d + \。?\ d *)\ D *"、 "\ 1"、GLOBALREPLACE)}
));
私の勘は、For Each句の本文が正しくないということです。つまり、どういうわけか、列をより明確に呼び出す必要があります。
「dt」としてのデータテーブルは、コードの前半で確立されています。 記録として、スクリプトを使用してもエラーは発生しませんが、列が正しく再コーディングされていません。 ありがとう。
スクリプティングRe:リストを使用して複数の列を再コーディングしますたぶん、Recodeの代わりにRecode Columnを使用してから、列を参照する方法を少しいじくり回す必要があります。
これは機能しているようです。少なくとも、列1の1000に置き換えすぎています。
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:リストを使用して複数の列を再コーディングしますここでコードを自分の目的(リスト内のいくつかの列)に適合させましたが、それでも機能しません:
ColNames = {dt:Name("col 1"), dt:Name("col 2"),
dt:Name("col 3"), dt:Name("col4")};
For Each({listitem}, ColNames,
dt<<RECODE column=""></RECODE>再コーディングするために列ごとに移動することを提案しましたか?
Re:リストを使用して複数の列を再コーディングしますRecodeColumnsに必要な列の形式がわかりません。 ColNamesにさまざまな構文を使用していることがわかります(列名のリストを使用しており、列を参照するための古い方法を使用しています(Name( "col name")、 "col name" nに置き換えられました) 、また、ターゲット列で異なる列を使用しています。
このデータテーブルで示した例を実行すると、次のようになります。

私はこれで終わります

これは、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))
)
);