<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao a tutti, sto cercando di sostituire un semplice carattere di sottolineatura ( _ ) in ogni nome di colonna che ha un carattere "speciale" immaginabile senza dover fare istruzioni if individuali per ogni carattere.
Supponiamo che la colonna 1 sia etichettata Test1%good#parts, la colonna 2 sia etichettata Test2*Fail#Opens, ecc.
Voglio che i nomi delle colonne rinominate siano coerenti: Test1_good_parts, Test2_Fails_Opens, ecc. I dati nelle colonne sono conteggi (numerici e continui o ordinali).
Ho provato le versioni di:
spec_char = or(" ","~","`","!","@,#","$","%","^","&","*","(" ,")","-","+","\","|","[","[","]","<",">","?","/"," ." // nessun carattere di sottolineatura qui
);
dt = tabella dati corrente();
col_name_list = dt<< ottiene i nomi delle colonne( string );
nc = N Col( dt );
For( i = 1, i <= nc, i++,
one_col_name = col_name_list ;
Se(
Contiene( one_col_name, eval(spec_char) ),
Column( i ) << set name( Substitute( one_col_name, eval(spec_char) , "_" ) )
);
);
Ma rep è uno schema in cui eval(spec_char) cerca un carattere.
Esiste un modo pulito per eseguire questo tipo di sostituzione di gruppo?
Grazie.
Grazie sia a MS che a Jim, entrambi funzionano molto bene!
Roby M.
La funzione Regex dovrebbe funzionare bene per questo:
dt = Tabella dei dati correnti () ;
Per ( io = 1 , io <= N col ( dt ) , io ++,
Colonna ( dt , io ) << imposta nome ( Regex ( Colonna ( dt , io ) << ottenere nome , "\W" , "_" , SOSTITUZIONE GLOBALE ))
) ;
Ecco uno script che farà quello che vuoi:
I nomi predefiniti sono qui ( 1 ) ;
dt = Tabella dei dati correnti () ;
colnames = dt << ottenere i nomi delle colonne ( corda ) ;
Per ( io = 1 , io <= N articoli ( nomi di colonne ) , io ++,
conteggio delle parole = 1 ;
thenewcolname = "" ;
Mentre ( Parola (conta parole , colnames , " !@#$%^&*()-+[]<>?/\|" ) != "" ,
Se (conta parole > 1 ,
thenewcolname = thenewcolname || "_"
) ;
thenewcolname = thenewcolname || Parola (conta parole , colnames , " !@#$%^&*()-+[]<>?/\|" ) ;
conteggio delle parole = conteggio delle parole + 1 ;
) ;
Colonna (dt , colnames ) << imposta nome ( thenewcolname ) ;
) ;