목록을 사용하여 여러 열 다시 코딩For Each 함수로 각 열을 살펴보고 조건부 수식을 사용하여 여러 열을 다시 코딩하고 싶습니다. 다음 코드로 성공적으로 레코딩할 수 없습니다.
<
//다시 코딩할 열 목록 생성
ColNames = {dt:이름("열 1"), dt:이름("열 2"),
dt:이름("열 3"), dt:이름("열 4")};
For Each({listitem}, ColNames, Recode(
목록 항목,
{소문자( _rcNow ), If( 포함( _rcNow, "too much" ),
"1000",
_rc지금
), 정규식( _rcNow, "\D*(\d+\.?\d*)\D*", "\1", GLOBALREPLACE )}
));
내 직감은 For Each 절의 본문이 올바르지 않다는 것입니다. 어떻게든 열을 더 명확하게 호출해야 한다는 것입니다.
"dt"로 데이터 테이블은 코드의 앞부분에서 설정됩니다. 기록을 위해 스크립트를 사용할 때 오류가 발생하지 않지만 열이 제대로 기록되지 않습니다. 감사해요.
스크립팅Re: 목록을 사용하여 여러 열 코드 다시 작성Recode 대신 Recode Column을 사용한 다음 열을 참조하는 방법을 약간 수정해야 할 수도 있습니다.
이것은 작동하는 것 같습니다. 최소한 col 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: 목록을 사용하여 여러 열 코드 다시 작성Recode Columns에 필요한 열 형식이 확실하지 않습니다. ColNames에 대해 다른 구문을 사용하고 있음을 알 수 있습니다(저는 열 이름 목록을 사용하고 있으며 열을 참조하는 데 이전 방식을 사용하고 있습니다(Name("col name"), "col name"n으로 대체됨). , 또한 Target Column에서 다른 열을 사용하고 있습니다.
이 데이터 테이블과 함께 제공한 예제를 실행하면:

나는 이것으로 끝

다음은 새 테이블과 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))
)
);