Ti ho scritto un piccolo programmino in C che fa il lavoro, e' in allegato. Funziona bene sul pezzo che hai mandato. Lo compili con gcc main.c -o filtro dopodiche' fai filtro <nomefile> e lui ti stampa un . per ogni riga elaborata. L'unico problema e' il seguente: per ogni riga conta 7 virgole, poi inserisce un ' poi conta altri 8 caratteri e inserisce un altro ' quindi non fa nessun controllo se la riga sia giusta o meno. Ti conviene isolare la parte da modificare in un altro file e poi eseguire il filtro solo su quel pezzo. ciao ciao On Wed, Apr 25, 2001 at 11:08:15AM +0200, Fabrizio Pucci wrote: > > ANTEFATTO > > Volendo passare dalla Red Hat 7.0 alla 7.1 ho provveduto a fare il back-up > dei dati. Tra le altre cose ho eseguito il backup del mio database musicale > su MySQL, facendo il dump e trasformando l'eseguibile con i dati, in un > lungo file di testo contenente le query SQL per ricreare il db > > PROBLEMA > > Malauguratamente il dump ha creato il file con un piccolo errore. Ecco > alcune righe di esempio > <snip> > > Si tratta di un tipico problema da "Amministratori di sistema" ma anche da > "Programmatori"... > > C'è qualcuno tra voi così bravo da riuscire a darmi una mano? ;-)))) > > Grazie > > Fabrizio Pucci > > > -- ----------------------------------------------------- Daniele Venzano Senior member of the Linux User Group Genova (LUGGe) E-Mail: venza@xxxxxx Web: http://digilander.iol.it/webvenza/ LUGGe: http://lugge.ziobudda.net -- Attached file included as plaintext by Listar -- /* Scritto da Daniele Venzano in una mezzoretta, tutti i diritti */ /* riservati. Coperto dalla licenza GPL v.2 */ #include <stdio.h> #include <string.h> #define NUMERO_VIRGOLE 7 #define LUNG_TEMPO 8 int main(int argc, char *argv[]) { FILE *fp_read,*fp_write; char line_buf[200],c; int num_virgole=0; int index; int index2; int i; if(argc < 2) { fprintf(stderr, "Usage: filtro <nome_file>\n"); exit(1); } fp_read=fopen(argv[1],"r"); if(fp_read==NULL) { fprintf(stderr,"%s non trovato\n",argv[1]); exit(1); } memset(line_buf,'\0',200); index=0; fp_write=fopen("output.txt","w"); printf("\n"); while((c=fgetc(fp_read))!=EOF) { line_buf[index]=c; if(c=='\n') { printf("."); for(i=0;i<=index;i++) fputc(line_buf[i],fp_write); memset(line_buf,'\0',200); index2=0; index=0; num_virgole=0; continue; } if(c==',') { num_virgole++; if(num_virgole==NUMERO_VIRGOLE) { index++; index2=LUNG_TEMPO; line_buf[index]='\''; index++; while(index2>0) { line_buf[index]=fgetc(fp_read); index++; index2--; } line_buf[index]='\''; num_virgole=0; } } index++; } printf("\nIl file DOVREBBE essere a posto, filtrato in output.txt\n"); return 0; }