001: #include<stdio.h>
002: #include<stdlib.h>
003: #include<string.h>
004: #include<ctype.h>
005:
006: struct numeri
007: {
008: char pal[5+1];
009: char nome[30+1];
010: unsigned int telefono;
011: };
012:
013:
014: int main(int argc, char **argv){
015:
016: // APRO FILE
017: FILE *fp=fopen("telefoni.csv", "r");
018: if(!fp)
019: {
020: perror("Errore apertura file");
021: exit(EXIT_FAILURE);
022: }
023:
024: // LEGGO QUANTE RIGHE HO, PER SAPERE QUANTO ALLOCARE
025: int righe=0;
026: struct numeri tmp;
027: while(fscanf(fp, " %[^,],%[^,],%u", tmp.pal, tmp.nome, &tmp.telefono)==3)
028: ++righe;
029:
030: // DEBUG printf("Ho %d righe\n", righe);
031:
032: // ALLOCO ARRAY
033: struct numeri *dati=malloc(righe*sizeof(struct numeri));
034: if(!dati)
035: {
036: perror("Errore allocazione");
037: exit(EXIT_FAILURE);
038: }
039:
040: // RITORNO INIZIO FILE
041: fseek(fp, 0, SEEK_SET);
042:
043:
044: // LEGGO E RIEMPO ARRAY
045: righe=0;
046: while(fscanf(fp, " %[^,],%[^,],%u", dati[righe].pal, dati[righe].nome, &dati[righe].telefono)==3)
047: {
048: ++righe; // sposto indice array
049: }
050:
051: fclose(fp);
052:
053: // PUNTO 2 STAMPO CONTENUTO ARRAY (Nota: andava benissimo farlo in fase di lettura)
054: int i;
055: for(i=0; i < righe; ++i)
056: {
057: printf("%s\t%s\t%u\n", dati[i].pal, dati[i].nome, dati[i].telefono);
058: }
059:
060: // punto 3
061:
062: while(1)
063: {
064: char s[100];
065: printf("\nInserire una stringa per la ricerca: ");
066: scanf(" %[^\n]", s);
067: if(islower(s[0])) // inizia per lettera minuscola_
068: {
069: for(i=0; i < righe; ++i)
070: {
071: if(!strcmp(s,dati[i].pal))
072: {
073: printf("%s\t%s\t%u\n", dati[i].pal, dati[i].nome, dati[i].telefono);
074: }
075: }
076: }
077: else if(isupper(s[0]))// inizia per lettera maiuscola
078: {
079: for(i=0; i < righe; ++i)
080: {
081: if(!strncmp(s,dati[i].nome,strlen(s)))
082: {
083: printf("%s\t%s\t%u\n", dati[i].pal, dati[i].nome, dati[i].telefono);
084: }
085: }
086: }
087: else // controlliamo sia un numero
088: {
089: for(i=0; i < strlen(s); ++i)
090: if(!isdigit(s[i]))
091: {
092: printf("Errore in inserimento stringa di ricerca\n");
093: break;
094: }
095: unsigned int ric=atoi(s);
096: for(i=0; i < righe; ++i)
097: {
098: if(ric==dati[i].telefono)
099: {
100: printf("%s\t%s\t%u\n", dati[i].pal, dati[i].nome, dati[i].telefono);
101: }
102: }
103: }
104: }
105:
106: return 0;
107: }
108:
109: