<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 = 또는(" ","~","`","!","@,#","$","%","^","&","*","(" ,")","-","+","\","|","[","[","]","<",">","?","/"," ." // 밑줄 없음
);
dt = 현재 데이터 테이블();
col_name_list = dt<< 열 이름 가져오기( 문자열 );
nc = N Cols( dt );
For( i = 1, i <= nc, i++,
one_col_name = col_name_list ;
만약에(
포함( 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 ;
thenewcolname = "" ;
하는 동안 ( 단어 ( 단어 수 , 열 이름 , " !@#$%^&*()-+[]<>?/\|" ) != "" ,
만약에 ( 단어 수 > 1 ,
thenewcolname = thenewcolname || "_"
) ;
thenewcolname = thenewcolname || 단어 ( 단어 수 , 열 이름 , " !@#$%^&*()-+[]<>?/\|" ) ;
단어 수 = 단어 수 + 1 ;
) ;
열 ( dt , 열 이름 ) << 이름 설정 ( thenewcolname ) ;
) ;