====== Estrarre Indirizzi e-mail da un file di testo ====== Autore: **//Santo Patti//** ... mettiamo che il tuo capo ha gli indirizzi e-mail dei suoi clienti sparsi per vari file sul pc, e ti chiede di raccoglierli in un elenco da usare per il suo bel programmino per le mailing list, che fai? (succede succede e certo non gli puoi dire: "ti farò sapere....") Scrivi un bel programmino in c che da un file di testo dove hai incollato di tutto ti produce un altro file di testo ordinato con un indirizzo e-mail per riga :). L'ho scritto stamattina al lavoro, in poco tempo, certo sarebbe da farsi con un bel parser... o studiandosi prima un automa a stati finiti ma funziona per quasi tutti gli indirizzi e-mail. #include #include char nuovo[256]; int isSimbol(char x); int isDigit(char x); int isSpecialSimbol(char x); void estendi(char *p); int main(int args, char *argv[]) { FILE *file; FILE *outfile; char c,z; if (args!=2) { printf("Manca il file sorgente\n"); return 0; } file=fopen(argv[1],"r"); estendi(argv[1]); if (!file) { printf("Non e' stato possibile aprire il file\n"); return 0; } printf("%s\n",&nuovo[0]); outfile=fopen(&nuovo[0],"w"); if (!outfile) { printf("Non e' stato creato il file di output\n"); return 0; } int contaeln=0; while (1) { c=(char) getc(file); if (c == EOF) break; if ((isDigit(c)) || (isSimbol(c)) || (isSpecialSimbol(c)) || ( c == '@')) { putc(c, outfile); contaeln=1; } else if (contaeln == 1) { putc('\n', outfile); contaeln=0; } } putc(EOF, outfile); fclose(file); fclose(outfile); return 0; } int isSimbol(char x) { int cdec=(int)x; if ( ((cdec <91) && (cdec > 64)) || (( cdec<123) && (cdec >96)) ) return 1; return 0; } int isDigit(char x){ int cdec=(int)x; if ( ( cdec < 58) && ( cdec > 47 ) ) return 1; return 0; } int isSpecialSimbol(char x) { int cdec=(int)x; if ((cdec == 95) || (cdec == 45) || (cdec == 46)) return 1; return 0; } void estendi(char *p) { int cnt,i; for (cnt=0; cnt<256; cnt++) nuovo[cnt]=0; cnt=0; while (p[cnt++]!=0); for(i=0; i < cnt; i++) nuovo[i]=p[i]; nuovo[cnt-1]='.'; nuovo[cnt]='o'; }