<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo zusammen, ich versuche, in jeden Spaltennamen, der ein beliebiges „Sonderzeichen“ enthält, einen einfachen Unterstrich (_) einzufügen, ohne für jedes Zeichen einzelne if-Anweisungen ausführen zu müssen.
Angenommen, Spalte 1 trägt die Bezeichnung „Test1%good#parts“, Spalte 2 die Bezeichnung „Test2*Fail#Opens“ usw
Ich möchte, dass die umbenannten Spaltennamen konsistent sind: Test1_good_parts, Test2_Fails_Opens usw. Bei den Daten in den Spalten handelt es sich um Zählwerte (numerisch und kontinuierlich oder ordinal).
Ich habe folgende Versionen ausprobiert:
spec_char = or(" ","~","`","!","@,#","$","%","^","&","*","(" ,")","-","+","\","|","[","[","]","<",">","?","/"," ." // hier kein Unterstrich
);
dt = aktuelle Datentabelle();
col_name_list = dt<< Spaltennamen abrufen( string );
nc = N Cols( dt );
For( i = 1, i <= nc, i++,
one_col_name = col_name_list ;
Wenn(
Enthält( one_col_name, eval(spec_char) ),
Column( i ) << set name( Substitute( one_col_name, eval(spec_char) , "_" ) )
);
);
Aber rep ist ein Muster, bei dem eval(spec_char) nach einem Zeichen sucht.
Gibt es eine saubere Möglichkeit, diese Art der Gruppenersetzung durchzuführen?
Danke.
Vielen Dank an MS und Jim, beide funktionieren reibungslos!
Rob M.
Die Regex-Funktion sollte hierfür gut funktionieren:
dt = Aktuelle Datentabelle () ;
Für ( ich = 1 , ich <= N Col ( dt ) , ich ++,
Spalte ( dt , ich ) << Name einsetzen ( Regex ( Spalte ( dt , ich ) << Namen bekommen , „\W“ , „_“ , GLOBALREPLACE ))
) ;
Hier ist ein Skript, das das tut, was Sie wollen:
Namen standardmäßig hier ( 1 ) ;
dt = Aktuelle Datentabelle () ;
Kolnamen = dt << Spaltennamen abrufen (Zeichenfolge) ;
Für ( ich = 1 , ich <= N Artikel (Spaltnamen) , ich ++,
Wortzahl = 1 ;
thenewcolname = „“ ;
Während ( Wort ( Wortzahl , Kolnamen , " !@#$%^&*()-+[]<>?/\|" ) != „“ ,
Wenn ( Wortzahl > 1 ,
thenewcolname = thenewcolname || „_“
) ;
thenewcolname = thenewcolname || Wort ( Wortzahl , Kolnamen , " !@#$%^&*()-+[]<>?/\|" ) ;
Wortzahl = Wortzahl + 1 ;
) ;
Spalte ( dt , Kolnamen ) << Name einsetzen (der neue Spaltenname) ;
) ;