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: