녹음 및 파일: 데이터 액세스, JMP 로스팅 및 팁과 요령에 대한 Scripters Club비디오 1 @게오르그 의 데이터 액세스
댓글:
- 설명서가 아직 부족하고 사용하기가 다소 어수선할 수 있지만... 여전히 선호하는 방법이므로 커넥터를 지원하는 것이 좋습니다.
- 실행 완료 시 액세스할 수 있는 queryResult "symbol"도 있는데 이는 결과 테이블에 대한 참조여야 합니다
- 항상 <를 사용하세요 << run foreground and do not rely on which is determined by user preferences< pan>

비디오 2: JMP 로스팅 fro, @jthi
댓글:
- 스크립팅 인덱스를 살펴보면, 다양한 모드에서 새 창 명령이 어떻게 잘 작동하는지 알 수 있고, 대부분 변형(모달, 보고서 등)에 대한 예가 나와 있습니다.
- 동의합니다. 거기에는 예가 있습니다. 제가 원하는 만큼 항상 유용한 것은 아닙니다. NewWindow()를 사용할 때마다 비슷한 예가 없는 일을 하고 싶습니다. 커뮤니티를 검색하면서 NewWindow()에 대한 정말 유용한 예를 찾았습니다.
- 또한 예를 추가할 수 있는 가능성을 추가해 주세요. 커뮤니티에는 매우 유용한 예가 있습니다. 모든 예로 스크립팅 인덱스를 범람시키는 것은 의미가 없다고 생각합니다. 하지만 우리의 스크립팅 인덱스에 유용한 예를 추가할 수 있는 가능성이 생긴다면 많은 도움이 될 것입니다.
- 위시리스트 항목의 시작 부분은 다음과 같습니다.
비디오 3: @jthi 의 팁과 요령
제안을 위한 게시물:
Re: 녹음 및 파일: 데이터 액세스, JMP 로스팅 및 팁과 요령에 대한 스크립터 클럽내 자료 첨부됨
Re: 녹음 및 파일: 데이터 액세스, JMP 로스팅 및 팁과 요령에 대한 스크립터 클럽브라보! 이 세션이 2023년에 시작된 이후로 계속해서 즉시 유용한 지식의 원천이 되는 것이 놀랍습니다.
Open Database() JSL 함수 내부에 SQL에 대한 의견이 있는지 궁금합니다. 우리는 데이터 웨어하우징을 위해 Google의 BigQuery 구현을 사용하고 있습니다. BigQuery 내부에서 아래에 표시된 것처럼 Open Database()에 직접 복사하여 붙여넣을 수 있는 SQL 쿼리를 개발하고 디버깅할 수 있습니다. SQL 키워드나 타임스탬프를 SQL에 연결하는 기능도 매우 유용해 보입니다.
Names Default to Here(1);
start = "'2025-02-18 00:00:00'";
stop = "'2025-02-18 01:00:00'";
dt = Open Database( "DSN_name", "
SELECT
time,
tagname,
value
FROM
`bq_project.dataset.table`
WHERE
time BETWEEN TIMESTAMP("|| start ||") AND TIMESTAMP("|| stop ||")
AND tagname IN(
'tag_1',
'tag_2'
)"
);
Re: 녹음 및 파일: 데이터 액세스, JMP 로스팅 및 팁과 요령에 대한 스크립터 클럽New SQL Query를 사용하세요(꽤 끔찍하다는 건 알지만... 선호되는 방법입니다) 그리고 sql template을 활용하고 Eval Insert를 사용하여 평가하는 것이 제 제안입니다. 아래 예:
Names Default to Here(1);
MY_CONNECTOR = "ODBC:...";
start = "'2025-02-18 00:00:00'";
stop = "'2025-02-18 01:00:00'";
sql_template = "\[
SELECT
time,
tagname,
value
FROM
`bq_project.dataset.table`
WHERE
time BETWEEN TIMESTAMP(¤start¤) AND TIMESTAMP(¤stop¤)
AND tagname IN(
'tag_1',
'tag_2'
)
]\";
sql_str = Eval Insert(sql_template, "¤");
// Write("\!N", sql_str);
obj = New SQL Query(
Connection(MY_CONNECTOR),
Custom SQL(sql_str),
Query Name("mytable")
);
dt = obj << Run Foreground();
Write();
새로운 SQL 쿼리(예: Open Database()) 이외의 다른 방법에도 비슷한 템플릿 아이디어를 사용할 수 있습니다.
Eval Insert()에서 특수문자 "¤"를 사용한 이유는 기본값인 "^"가 Regex 등에서 흔히 발견되고 평가 중에 문제를 일으키기 때문입니다.
편집: 몇 가지 오타 수정, 언어 개선 및 "¤"에 대한 설명 추가
Re: 녹음 및 파일: 데이터 액세스, JMP 로스팅 및 팁과 요령에 대한 스크립터 클럽@jthi , 매우 유용한 프레젠테이션 감사합니다! 문자열 사용을 피하고 결과를 추출하기 위해 XPath 메서드를 사용하도록 동적으로 생성된 모달 창을 다시 작성하도록 영감을 주었습니다.
다만 문자열 구문 분석을 피할 수 없는 부분이 하나 있었습니다. 모달 창에 XPath 명령을 포함하고 싶은데, 이를 동적으로 생성해야 합니다.
텍스트 편집 상자의 활성화 여부를 제어하는 확인란을 만들고 싶지만, 텍스트 편집 상자/확인란 쌍이 몇 개일지 모르겠습니다.
rc_list = Lineup Box( N Col( 3 ) );
rc_list << append( Text Box( "Current", <<SET font=""></SET>
Is there a way of doing this so I don't need to parse JSL strings? Or is there a better way to do this modal recode?
<BR /><P>전체 코드는 여기에 있습니다:</P><DIV class="lia-spoiler-container"><A class="lia-spoiler-link" href="#" rel="nofollow noopener noreferrer" target="_blank">더 보기...</A><NOSCRIPT>(강조해서 읽어보세요)</NOSCRIPT><DIV class="lia-spoiler-border"><DIV class="lia-spoiler-content"><PRE><CODE class=" language-jsl">Names Default To Here( 1 );
// Function to do a simple in-place column recode.
// Uses a modal dialog so can be used as part of a larger script or workflow.
modal_recode = Function( {dt, col},
{default local},
Summarize( dt, orig_vals = By( col ) );
rc_list = Lineup Box( N Col( 3 ) );
rc_list << append( Text Box( "Current", <<SET font=""></SET></CODE><NOSCRIPT><CODE class=" language-jsl"><DIV class="lia-spoiler-noscript-container"><DIV class="lia-spoiler-noscript-content">이름은 Here(1); // 간단한 내부 열 재코딩을 수행하는 함수입니다. // 모달 대화 상자를 사용하므로 더 큰 스크립트나 워크플로의 일부로 사용할 수 있습니다. modal_recode = Function( {dt, col}, {default local}, Summarize( dt, orig_vals = By( col ) ); rc_list = Lineup Box( N Col( 3 ) ); rc_list << append( Text Box( "Current", < <SET font=""></SET></DIV></DIV>Re: 녹음 및 파일: 데이터 액세스, JMP 로스팅 및 팁과 요령에 대한 스크립터 클럽이 경우에는 << XPath를 사용하지 않고 이 << prev sib를 사용합니다. 이것이 당신이 찾고 있는 것을 한다고 가정합니다.
그래서 대신에
Eval(
Parse(
"\[rc_list << append( check box( "", <<SET function=""></SET>
<P>이런 식으로 할 수도 있겠다</P>
<CODE class=" language-jsl">rc_list << Append(Check Box("", << Set Function(function({this},
(this << prev sib) << Enabled(this << get);
))));
전체 코드
더 보기...
Names Default To Here(1);
// Function to do a simple in-place column recode.
// Uses a modal dialog so can be used as part of a larger script or workflow.
modal_recode = Function({dt, col},
{default local},
Summarize(dt, orig_vals = By(col));
rc_list = Lineup Box(N Col(3));
rc_list << append(Text Box("Current", <<SET font=""></SET>
</CODE><NOSCRIPT><CODE class=" language-jsl"><DIV class="lia-spoiler-noscript-container"><DIV class="lia-spoiler-noscript-content">이름은 Here(1)에 기본으로 지정됩니다. // 간단한 열 재코딩을 수행하는 함수입니다. // 모달 대화 상자를 사용하므로 더 큰 스크립트나 워크플로의 일부로 사용할 수 있습니다. modal_recode = Function({dt, col}, {default local}, Summarize(dt, orig_vals = By(col)); rc_list = Lineup Box(N Col(3)); rc_list << append(Text Box("Current", < <SET font=""></SET></DIV></DIV>
<P>XPath를 정말로 사용하고 싶다면 동적으로 인덱스를 계산할 수 있습니다. 예를 들어 모든 CheckBoxBox를 가져온 다음 Contains를 사용 <EM>하여</EM> 인덱스를 가져온 다음 해당 인덱스를 사용할 수 있습니다.</P>
<CODE class=" language-jsl">idx = Contains(rc_list << XPath("//CheckBoxBox"), this); Re: 녹음 및 파일: 데이터 액세스, JMP 로스팅 및 팁과 요령에 대한 스크립터 클럽@jthi 감사합니다! 이전 sib 접근 방식이 저에게는 효과가 있습니다. JMP 창이 어떻게 구성되고 어떻게 조작될 수 있는지에 대한 자연스러운 생각을 바꿔야 합니다.
Re: 녹음 및 파일: 데이터 액세스, JMP 로스팅 및 팁과 요령에 대한 스크립터 클럽저는 제 생각을 여러 번 바꾸었고 지금도 가끔 바꿉니다. 저는 일반적으로 상황에 따라 네 가지 다른 방법(및 이들의 조합)을 사용한다고 생각합니다.
- 엑스패스
- 리스트/연관 배열에 대한 참조를 수집합니다
- 때로는 객체에 대한 참조를 수집하는 것이 쉽습니다.
- << 함수 설정(function(this()))
- 일반적으로 일부 동작을 제어하기 위해, 귀하의 경우 enable(0/1)과 같이. 저는 일반적으로 이것으로 변수 값을 업데이트하지 않습니다.
- 참조 평가
- 구체적인 예는 없지만, 어떤 이유에서인지 XPath로 "경로"를 빌드하거나 이것을 사용하는 것이 귀찮아지고 여전히 참조가 필요할 수 있습니다(때로는 새 창을 반환하는 클래스나 함수에서).
참조 평가 예
rc_list << append(teb = Text Edit Box(Char(orig_vals[i]), <<ENABLED></ENABLED>
<BR />
<BR />Re: 녹음 및 파일: 데이터 액세스, JMP 로스팅 및 팁과 요령에 대한 스크립터 클럽한 번의 답변에 대해 제가 줄 수 있는 칭찬에는 한계가 있습니다. 감사합니다, @jthi , 정말요.