[FoLUG] Compiti di fine anno
Michele Mordenti
michele.mordenti@gmail.com
Gio 31 Dic 2009 08:36:57 CET
Il 30 dicembre 2009 17.24, Alessandro Ronchi
<alessandro.ronchi@soasi.com> ha scritto:
> questo dovrebbe funzionare.
> Dovrei avere il file per capire meglio se è performante o meno.
> Se hai una tabella ORACLE certamente ti posso trovare l'output più
> velocemente, ma immagino che non sia così semplice altrimenti non l'avresti
> già scartata come ipotesi.
>
>
> fileHandle = open ( 'test.txt', 'r' )
> males = open ('m.txt', 'w')
> females = open ('f.txt', 'w')
>
> for line in f.xreadlines():
> sex = line[72]
> if sex == "M":
> males.write(line)
> elif sex == "F":
> females.write(line)
Perchè non scrivere un bel filtro C come ai vecchi tempi:
terminale nero, caratteri verdi, emacs, gcc e un po' di prurito alle mani:
(p.s.: lo avevo omesso, ma le righe sono lunghe al massimo 226 caratteri)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFER_LEN 255
int main(int argc, char *argv[]) {
FILE *rfile,*wfile;
char buffer[BUFFER_LEN];
char *fileSource, *fileTarget, *postfisso;
char marker;
int column;
if (argc!=4) {
printf("Uso:\n\t %s marker colonna filesorgente\n",argv[0]);
return 1;
}
marker = argv[1][0];
column = atoi(argv[2]);
fileSource = strdup(argv[3]);
postfisso = (char *) malloc(4*sizeof(char));
fileTarget = (char *)
malloc((sizeof(fileSource)+sizeof(postfisso))*sizeof(char));
strcpy(fileTarget,fileSource);
postfisso[0]='_';
postfisso[1]='_';
postfisso[2]=marker;
postfisso[3]='\0';
strcat(fileTarget,postfisso);
/* DEBUG
printf("File sorgente: %s\n",fileSource);
printf("File destinazione: %s\n",fileTarget);
printf("marker: %c\ncolonna: %i\n", marker,column);
*/
rfile = fopen(fileSource,"r");
wfile = fopen(fileTarget,"w");
if (rfile == NULL ){
printf("Errore apertura file %s.\n",fileSource);
return -1;
}
if (wfile == NULL ){
printf("Errore apertura file %s.\n",fileTarget);
return -1;
}
// fgets() restituisce un puntatore nullo alla fine del file.
while ( fgets(buffer,BUFFER_LEN,rfile) ) {
if(buffer[column] == marker){
fputs(buffer,wfile);
}
}
printf("Controlla il file %s\n",fileTarget);
fclose(rfile);
fclose(wfile);
free(fileSource);
free(fileTarget);
free(postfisso);
return 0;
}
--
Michele Mordenti
http://michelemordenti.netsons.org
Maggiori informazioni sulla lista
FoLUG