ユーザー入力を取得して変数に変換する際に問題が発生しています。 これに使用しようとしているスクリプトは、この段落の下に貼り付けられています。 同じスクリプトを複数回実行しましたが、編集せずにログに 2 つの異なる結果が記録されました。 このスクリプトは次のとおりです。
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);
ログの最初の結果は、スクリプトが生成すると予想されるものであり、以下の引用符内にコピーして貼り付けます。
「
ローリム = 2015 年 1 月 19 日;
アップリム = 2017 年 1 月 18 日;
「
ログから得られるもう 1 つの応答 (これもスクリプトをまったく編集しません) は次のとおりです。
「
削除されたオブジェクト参照: str2 << 'Glue' のアクセスまたは評価でテキストを取得、Names Default To Here(1); /*###*/ログをクリア(); /*###*/
すべて閉じる(ジャーナル、保存なし); /*###*/すべて閉じる(データテーブル、保存なし); /*###*/
defuplim = Format( Today(), "ddMonyyyy" ); /*###*/deflowlim =
Format( Today() - In Days( 730 ), "ddMonyyyy" ); /*###*/
新しいウィンドウ( "ddMonyyyy 形式で日付を選択してください",
<<モーダル、
<<結果を返します、
V リストボックス(
テキスト ボックス( "開始日:" )、
str1 = テキスト編集ボックス( deflowlim )、
テキスト ボックス( "終了日:" )、
str2 = テキスト編集ボックス( defuplim )
)、
H リストボックス( ボタンボックス( "OK" )、ボタンボックス( "キャンセル" ) )
); /*###*/lowlim = str1 << テキストを取得; /*###*/uplim = str2 << テキストを取得; /*###*/ローリム
= 情報フォーマット( lowlim ); /*###*/uplim = Informat( uplim ); /*###*/Show( lowlim ); /*###*/
Show( uplim ) /*###*/;
次のスクリプトでは、/*###*/ でマークされたエラーが発生します。
名前のデフォルトは Here( 1 ); /*###*/ログをクリア(); /*###*/
すべて閉じる(ジャーナル、保存なし); /*###*/すべて閉じる(データテーブル、保存なし); /*###*/
defuplim = Format( Today(), "ddMonyyyy" ); /*###*/deflowlim =
Format( Today() - In Days( 730 ), "ddMonyyyy" ); /*###*/
新しいウィンドウ( "ddMonyyyy 形式で日付を選択してください",
<<モーダル、
<<結果を返します、
V リストボックス(
テキスト ボックス( "開始日:" )、
str1 = テキスト編集ボックス( deflowlim )、
テキスト ボックス( "終了日:" )、
str2 = テキスト編集ボックス( defuplim )
)、
H リストボックス( ボタンボックス( "OK" )、ボタンボックス( "キャンセル" ) )
); /*###*/lowlim = str1 << テキストを取得; /*###*/uplim = str2 << テキストを取得; /*###*/ローリム
= 情報フォーマット( lowlim ); /*###*/uplim = Informat( uplim ); /*###*/Show( lowlim ); /*###*/
Show( uplim ) /*###*/;
「
最初の 4 行でオフとオンを切り替えましたが、オフかオンかに関係なく、同じ結果 (さまざまな応答) が得られます。
このエラーの原因は何か考えられますか?
コードを解釈するには、指定したものよりも多くのコードを調べる必要があります。
deflowlim = Today() - In Days( 730 );
str1 = Number Edit Box(
deflowlim,
10,
<<SETFUNCTION></SETFUNCTION>
ここで基本的に行われているのは、ユーザーが日付を入力できるようにデータ入力フィールドを設定することです。データ入力フィールドのタイプは Number Edit Box() です。 (ヘルプ プルダウン メニューのスクリプト インデックスにある Number Edit Box() のドキュメントと例を参照してください)。

ドキュメントには、Number Edit Box() の形式は次のように記載されています。
y = Number Edit Box( initValue, <width> )
「str1」という変数が Number Edit Box() へのポインタとして割り当てられます。 この図では、これは「y」変数です。
変数「deflowlim」は、数値エディットボックス()に表示される初期値を設定するために使用されます。 図では、これは「initValue」です。
Number Edit Box() の幅は 10 文字に設定されます
上記のドキュメントのリストでわかるように、Number Edit Box() オブジェクトに渡すことができるアイテム メッセージが多数あります。あなたが質問しているコードからの問題のメッセージは、「Set Function」です。これは Scripting Index のリストです

このメッセージは、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>