gurutech
22-07-2003, 13:37
Ciao a tutti,
ho bisogno di effettuare una trasformazione su un file CSV.
Tale file è un estratto di active directory tramite il tool CSVDE.EXE.
Ecco una linea di esempio del file
"CN=PIPPO,OU=Users,DC=dominio,DC=it",PIPPO,pippo@dominio.it,NOME,LOGIN,COGNOME
Ora il separatore di campo è la virgola ( , ) e il tool CSVDE non permette di specificarne un altro. Come potete notare nel primo campo (quello tra le virgolette " " ) la virgola fa parte del valore. Per cui volevo semplicemente fare in modo di cambiare il separatore con un punto e virgola ( ; ).
Sono impazzito con sed, non so un granchè di perl, alla fine mi sono scritto quattro righe di C il cui ciclo principale fa il seguente lavoro
virgolette=0;
while ( ( carattere = fgetc(leggifile) ) != EOF ) {
if ( virgolette==0 && carattere == '"' ) virgolette=1;
/* ^ carattere == apicesingolo virgolettedoppie apicesingolo ^ */
else if ( virgolette==1 && carattere == '"' ) virgolette=0;
if ( !virgolette && carattere == ',' ) carattere = ';';
printf("%c",carattere);
}
che funziona.
La domanda è: siccome questa trasformazione deve essere fatta all'interno di uno script di bash, non è che qualcuno mi può indicare come farla con sed o con perl, in modo da non dover compilare un programma apposito per un lavoro così stupido ?
ho bisogno di effettuare una trasformazione su un file CSV.
Tale file è un estratto di active directory tramite il tool CSVDE.EXE.
Ecco una linea di esempio del file
"CN=PIPPO,OU=Users,DC=dominio,DC=it",PIPPO,pippo@dominio.it,NOME,LOGIN,COGNOME
Ora il separatore di campo è la virgola ( , ) e il tool CSVDE non permette di specificarne un altro. Come potete notare nel primo campo (quello tra le virgolette " " ) la virgola fa parte del valore. Per cui volevo semplicemente fare in modo di cambiare il separatore con un punto e virgola ( ; ).
Sono impazzito con sed, non so un granchè di perl, alla fine mi sono scritto quattro righe di C il cui ciclo principale fa il seguente lavoro
virgolette=0;
while ( ( carattere = fgetc(leggifile) ) != EOF ) {
if ( virgolette==0 && carattere == '"' ) virgolette=1;
/* ^ carattere == apicesingolo virgolettedoppie apicesingolo ^ */
else if ( virgolette==1 && carattere == '"' ) virgolette=0;
if ( !virgolette && carattere == ',' ) carattere = ';';
printf("%c",carattere);
}
che funziona.
La domanda è: siccome questa trasformazione deve essere fatta all'interno di uno script di bash, non è che qualcuno mi può indicare come farla con sed o con perl, in modo da non dover compilare un programma apposito per un lavoro così stupido ?