사용자 입력을 받아 변수로 변환하는 데 문제가 있습니다. 이를 위해 사용하려는 스크립트는 이 단락 아래에 붙여넣어졌습니다. 동일한 스크립트를 여러 번 실행했는데 편집하지 않고 로그에 두 가지 다른 결과가 표시됩니다. 이 스크립트는 다음과 같습니다.
names default to here(1);
clear log();
close all(journals, no save);
close all(data tables, no save);
defuplim = format(today(),"ddMonyyyy");
deflowlim = format(today() - in days(730), "ddMonyyyy");
New Window("Pick Your Dates in ddMonyyyy format",
<<Modal,
<<return result,
V List Box(
Text Box("Start Date:"),
str1=Text Edit Box(deflowlim),
text box("End Date:"),
str2=Text Edit Box(defuplim)
),
H List Box (Button Box ("OK"), Button Box ("Cancel"))
);
lowlim = str1 << get text;
uplim = str2 << get text;
lowlim=informat(lowlim);
uplim= informat(uplim);
show (lowlim);
show (uplim);
로그의 첫 번째 결과는 스크립트가 생성할 것으로 예상되는 결과이며 아래에 따옴표로 복사하여 붙여넣습니다.
“
lowlim = 2015년 1월 19일;
업림 = 2017년 1월 18일;
“
스크립트를 전혀 편집하지 않고 로그에서 얻은 다른 응답은 다음과 같습니다.
“
삭제된 개체 참조: str2 << 'Glue' 액세스 또는 평가에서 텍스트 가져오기, 이름은 여기에 기본값( 1 ); /*###*/로그 지우기(); /*###*/
모두 닫기(저널, 저장 안 함); /*###*/모두 닫기(데이터 테이블, 저장 안 함); /*###*/
defuplim = Format( Today(), "ddMonyyyy" ); /*###*/deflowlim =
형식( 오늘() - 일수( 730 ), "ddMonyyyy" ); /*###*/
새 창("ddMonyyyy 형식으로 날짜를 선택하세요",
<<모달,
<<반환 결과,
V 목록 상자(
텍스트 상자( "시작 날짜:" ),
str1 = 텍스트 편집 상자( deflowlim ),
텍스트 상자( "종료 날짜:" ),
str2 = 텍스트 편집 상자( defuplim )
),
H 목록 상자( 단추 상자( "확인" ), 단추 상자( "취소" ) )
); /*###*/lowlim = str1 << 텍스트 가져오기; /*###*/uplim = str2 << 텍스트 가져오기; /*###*/lowlim
= 정보( lowlim ); /*###*/uplim = Informat( uplim ); /*###*/Show( lowlim ); /*###*/
표시(업림) /*###*/;
다음 스크립트에서는 /*###*/로 표시된 오류가 있습니다.
이름의 기본값은 여기에 있습니다( 1 ); /*###*/로그 지우기(); /*###*/
모두 닫기(저널, 저장 안 함); /*###*/모두 닫기(데이터 테이블, 저장 안 함); /*###*/
defuplim = Format( Today(), "ddMonyyyy" ); /*###*/deflowlim =
형식( 오늘() - 일수( 730 ), "ddMonyyyy" ); /*###*/
새 창("ddMonyyyy 형식으로 날짜를 선택하세요",
<<모달,
<<반환 결과,
V 목록 상자(
텍스트 상자( "시작 날짜:" ),
str1 = 텍스트 편집 상자( deflowlim ),
텍스트 상자( "종료 날짜:" ),
str2 = 텍스트 편집 상자( defuplim )
),
H 목록 상자( 단추 상자( "확인" ), 단추 상자( "취소" ) )
); /*###*/lowlim = str1 << 텍스트 가져오기; /*###*/uplim = str2 << 텍스트 가져오기; /*###*/lowlim
= 정보( lowlim ); /*###*/uplim = Informat( uplim ); /*###*/Show( lowlim ); /*###*/
표시(업림) /*###*/;
“
처음 네 줄을 껐다가 켰지만 끄거나 켰는지 여부에 관계없이 동일한 결과(응답이 혼합됨)를 얻습니다.
이 오류의 원인이 무엇인지 아시나요?
코드를 해석하려면 지정한 것보다 더 많은 코드를 살펴봐야 합니다.
deflowlim = Today() - In Days( 730 );
str1 = Number Edit Box(
deflowlim,
10,
<<SETFUNCTION></SETFUNCTION>
여기서 기본적으로 진행되는 작업은 사용자가 날짜를 입력할 수 있도록 데이터 입력 필드를 설정하는 것입니다.데이터 입력 필드의 유형은 숫자 편집 상자()입니다. (도움말 풀다운 메뉴 아래 스크립팅 색인에 있는 숫자 편집 상자()의 설명서와 예를 참조하세요.)

설명서에 따르면 Number Edit Box()의 형식은 다음과 같습니다.
y = Number Edit Box( initValue, <width> )
"str1"이라는 변수가 Number Edit Box()에 대한 포인터로 할당됩니다. 그림에서 이는 "y" 변수입니다.
"deflowlim" 변수는 Number Edit Box()에 표시될 초기값을 설정하는 데 사용됩니다. 그림에서 이는 "initValue"입니다.
숫자 편집 상자()의 너비는 10자로 설정됩니다.
위의 문서 목록에서 볼 수 있듯이 Number Edit Box() 개체에 전달할 수 있는 항목 메시지가 많이 있습니다.귀하가 요청한 코드에서 문제의 메시지는 "함수 설정"입니다.스크립팅 인덱스의 목록은 다음과 같습니다.

이 메시지의 역할은 Number Edit Box()에서 무언가 변경될 때마다 실행되는 JSL 조각을 설정하는 것입니다.
lowlim = str1 << get
따라서 Number Edit Box()에서 무언가가 변경될 때마다 "get" 메시지가 Number Edit Box()인 "str1"로 전달됩니다.
"get" 메시지는 다음과 같습니다.

Returns the number currently entered in the edit box
반환된 숫자는 변수 "lowlim"에 할당됩니다.
따라서 "lowlim"은 이후 JSL에서 참조할 수 있는 스칼라 변수입니다.JMP 날짜는 연속적인 숫자 데이터 값으로 저장되므로 스칼라 변수만 할당하면 됩니다.
이로써 귀하의 질문이 해결되기를 바랍니다.
jmp를 처음 접하고 이 시퀀스가 어떻게 작동하는지 이해하려고 합니다. 누군가 코드의 이 측면이 어떻게 작동하는지 설명해 줄 수 있습니까? 텍스트 상자 결과를 배열로 출력할 필요 없이 상자 입력을 로컬 변수에 저장하는 것처럼 보이지만 이를 수행하기 위해 함수가 어떻게 작동하는지 잘 모르겠습니다.
<<SETFUNCTION></SETFUNCTION>
감사합니다. 매우 도움이 되었습니다! 날짜를 숫자로 유지하는 것은 많은 의미가 있으며 변환이 덜 필요합니다.
txnelson의 스크립트는 날짜를 처리하는 더 좋은 방법이며 상자 내에서 값을 가져옴으로써 스크립트와 관련된 핵심 문제를 해결합니다.
스크립트에서 모달 새 창을 생성하지만 창을 닫은 후 창의 표시 상자에서 정보를 가져오려고 합니다. 창이 닫히면 더 이상 해당 창에 액세스할 수 없습니다. 창은 더 이상 존재하지 않습니다. 이것이 lowlim = str1 << get text; 에 대한 구문 오류가 발생하는 이유입니다.
거의 다 왔습니다. 모달 창에 대한 반환 결과를 지정했지만 그 결과를 사용하지 않고 있습니다.
다른 변경 사항 없이(txnelson의 날짜 처리가 더 좋지만) 새 창을 변수에 할당한 다음 해당 값을 가져옴으로써 원하는 것을 얻을 수 있습니다(아래 빨간색 변경 사항).
ww = New Window("Pick Your Dates in ddMonyyyy format",
<ww["str1"];
uplim = ww["str2"];
이 버전을 사용해 보세요....JMP가 선호하는 방식인 숫자로 날짜를 유지합니다.
Names Default To Here( 1 );
Clear Log();
Close All( journals, no save );
Close All( data tables, no save );
defuplim = Today();
deflowlim = Today() - In Days( 730 );
New Window( "Pick Your Dates in ddMonyyyy format",
<<MODAL></MODAL>