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

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

問題は非表示であることです。つまり、非表示の各テーブルを参照する方法を見つけない限り、複数のテーブルをマージすることはできません。 結合コードをループに移動する必要があるようですが、一度に 1 つのテーブルのみをループし、少なくとも 2 つのテーブルを参照する必要がある場合、これを組み込む方法がわかりません。
Re: 「結合」を使用して JSL 設定をマージするここでは不可視性は問題ではありません。 非表示テーブルは、他の非表示テーブルまたは表示テーブルを参照したり、結合したりできます。 閉じたテーブルと非表示のテーブルは同じものではありません。 閉じたテーブルはまったく役に立たず、消えて忘れ去られます。 配置したスクリプト内ですべて閉じる(データテーブル、保存しない) ;マージコード部分の前。 その結果、すべてのテーブルが忘れられ、マージは失敗します。 非表示かどうかに関係なく、テーブルを閉じる前に、作業が完了するまで待ってください。
または、上記の私のアプローチを使用します。つまり、テーブルを一度に 1 つずつ開き、必要な編集と分割を実行し、それらを現在の MT とマージしてから、閉じて次のファイルに進みます。
Re: 「結合」を使用して JSL 設定をマージするうーん、元の txt ファイルをマージすることはできません。元の txt ファイルの分割/フォーマットから作成された中間の非表示ファイルをマージしています。これらのファイルは非表示の中間ファイルであるため、ファイルが保存されるルート ディレクトリはありません (非表示機能を使用する理由のポイントは、スペースと時間を節約できることです)。 ただし、言いたいことはわかります。テーブルがリスト内にあるとしても、テーブルは閉じられているため参照する方法はありませんが、txt ファイルから作成された中間/非表示のファイルであるため、テーブルを「開く」ことは適用されません。どのディレクトリも保存されません。
私がやっていることの内訳は次のとおりです。
1. txt ファイルを開くと、コードはあなたが持っているものと似ています(名前はデータテーブル(「Result1」)になります)
2. これらの txt ファイルを再フォーマットします (列フォーマットではないため、JMP でより読みやすいデータ テーブルに「分割」、フォーマットなどを行うコードがあります。 - これらを中間テーブルと呼びます (名前は Data Table("Untitled1") になります)
3. これらの中間ファイルは非表示です (表示するには多すぎるため) - 保存した中間ファイルのディレクトリを後で削除する必要がないため、中間ファイルは保存しません。
4. 私の問題は、中間テーブルをマージしようとしているということです
元のファイルを結合する方が簡単だとは思いますが、それが可能な形式では提供されていないため、私の難問です。
したがって、私が持っている(そして以前に参照した)コードは、中間テーブルが非表示ではなく、結合するために参照している中間テーブルを閉じていない場合に機能します(私が望んでいるとおりに正確に機能しませんが、それでも機能します)-しかし、その後、すべてのテーブルが開いています - マージされたテーブルとマージされていないテーブル
それで、私が抱いている本当の質問は次のとおりです。
a) 中間テーブルがあります。基本的には非表示にしたいのですが、MT/OT リストでそれらを参照するには、これを機能させるためにそれらを表示する必要があります。ただし、基本的には非表示にしたいのですが。それで、私の本当の質問は次のとおりです。ループ内で非表示の中間テーブルを参照して、さらなる計算に使用される各テーブルを認識するにはどうすればよいですか (結合テーブル fxn を使用するには、中間テーブルの 2 つのインスタンスを結合できるように、For ループの外側にテーブルを配置する必要があるようです)テーブル)?
スクリプトを添付しました。おそらくこれで私がやろうとしていることが説明されるでしょう。
Re: 「結合」を使用して JSL 設定をマージするJoin() の前にすべてのテーブルが閉じられているようです。 リスト OT は、単なるデータテーブル参照のリストです。 対応するテーブルがなくなった場合、それらは「スクリプト可能なオブジェクト」ではありません。
次のようなことを試してください。
私の進路= 「/ユーザー/.../ファイル/」 ; //.txt ファイルのディレクトリへのパス
フリスト=ディレクトリ内のファイル(私の進路) ; //すべてのファイルのリスト
n = N 個のアイテム(フリスト) ;
// テキスト以外のファイルを flist から削除します
のために(私= n 、私> 0 、私--、
もし(含まれています(フリスト[私】 、 "。TXT" ) == 0 、
から削除(フリスト、私) ;
n --;
)
) ;
// 開いているテキスト ファイルの関数 (必要に応じて列を編集し、設定をインポート)
ファイルを開く=関数( {バツ} 、
開ける(
私の進路||フリスト[バツ] 、
インポート設定(
行末( CRLF 、 CR 、 LF ) 、
フィールドの終わり(タブ) 、
引用文を削除する( 1 ) 、
アポストロフィを引用符として使用する( 0 ) 、
ファイル全体をスキャン( 1 ) 、
ラベル( 1 ) 、
列名の開始( 1 ) 、
データの開始( 2 ) 、
読むべき行(全て) 、
年の規則( 「10-90」 )
)
)
) ;
// 最初のファイルを開く
MT =ファイルを開く( 1 ) ;
// flist 内のすべてのファイルを結合します
のために(私= 2 、私<= n 、私++、
ST =ファイルを開く(私) ;
FT = MT ;
MT = FT <<参加する(
と( ST ) 、
アップデート、
列の一致による( :列_1 = :列_1 ) 、
複数をドロップする( 1 、 0 ) 、
名前( 「一致しないものを含める」 )( 1 、 1 ) 、
メインテーブルの順序を保持する( 1 ) 、
出力テーブル( 「合併した」 )
) ;
// 掃除
近い( ST 、保存なし) ;
近い( FT 、保存なし) ;
) ;
Re: 「結合」を使用して JSL 設定をマージするさて、私は開いているテーブルをリストに送信するという同様のことを試みました。
このコードの前に、*txt ファイルを開いて (最大 30 以上のファイルを持つことができます)、JMP データ テーブルに変換するコードがあります (したがって、最大 30 以上のテーブルが出力されます)。次に、これらすべてのテーブルをマージしようとしています1つのテーブルただし、一部のファイルには、削除する必要がある重複した情報が含まれている可能性があります。これは、テーブル結合プロパティを使用して実行できることがわかりました。したがって、以下のコードに従ってください。1 つのテーブル = MT を取得することに成功し、その他はリスト = OT にあります。リストから各 OT を結合して MT に結合したいので、次のようになります。
MT+OT(1) = MergedTable、次に MergedTable+OT(2) = MergedTable2、次に MergedTable2+OT(3) = MergedTable3 など、取得するまですべてのデータを含む 1 つのマスター テーブル (他のテーブルは閉じられています)
<コード>
openDT = リスト();
(f = 1、f <= N Table()、f++、
Insert Into(オープン DT, データ テーブル(f)););
表示(openDT);
MT = データテーブル(1);
Close(データテーブル(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」のアクセスまたは評価においてスクリプト可能オブジェクトを期待します。"
のために( h = 1 、 h <= N 個のアイテム( OT ) 、 h ++、
MT << /*###*/参加する(
(ST)では、
アップデート、
列の一致による( :列_1 = :列_1 ) 、
複数をドロップ( 1 、 0 ) 、
名前( 「一致しないものを含める」 )( 1 、 1 ) 、
メインテーブルの順序を保持( 1 ) 、
出力テーブル( 「合併した」 )) /*###*/ ;
続く();
ヘルプ? なぜこれがうまくいかないのかを理解しようとして頭を壁にぶつけている
Re: 「結合」を使用して 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);
);