[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