[Tech] la funzione fopen del C

Claudio Kutufà claudiok@nexusfi.it
Lun 21 Giu 2004 18:02:34 CEST


At 17.46 21/06/04 +0200, you wrote:
>Ciao a tutti.
>
>vorrei far leggere un file di testo a un programma in modo che venga 
>riconosciuta e estratta una stringa di caratteri.
>In particolare il programma deve controllore se nel file di testo c'è il 
>nome di un server.
>
>File di testo:
>
>[localhost.localdomain]
><serie di opzioni>
>
>
>EOF
>
>il codice c deve leggere il file di testo, riconoscere che all'interno 
>delle parentesi [  ] c'è qualcosa e trascrivere quel qualcosa in una stringa:
>
>#include <stdio.h>
>#include <unistd.h>
>#include <stdlib.h>
>
>main() {
>   char name[30]={ };
>   char host[30]={ };
>   char nome[30]={ };
>   FILE *fd;
>   char ch;
>   char dati[1];
>   int op;
>
>   // identificazione stazione
>   if (gethostname(name,sizeof(name))==-1)
>     {
>     printf("Viola Alè, un centra niente ma va sempre bene");
>     }
>
>   // crea il nome per il confronto
>   strcpy(nome,"["); // aggiunge [ all'inizio di name
>   strcat(nome,name);
>
>   // Apre il file di configurazione
>   if (!(fd=fopen("DBServer","r"))) {
>    perror("Errore");
>   }

io avrei scritto così:

>   // da qui iniziano le grane.
>   op=2;
>   while ((ch=fgetc(fd)) != EOF)
>     {

         if ( ch == '[')
                 op = 1;
         if ( ch == ']')
                 op = 2;

>       memset(dati,ch,sizeof(dati));
>       if (strcmp(dati, "[") == 0) { // se si verifica devi iniziare a 
> copiare il carattere letto nella stringa host
>         op=1;
>       } else if (strcmp(dati,"]") == 0) { // se si verifica smetti di 
> copiare il caratte in host
>         op=2;
>       }
>       if (op==1) { // QUESTA PARTE NON FUNZIONA MAI PERCHE' NON RICONOSCE 
> LA [
>         strcat(host,dati);
>       }
>   }
>   printf("%s\n",host);
>   fclose(fd);
>}
>
>Dove sbaglio???
>
>Grazie, Vale

         char    *ptr1, *ptr2;
         char stringa[1000];
         int     aus_int;
         char aus[1000];
         FILE *Puntatore-file;

         fopen(......, Puntatore-file)

         while(fgets(stringa, MAXLEN, Puntatore-file))
         {
                 ptr1 = 0;
                 ptr2 = 0;
                 ptr1 = strstr( stringa, "[" );
                 ptr2 = strstr( stringa, "]" );
                 if( ptr1 > ptr2 )
                 {
                         printf( "Errore (1) pos parentesi quadre nel 
file\n" );
                         exit(1);
                 }
                 if( ptr1 == 0 || ptr2 == 0)
                 {
                         printf( "Errore (2) manca il dato\n" );
                         exit(1);
                 }
                 strcpy( aus, "" );
                 strcpy( aus, ptr1 + 1 );
                 aus[ptr2 - ptr1 - 1] = '\0';
                 strcpy( stringa_che_deve_contenere_il_tuo_parametro, aus );
         }


>--
>Valerio Montagnani        (Lug-Account)        <tech@vmontagnani.it>
>               pub 1024/C7E4BC57    sub 2048g/0E170155
>Key fingerprint = D5A4 EDFC 060C 5BD6 E2DD  8252 3B67 C1EB C7E4 BC57
>_______________________________________________
>FLUG - Discussioni tecniche - tech@firenze.linux.it
>URL: http://lists.firenze.linux.it/mailman/listinfo/tech
>Archivio: http://lists.firenze.linux.it/pipermail/tech
>Ricerca nell'archivio: http://www.firenze.linux.it/search


_____________________________________________________________

Ing. Claudio Kutufa'
NEXUS SISTEMI INFORMATIVI S.P.A.
e-mail personale: claudiok@nexusfi.it
tel. cellulare: 335 5859567
Sede Oper.va : Via Dante da Castiglione, 33
Tel. : +39 055 229413 Fax : +39 055 229785
50125 Firenze - Italy
Sede Amm.va : Via Panciatichi 40/11
Tel. : +39 055 4222030 Fax : +39 055 4376670
50100 Firenze - Italy
Nexus home page: www.nexusfi.it
_____________________________________________________________




Maggiori informazioni sulla lista flug-tech