<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />こんにちは、
文字列で定義された一致する列の基準を使用して、あるデータテーブルを別のテーブルの列で更新しようとしています。
以下の例では、dt1 がメイン テーブルで、dt2 は追加する列 (つまり「ROUTE」) を含む一種の構成ファイルであり、他のすべての列は dt1 とのマッチングに使用されます。 dt2 はユーザー定義であるため、これらの他の列名を事前に知ることができないため、フォーマットされた文字列を使用する必要があります。
// 列一致のための文字列を定義します
textinp = "";
matchCols = dt2 <<列名を取得する(弦);
// dt2 列名リストから「ROUTE」を削除します
for (i =ナイアイテム(matchCols)、i > 0、i--、
もし(含まれています(マッチコル、 "ルート" )、から削除(matchCols, i));
);
// 列に一致する文字列を作成します
のために(i=1、i<=ナイアイテム(matchCols)、i++、
テキストインプ =連結(テキストインプ、 「:」 ,マッチコル、 「=:」 ,マッチコル、 "、" );
);
テキストインプ =左(テキストインプ、長さ(textinp)-2);
印刷する(テキストインプ);
// dt1 を更新します
dt1 <<アップデート(
( dt2 ) を使用すると、
列の一致(
解析する(テキストインプ)
)
);
textinp を update コマンドに対して解析すると、次のエラーが発生します (最初の行に示されているように、文字列は正しく生成されます)。
「: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 <<列を削除する(名前) ;
// 列マッチング用のリストを定義します
一致列= dt2 <<列名を取得する() ;
から削除(一致列、含まれています(一致列、エクスプレッション(名前))) ;
// dt1 を更新します
dt1 <<アップデート(と( dt2 ) 、列の一致(一致列=一致列)) ;
これは機能するはずです:
update_expr =エヴァリンサート(
"dt1 << 更新(
( dt2 ) を使用すると、
列の一致(^textinp^)
)」 ) ;
評価(解析する( update_expr )) ;