폴더의 스크립트에 연결된 버튼의 동적 목록안녕하세요, JMP 팀원 여러분!
나는 참조된 폴더에 있는 모든 스크립트에 연결되는 버튼이 있는 동적 창을 가질 수 있는 방법에 대한 지침을 얻고 싶었습니다. 따라서 폴더에 두 개의 스크립트가 있으면 두 개의 버튼 상자가 있는 창이 생깁니다. 50개가 있다면 버튼 상자도 50개가 됩니다. 이상적으로는 버튼 상자를 정렬할 "열" 수를 창에 동적으로 알려주는 방법이 있을 수 있습니다.
어떤 도움이라도 주시면 감사하겠습니다!
스티브
자동화 및 스크립팅Re: 폴더의 스크립트에 연결된 버튼의 동적 목록다음은 JMP용 샘플로 설치된 스크립트를 사용하는 샘플입니다. JMPPRO가 없는 경우 디렉토리 참조를 JMPPRO에서 JMP로 변경해야 합니다. 또한 버전 번호 18을 사용 중인 버전 번호로 변경해야 합니다.
Names Default To Here( 1 );
dir = "C:\Program Files\JMP\JMPPRO\18\Samples\Scripts";
files = Files In Directory( dir );
For( i = N Items( files ), i >= 1, i--,
If( Word( -1, files[i], "." ) != "jsl",
Remove From( files, i, 1 )
)
);
theExpr = "";
For Each( {scr}, files,
theExpr = theExpr || ",ButtonBox(\!"" || Word( -2, scr, "./\" ) || "\!", include(\!""
|| dir || "\" || scr || "\!") )"
);
Eval(
Parse(
"nw = New Window( \!"Scripts\!",
Outline Box( \!"Select Script to Run\!",
Lineup Box( N Col( 4 )"
|| theExpr || " )
)
);"
)
);

나는 Eval(Parse()) 방법론을 사용하지 않는 것을 선호하지만 더 읽기 쉬운 구문 버전을 작업하기에는 너무 늦은 것으로 판명되었습니다. 이 방법이 작업을 수행합니다. 내 코드를 개선할 다른 커뮤니티 회원을 찾아보세요.
Re: 폴더의 스크립트에 연결된 버튼의 동적 목록@txnelson 코드가 가장 깔끔하지 않다고 느낄 수도 있지만 훌륭하게 작동합니다! 도움과 빠른 응답에 감사드립니다!!
스티브
Re: 폴더의 스크립트에 연결된 버튼의 동적 목록
Re: 폴더의 스크립트에 연결된 버튼의 동적 목록Jim 코드의 약간 다른 버전(Filter Each를 사용하여 .jsl 파일 목록 가져오기, Eval(EvalExpr())을 사용하여 경로와 함께 버튼 추가)
Names Default To Here(1);
dir = "$SAMPLE_SCRIPTS/";
dir = Convert File Path(dir, windows);
files = Files In Directory(dir);
jslfiles = Filter Each({filename}, files, Word(-1, filename, ".") == "jsl");
// Not sure how you would like to determine column count, but with Lineup box it is fairly easy
lub = Lineup Box(N Col(4));
For Each({filename}, jslfiles,
Eval(EvalExpr(
lub << Append(Button Box(filename,
nw = New Window(Expr(filename),
Script Box(Load Text File(Expr(dir || filename)), "JSL", 600, 600)
);
));
));
);
nw = New Window("Scripts in " || dir,
Outline Box("Click to Open a Script",
lub
);
);
수행 중인 작업에 따라 각 버튼이 호출하는 기능/표현을 고려하는 것도 고려해 볼 수 있습니다. 강력한 방식으로 수행하려면 약간의 추가 작업이 필요하므로 이러한 간단한 솔루션을 만드는 방법을 아는 것은 항상 좋은 생각입니다.
Re: 폴더의 스크립트에 연결된 버튼의 동적 목록@jthi 및 @txnelson 이것에 대해 한 번 더 생각해 볼 수 있다면:
Line up 상자에 대한 값이 있는 숫자 편집 상자에 추가하고 숫자 편집 상자의 값을 적용하여 창에서 스크립트 버튼의 방향을 변경하는 버튼 상자를 추가하려면 어떻게 해야 할까요? 바라보다?
그래서 이런 것

Re: 폴더의 스크립트에 연결된 버튼의 동적 목록이것은 당신이 그것을 어떻게 할 수 있는지에 대한 아이디어를 줄 수 있습니다
Names Default To Here(1);
init_cols = 4;
dir = "$SAMPLE_SCRIPTS/";
dir = Convert File Path(dir, windows);
files = Files In Directory(dir);
jslfiles = Filter Each({filename}, files, Word(-1, filename, ".") == "jsl");
// Not sure how you would like to determine column count, but with Lineup box it is fairly easy
lub = Lineup Box(N Col(init_cols));
For Each({filename}, jslfiles,
Eval(EvalExpr(
lub << Append(Button Box(filename,
nw = New Window(Expr(filename),
Script Box(Load Text File(Expr(dir || filename)), "JSL", 600, 600)
);
));
));
);
nw = New Window("Scripts in " || dir,
Outline Box("Click to Open a Script",
V List Box(
Lineup Box(N Col(2),
Button Box("Press to update Col count", << Set Function(function({this},
lub << N Col((this << sib) << get)
))),
Number Edit Box(init_cols)
),
lub
)
);
);
Number Edit Box는 커밋(<< Set Function())/변경(<< Set Number Changed()) 시에도 트리거할 수 있으므로 버튼이 반드시 필요하지 않습니다.