한 번에 여러 JSL의 변수를 변경하는 방법안녕,
include()를 사용하여 변수 "todaydate"가 있는 각 JSL에서 여러 JSL을 실행합니다. 그러나 이제 include를 사용하여 모든 JSL을 실행하고 싶지만 모든 JSL에서 오늘 날짜를 03Jun2023으로 변경하고 싶습니다. 어떻게 할 수 있습니까?
todaydate = 형식 날짜( Today(), "ddmonyyyy" );
나는 생각하고 있었다 :
오늘날짜 = "2023년 6월 3일"; // 이것은 모든 10 jsl에서 대체됩니다.
포함(jsl1);
포함(jsl2);
.
.
.
포함(jsl10);
자동화 및 스크립팅Re: 여러 JSL에서 한 번에 변수를 변경하는 방법"todaydate"를 별도의 NameSpace에 배치해야 합니다.이는 사용자가 만든 NameSpace이거나 ":"로 정의된 전역 NameSpace를 사용할 수 있습니다.아래는 2개의 스크립트입니다.첫 번째 스크립트를 실행한 다음 두 번째 스크립트를 실행하면 "::a"로 참조되는 전역 NameSpace 변수 "a"가 두 JSL 스크립트에서 모두 알려져 있음을 알 수 있습니다.
스크립트 1
Names Default To Here( 1 );
a = 5;
::a = 7;
스크립트 2
Names Default To Here( 1 );
Try( Show( a ), Show( "a is not known" ) );
Show( ::a );
Re: 여러 JSL에서 한 번에 변수를 변경하는 방법죄송합니다. 여기서는 좀 느려요.
내 10 jsl의 todaydate를 ::todaydate로 변경해야 한다는 뜻인가요? 그것은 모든 10jsl에서 사용되는 다른 줄에서 발생하는 모든 todaydate가 ::todaydate로 변경되어야 한다는 것을 의미합니까?
Re: 여러 JSL에서 한 번에 변수를 변경하는 방법짧은 대답은 '예'입니다.시간을 내어 NameSpaces에 대한 문서를 읽어보시기 바랍니다.
사용할 수 있는 유일한 다른 방법은 항상 전역 네임스페이스에서 모든 스크립트를 실행하는 것입니다.문제는 모든 스크립트에서 모든 변수를 사용할 수 있다는 것입니다. 한 스크립트에서 "X"라는 변수가 변경되면 "X"라는 변수가 있는 모든 스크립트도 변경됩니다.
내가 일반적으로 수행한 작업은 모든 스크립트에서 선언하는 네임스페이스를 정의하는 것입니다.따라서 모든 스크립트에서 사용할 수 있도록 모든 정보를 제어할 수 있습니다.
names default to here(1);
if(isNamespace(nsCommon)==0,
nsCommon = New Namespace("CommonSpace")
);
// Set today's date in the nsCommon namespace
nsCommon:todaydate = Format date( Today(), "ddmonyyyy" );
// set the local-to-this-script todaydate variable to the
// value of the nsCommon value of todaydate.
todaydate = nsCommon:todaydate;Re: 한 번에 여러 JSL에서 변수를 변경하는 방법이를 처리하는 방법에는 여러 가지가 있지만 스크립트에 따라 많이 달라집니다.
다른 스크립트에서 todaydate는 어떻게 정의됩니까? jsl1, jsl2...는 어떤 유형의 스크립트입니까? 함수/표현식을 만들고 기본 jsl 파일에서 호출할 수 있습니까?
include를 사용할 때 포함이 Jim이 말한 것처럼 변수를 덮어쓰므로 덮어쓰지 않는 한 다른 스크립트에서도 작동해야 하지만 << New Context 및 << Names Default To Here in Include()를 사용하여 "보호"할 수 있습니다. 물론 이것은 해당 스크립트에서 동일한 변수를 쉽게 사용하는 것을 방지하고 네임스페이스를 사용하는 것은 이 문제를 해결하는 매우 쉬운 솔루션입니다.
Names Default To Here(1);
Clear Log();
todaydate = Format Date(Today(), "ddmonyyyy");
jsl1_str = "\[Names Default To Here(1);
Show(todaydate);
]\";
jsl2_str = "\[Names Default To Here(1);
todaydate = 1;
Show(todaydate);
]\";
Save Text File("$TEMP/661243_jsl1.jsl", jsl1_str);
Save Text File("$TEMP/661243_jsl2.jsl", jsl2_str);
Include("$TEMP/661243_jsl1.jsl");
Include("$TEMP/661243_jsl1.jsl", << New Context);
Include("$TEMP/661243_jsl1.jsl", << New Context, << Names Default To Here);
Include("$TEMP/661243_jsl2.jsl", << New Context);
show(todaydate); // not overwritten
Include("$TEMP/661243_jsl2.jsl", << New Context, << Names Default To Here);
show(todaydate); // not overwritten
Include("$TEMP/661243_jsl2.jsl");
show(todaydate); // overwritten
Try(Delete File("$TEMP/661243_jsl1.jsl"));
Try(Delete File("$TEMP/661243_jsl2.jsl"));
스크립팅 가이드에는 JMP 스크립팅에 관한 많은 정보가 있으며, 아래는 이 주제와 관련된 몇 가지 링크입니다.
스크립팅 안내서 > 프로그래밍 방법 > 고급 프로그래밍 개념 > 스크립트 포함
스크립팅 안내서 > 프로그래밍 방법 > 고급 범위 지정 및 네임스페이스
스크립팅 안내서 > 프로그래밍 방법 > 고급 프로그래밍 개념 > 고급 기능
스크립팅 안내서 > JSL 빌딩 블록 > 이름 해석 규칙
도움말 페이지에서 화살표를 눌러 더 많은 항목을 볼 수도 있습니다.

또는 왼쪽 메뉴 사용

Re: 한 번에 여러 JSL에서 변수를 변경하는 방법정보 주셔서 감사합니다. 이것들은 나에게 새로운 것이며 확실히 내 작업에 도움이 될 것입니다.