스크립트 색인에 없습니다. JSL로 마무리해주세요. 매우 감사합니다!

제공된 예제는 사용자가 선택한 행이 있는 일반적인 JSL 사용 사례가 아니지만 Iwx228은 흥미로운 위시리스트 항목을 표시합니다.
Excel VBA에는 전역 교체를 수행하는 스프레드시트 방법(함수)이 있습니다.JMP의 Substitute() 및 Substitute Into() 함수는 패턴에 대한 요구 사항이 없고 전역 교체만 필요하므로 정규 표현식의 오버헤드 없이 이러한 사용자 요구를 충족합니다. 누락된 것은 이를 가져와서 현재 선택 항목에 적용하는 것뿐입니다. 논리적 구문은 다음과 같습니다.
dt << 바꾸기( searchStr, replacementStr, 선택 항목에 대한 인수는 행과 선택한 열을 선택하거나 모두 선택하거나.....)
다음은 사용 예가 포함된 바꾸기Cell()이라는 프로토타입 스크립트입니다.
참고할 몇 가지 항목:
- 현재 데이터에 적용됩니다. 현재 데이터 테이블이 없으면 중단됩니다.
- 선택한 열이 없으면 중단됩니다. 선택한 행이 없으면 선택한 열의 모든 행이 사용됩니다.
- 작성된 대로 이 함수는 문자 열에만 적용됩니다. char() 및 num() 함수를 사용하여 숫자 열로 확장할 수 있습니다.
- 행별로 교체되므로 반복이 한 번 발생합니다.
- 이전에 게시한 LFunc()를 사용하면 열을 통해 상당히 빠르게 이 작업을 수행할 수 있었지만 이를 단순하게 유지하고 싶었습니다.
- JSL에는 include()를 사용하세요. CTRL + F가 이미 추가 기능을 수행하고 있으므로 추가 기능으로 만들 필요가 없습니다.
ReplaceCell = Function({src,rpl},{cdt, scol, srow, i, j, val},
if(ntable()>0, cdt=current data table(), throw("no table available"));
scol = cdt << get selected columns;
if(nitems(scol) ==0, throw("no columns are selected...aborting"));
srow = cdt << get selected rows();
if (nrow(srow)==0, srow = Transpose(1::nrow(cdt)) ); //if no rows are selected, assume the entire column.
for(i=1, i<=nrow(srow), i++,
for(j=1, j<=nitems(scol), j++,
val = scol[j][srow[i]];
if( IsString(val), scol[j][srow[i]] = Substitute(val, src, rpl) )
);
)//end for i
); //end function
//test cases create a new table with 2 selected columns
ndt = New Table( "Test 1",
Add Rows( 10 ),
New Column( "A",
Character,
"Nominal",
Set Values(
{"A7", "B7", "C7", "D7", "E7", "F7", "G7", "A9", "A79", "A707"}
)
),
New Column( "B",
Character,
"Nominal",
Set Values(
{"M7", "M77", "M07", "MX7", "E7", "E2", "E3", "F9", "G27", "M99"}
)
)
);
//replace all 7's with 1's
ReplaceCell("7","1"); //aborts no selected columns
ndt:A << set selected(1);
ndt:B << set selected(1);
//replace all 7's with 1's
ReplaceCell("7","1");
ndt << bring window to front;
//now try it with selected rows
ndt << select rows([1,2,4,7,9,10]);
ReplaceCell("1","6");
ndt << bring window to front;이것이 원하는 것을 달성하기 위해 JSL로 코딩할 수 있는 모든 방법은 아니지만 Ian의 제안은 내가 해결책으로 제안한 것이기도 합니다.
좋아요. 그러니 아마도 한번 살펴보세요 정규 표현식 .
"전체 셀 값 일치"의 경우 다중 체크박스가 선택되지 않은 경우 대체된 결과입니다. 감사합니다!

내가 올바르게 이해했다면 'Match()' JSL 표현식을 사용해 보세요. 'Cols > Recode'를 사용하여 아래 코드를 생성했습니다.

결과 수식 열에 대해 JSL을 검사합니다. 그리고 '예'입니다. JSL은 VBA와 매우 다릅니다. '도움말 > 책 > 스크립팅 가이드'를 살펴보거나 교육을 받아야 합니다.
NamesDefaultToHere(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
Wait(3);
dt << New Column( "Age 2",
Character,
"Ordinal",
Formula(
Match( :age,
12, "Twelve",
13, "Thirteen",
14, "Fourteen",
15, "Fifteen",
16, "Sixteen",
17, "Seventeen",
Format( :age, "Fixed Dec", 5, 0 )
)
)
);이것이 새로운 경우라면 이 JSL은 그리 효율적이지 않습니다. 새 인스턴스에 대해 코드를 개선할 수 있습니까? 감사합니다!

이것은 그것을하는 한 가지 방법입니다
dt = Current Data Table();
dt:class[dt << get rows where( dt:class == "A1" )] = "A9";
완벽하게 일치하는 대체 항목으로만 작동하는 방식으로 JSL을 작성하려고 했지만 몇 개의 문자만 바꾸고 싶지 않은 경우 JSL을 어떻게 작성합니까? 감사합니다!

당신은 사용할 수 있습니다 데이터 테이블 구독 :
NamesDefaultToHere(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
Wait(3);
maleRows = Loc(dt[0, "sex"], "M");
dt[maleRows, "sex"] = "boy";