<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />こんにちは。文字ごとに個別の if ステートメントを実行することなく、考えられる「特殊」文字を含む各列名を単純なアンダースコア ( _ ) に置き換えようとしています。
たとえば、列 1 には Test1%good#parts というラベルが付けられ、列 2 には Test2*Fail#Opens というラベルが付けられます。
名前を変更した列名に一貫性を持たせたい(Test1_good_parts、Test2_Fails_Opens など)。 列のデータはカウント (数値、連続または順序) です。
私は次のバージョンを試しました:
spec_char = or(" ","~","`","!","@,#","$","%","^","&","*","(" 、")"、"-"、"+"、"\"、"|"、"["、"["、"]"、"<"、">"、"?"、"/"," ." // ここにはアンダースコアはありません
);
dt = 現在のデータテーブル();
Col_name_list = dt<< 列名を取得( string );
nc = N Cols( dt );
For( i = 1、i <= nc、i++、
one_col_name = 列名リスト;
もし(
含まれる( one_col_name, eval(spec_char) )、
Column( i ) << set name( Substitute( one_col_name, eval(spec_char) , "_" ) )
);
);
ただし、rep は eval(spec_char) が文字を検索するパターンです。
この種のグループ置換を実行するクリーンな方法はありますか?
ありがとう。
MS と Jim の両方に感謝します。どちらも非常にスムーズに動作します。
ロブ・M
Regex 関数はこれに対してうまく機能するはずです。
dt =現在のデータテーブル() ;
のために(私= 1 、私<= Nコル( dt ) 、私++、
カラム( dt 、私) <<セット名(正規表現(カラム( dt 、私) <<名前を取得する、 「\W」 、 「_」 、グローバル置換))
) ;
ここにあなたが望むことを行うスクリプトがあります:
デフォルトの名前はここにあります( 1 ) ;
dt =現在のデータテーブル() ;
列名= dt <<列名を取得する( 弦 ) ;
のために( 私= 1 、私<= N 個のアイテム(列名) 、私++、
単語数= 1 ;
新しい列名= 「」 ;
その間(言葉( ワード数、列名、 " !@#$%^&*()-+[]<>?/\|" ) != 「」 、
もし( ワード数> 1 、
新しい列名=新しい列名|| 「_」
) ;
新しい列名=新しい列名||言葉( ワード数、列名、 " !@#$%^&*()-+[]<>?/\|" ) ;
単語数=単語数+ 1 ;
) ;
カラム( dt 、列名) <<セット名(新しい列名) ;
) ;