「結合」を使用したJSLセットアップのマージ<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />「結合」データ テーブル コマンドを使用すると、2 つのデータ セットを最適にマージできることがわかりました。複数のデータ テーブルを開いてデータを操作するスクリプトがありますが、「結合」スクリプトを正しく機能させるために、各データ テーブルを個別に呼び出すのに問題があります。
これを手動で行っている場合、コードは次のようになります。
データ表( 「無題322」 ) <<加入(データ表( 「無題318」 ) ) 、
同名の列を結合、
一致する列によって( : REPLICATE_ID = : REPLICATE_ID ) 、
複数をドロップ( 1 、 1 ) 、
名前( 「不一致を含める」 )( 1 、 1 ) 、
メインテーブルの順序を保持( 1 ) 、
出力テーブル( 「合併」 )
このフォームを複数のテーブルにコーディングしようとすると、問題が発生します。無題のテーブル (無題の 322、無題の 318 など - 開いているファイルの数によってはさらに多くなる可能性があります) は、コードで次のように指定されています。.だからどうにかして自分のマックスを取りたい他のすべての w と結合します。
私は次のように何かを設定しました:
(f = データ テーブルの場合, f >= 1, f--,
Try(v = w << Join( With(データテーブル (f)),
*残りは上記の結合テーブルのプロパティに従います*
ただし、私のコードは機能しません。どうすればこれを行うことができるか考えている人はいますか?
Re: "Join" を使用して JSL セットアップをマージする申し訳ありませんが、私は明確ではないと思います:
リストに追加されたテーブルを開いたままにしておく必要があることを理解しています-コードで Close All(Data Tables, nosave) をコメントアウトすると、
私のログには次のようなものがあります (openDT リストにあってはならない元のテーブルへの参照があり、それが OT に転送されます。そのテーブルに近いfxnが必要なだけで、それを理解できると確信しています。以前にマージが機能することを指定しましたが、どのように機能させたいかはわかりません。

しかし、//invisible (w = z << Split の場合) を持っている私のコードでは、 非表示のコメントを外したいのですが、非表示の fxn はループの最後のテーブルのみを認識し、他のすべてのテーブルは削除されるため、これらを参照してリストに保持し、全体として参照できるようにする方法が必要です。 (すべて閉じるもコメントアウトされます)どうすればいいですか?

不可視性が問題です。b/c 不可視の各テーブルを参照する方法を見つけない限り、複数のテーブルをマージする方法はありません。 Join コードをループに移動する必要があるように見えますが、一度に 1 つのテーブルのみをループし、少なくとも 2 つのテーブルを参照する必要がある場合、これを組み込む方法がわかりません。
Re: "Join" を使用して JSL セットアップをマージするここでは不可視性は問題ではありません。 非表示のテーブルは、他の非表示または表示のテーブルを参照して結合できます。 閉じたテーブルと見えないテーブルは同じではありません。 閉じたテーブルはまったく役に立たず、なくなって忘れられています。 配置したスクリプトですべて閉じる(データ テーブル、保存しない) ;マージコード部分の前。 その結果、すべてのテーブルが忘れられ、マージが失敗します。 見えないかどうかにかかわらず、テーブルを閉じる前に、完了するまで待ってください。
または、上記の私のアプローチを使用します。つまり、テーブルを 1 つずつ開き、必要な編集と分割を行ってから、それらを現在の MT とマージしてから、閉じて次のファイルに移動します。
Re: "Join" を使用して JSL セットアップをマージするうーん、元のtxtファイルをマージすることはできません.元のtxtファイルの分割/フォーマットから作成された中間の目に見えないファイルをマージしています.これらのファイルは不可視で中間的なものであるため、それらが保存されるルート ディレクトリはありません (不可視機能を使用している理由は、スペースと時間を節約するためです)。 私のテーブルがリストにあるにもかかわらず、それらは閉じられているため、それらを参照する方法はありませんが、それらはtxtファイルから作成された中間/非表示ファイルであるため、それらを「開く」ことは適用されません。どのディレクトリも保存されません。
これが私がやっていることの内訳です:
1. txt ファイルを開きます。コードはあなたが持っているものと似ています (名前は Data Table ("Result1") になります)。
2.これらのtxtファイルを再フォーマットします(列フォーマットではないため、JMPでより読みやすいデータテーブルに「分割」、フォーマットなどするコードがあります. - これらの中間テーブルを呼び出します (名前は Data Table("Untitled1") になります)
3. これらの中間ファイルは非表示です (表示するには多すぎるためです) - 保存した中間ファイルのディレクトリが必要ないため、保存しません。後で削除する必要があります。
4.私の問題は、中間テーブルをマージしようとしていることです
元のファイルを結合する方が簡単だと思いますが、それを実行できる形式にはなっていないため、私の難問です。
したがって、中間テーブルが非表示でなく、結合するために参照している中間テーブルを閉じていない場合、私が持っている(および以前に参照した)コードは機能します(希望どおりに機能しませんが、それでも機能します)-しかし、その後、すべてのテーブルが開いています-マージされたものとマージされていないもの
だから私が持っている本当の質問は次のとおりです。
a) 中間テーブルがあります - 基本的にそれらを非表示にしたいのですが、それらを MT/OTs リストで参照するために、これを機能させるためにそれらを可視化する必要があります - 基本的にこれらを非表示にしたいのですが。だから私の本当の質問は:ループ内で非表示の中間テーブルを参照して、さらに計算するために使用される各テーブルを認識する方法 (結合テーブル fxn を使用するには、中間の 2 つのインスタンスを結合できるように、For ループの外に置く必要があるようです)テーブル)?
スクリプトを添付しました。多分これは私がやろうとしていることを説明するでしょう。
Re: "Join" を使用して JSL セットアップをマージするJoin() の前にすべてのテーブルが閉じられているようです。 List OTs は、データテーブル参照の単なるリストです。 対応するテーブルがなくなった場合、それらは「スクリプト可能なオブジェクト」ではありません。
次のようなことを試してください:
私の進路= "/ユーザー/.../ファイル/" ; //.txt ファイルのディレクトリへのパス
フリスト=ディレクトリ内のファイル(私の進路) ; //すべてのファイルのリスト
n = Nアイテム(フリスト) ;
// flist から非テキスト ファイルを削除します
為に(私= n 、私> 0 、私--,
もしも(含む(フリスト[私] 、 "。TXT" ) == 0 、
から削除(フリスト、私) ;
n --;
)
) ;
// テキスト ファイルを開く機能 (必要に応じて列を編集し、設定をインポートします)
open_file =関数( {バツ} 、
開ける(
私の進路||フリスト[バツ] 、
インポート設定(
行末( CRLF 、 CR 、 LF ) 、
フィールドの終わり(タブ) 、
ストリップの引用( 1 ) 、
引用符としてアポストロフィを使用する( 0 ) 、
ファイル全体をスキャン( 1 ) 、
ラベル( 1 ) 、
列名の開始( 1 ) 、
データ開始( 2 ) 、
読むべき行(全て) 、
年のルール( 「10-90」 )
)
)
) ;
// 最初のファイルを開く
MT = open_file ( 1 ) ;
// flist 内のすべてのファイルを結合
為に(私= 2 、私<= n 、私++、
ST = open_file (私) ;
FT = MT ;
MT = FT <<加入(
と( ST ) 、
アップデート、
列の一致による( :列_1 = :列_1 ) 、
複数をドロップ( 1 、 0 ) 、
名前( 「不一致を含める」 )( 1 、 1 ) 、
メインテーブルの順序を保持( 1 ) 、
出力テーブル( 「合併」 )
) ;
// 掃除
近い( ST 、保存しない) ;
近い( FT 、保存しない) ;
) ;
Re: "Join" を使用して JSL セットアップをマージするさて、開いているテーブルをリストに送信した場合と同様のことを試しました。
このコードの前に、*txt ファイルが開かれ (最大 30 個以上のファイルを持つことができます)、JMP データ テーブルに変換されるコードがあります (したがって、最大 30 個以上のテーブルが出力されます)。次に、これらすべてのテーブルをにマージしようとしています1つのテーブルただし、一部のファイルには、削除する必要がある重複した情報が含まれている場合があります。結合テーブル プロパティを使用してこれを実行できることがわかりました。したがって、以下のコードに従ってください。1 つのテーブル = MT を正常に取得し、他のテーブルはリスト = OTs にあります。リストから各 OT に参加し、それを MT に参加させたいので、次のようになります。
MT+OT(1) = MergedTable、次に MergedTable+OT(2) = MergedTable2、次に MergedTable2+OT(3) = MergedTable3 など、取得するまですべてのデータを含む 1 つのマスター テーブル (その他は閉じられています)
<コード>
openDT = リスト();
(f = 1, f <= N Table(), f++,
Insert Into(open DT, Data Table(f)););
表示 (openDT);
MT = データテーブル (1);
閉じる (データ テーブル (1)、nosave);
OTs = リスト();
For(g = 1, g<= N Items(openDT) -1, g++,
(OTs、DataTable(g)) に挿入します。
すべて閉じる (DataTables、nosave);
表示 (OT);
表示(MT);
For( h = 1, h <= N 個のアイテム(OT), h++,
MT << Join(With(ST),
アップデート、
列を一致させることにより(:Column_1 = :Column_1)、
倍数 (1,0) をドロップします。
Name("不一致を含める")(1, 1),
メインテーブルの順序を保持する(1),
出力テーブル("結合")););
継続する());
スクリプトを実行すると、Join コマンドで次のエラーが発生するまで、すべて正常に動作します。
"Send は、'Send' のアクセスまたは評価で Scriptable Object{169} を期待しています",
為に(時間= 1 、時間<= Nアイテム( OT ) 、時間++、
MT << /*###*/加入(
あり(ST)、
アップデート、
一致する列によって( :列_1 = :列_1 ) 、
複数をドロップ( 1 、 0 ) 、
名前( 「不一致を含める」 )( 1 、 1 ) 、
メインテーブルの順序を保持( 1 ) 、
出力テーブル( 「合併」 ))) /*###*/ ;
継続する();
ヘルプ? これが機能しない理由を突き止めようとして頭を壁にぶつけています
Re: "Join" を使用して JSL セットアップをマージするこれは、例として始めることができます。 実行後、開いている最後のテーブルも閉じられるため、完璧ではありません...
Close All(data tables);
New Table("a") << Add Rows(3);
:Column 1 << Set Values([1, 2, 3, 4, 5, 6]);
New Column("Label", Character) << Set Each Value("a");
New Table("b") << Add Rows(3);
:Column 1 << Set Values([1, 2, 3, 7, 8, 9]);
New Column("Label", Character) << Set Each Value("b");
New Table("c") << Add Rows(3);
:Column 1 << Set Values([1, 2, 3, 10, 11, 12]);
New Column("Label", Character) << Set Each Value("c");
New Table("d") << Add Rows(3);
:Column 1 << Set Values([1, 2, 3, 13, 14, 15]);
New Column("Label", Character) << Set Each Value("d");
t_count = N Table();
dt_old = Data Table(t_count);
Show(dt_old << get name());
dt_new = Data Table(1);
For(i = 2, i <= t_count, i++,
dt_old = dt_new;
dt_new = dt_old << Join(
With(Data Table(i)),
Merge Same Name Columns,
By Matching Columns(:Column 1 = :Column 1),
Drop multiples(1, 1),
Name("Include non-matches")(1, 1)
);
Close(dt_old);
);