<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />こんにちは、
文字列で定義された一致する列の条件を使用して、あるデータ テーブルを別のテーブルの列で更新しようとしています。
以下の例では、dt1 がメイン テーブルで、dt2 は追加する列 (つまり「ROUTE」) を含む一種の構成ファイルであり、他のすべての列は dt1 との照合に使用されます。 dt2 はユーザー定義であるため、これらの他の列名を前もって知ることができないため、フォーマットされた文字列を使用する必要があります。
// 列マッチング用の文字列を定義
textinp = "";
matchCols = dt2 <<列名を取得する(ストリング);
// dt2 列名リストから「ROUTE」を削除します
(i =アイテム(matchCols)、i > 0、i--、
もしも((含む(マッチ列、 "ルート" )、から削除(matchCols, i));
);
// 列マッチング用の文字列を作成
為に(i=1, i<=アイテム(matchCols)、i++、
textinp =連結(テキストイン、 ":" 、マッチ列、 " = :" 、マッチ列、 "、" );
);
textinp =左(テキストイン、長さ(textinp)-2);
印刷(textinp);
// dt1 を更新
dt1 <<アップデート((
( dt2 ) で、
列の一致(
解析する(textinp)
)。
);
update コマンドに対して textinp を解析すると、次のエラーが生成されます (最初の行に示されているように、文字列は正しく生成されます)。
":X = :X, :Y = :Y"
意外な「、」。 「;」が抜けている可能性があります。また "、"。
行 1 列 8: :X = :X►, :Y = :Y
私の知る限り、match columns() 内で複数の列をコンマで区切ることに問題はないはずです。実際、文字どおりに定義しようとすると、次のようになります。
// dt1 を更新
dt1 <<アップデート((
( dt2 ) で、
列の一致(
:X = :X, :Y = :Y
)。
);
それは完全にうまく機能します。 文字列を処理/解析できない理由は何ですか? あなたの助けは大歓迎です!
あなたがた両方に感謝します! うまくいった2番目の答えだけを試しました!
列の一致()明らかに、一致する引数として (文字列としてではなく) 列名の 2 つのリストを受け入れます。
これを試して:
// テーブルの例
dt2 =開ける(( "$SAMPLE_DATA/Big Class.jmp" )。 ;
dt1 = dt2 <<サブセット((選択した列(( 0 )。 、サンプリングレート(( 0.5 )) ;
dt1 <<列を削除する((名前)。 ;
// 列マッチングのリストを定義
matchCols = dt2 <<列名を取得する() ;
から削除(( matchCols 、含む(( matchCols 、式((名前)))) ;
// dt1 を更新
dt1 <<アップデート((と(( dt2 )。 、列の一致(( matchCols = matchCols )) ;
これはうまくいくはずです:
update_expr =エバリンサート((
"dt1 << Update(
( dt2 ) で、
列の一致(^textinp^)
)" )。 ;
eval ((解析する(( update_expr )) ;