Repository 32bit  Forum
Repository 64bit  Wiki

effettuare la scansione di un text file in C

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

effettuare la scansione di un text file in C

Messaggioda dark0s » ven ott 03, 2008 14:13

Ciao a tutti, mho un problema serio riguardo la programmazione in linguaggio C.
Devo effettuare la scansione di un file di testo, ad esempio un file del tipo:

#Begin configuration file

OPTION1=...
OPTION2=...

#End configuration file

Devo leggere i valori delle variabili OPTION, ma devo effettuare tutto questo in linguaggio C.
Qualcuno sa darmi qualche dritta? Le provate tutte..., uso l'interfaccia standard ANSI C degli stream, ma non riesco a leggere neppure un rigo.

Grazie, e ciao
dark0s
Linux 2.6
Linux 2.6
 
Messaggi: 556
Iscritto il: lun gen 10, 2005 0:00

Re: effettuare la scansione di un text file in C

Messaggioda Blizzard » ven ott 03, 2008 15:36

ciao,
perchè non posti il codice che hai scritto e vediamo di capire il perchè non funziona???

se poi vuoi qualcosa di gia pronto in tavola puoi dare un'occhiata al lettore di config file che ho fatto per una mezza shell che ho sviluppato
http://digilander.libero.it/bohshell/
li uso parecchio POSIX... ma quella parte dovrebbe essere facilmente convertita in ANSI

Gio
Avatar utente
Blizzard
Master
Master
 
Messaggi: 1509
Iscritto il: mar gen 02, 2007 22:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox

Re: effettuare la scansione di un text file in C

Messaggioda Blizzard » ven ott 03, 2008 15:40

http://bohsh.cvs.sourceforge.net/viewvc ... iew=markup
di preciso è la prima funzione di questo file
Avatar utente
Blizzard
Master
Master
 
Messaggi: 1509
Iscritto il: mar gen 02, 2007 22:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox

Re: effettuare la scansione di un text file in C

Messaggioda dark0s » ven ott 03, 2008 16:38

Il mio prototipo per ora è il seguente:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main(int argc, char* argv[]) {

int fd, d;
size_t lsize;
FILE* conf_file;
char * line = NULL;

if (argc == 1) {
printf("\nCommand syntax:\n");
printf("\n\tprogramd [ start | stop ]\n");
printf("\t\tstart: start daemon\n");
printf("\t\tstop: stop daemon\n");
}
else if (strcmp(argv[1], "start") == 0) {
conf_file = fopen("/etc/program/program.conf", "r");
if (conf_file == NULL) perror("File not open");
while (!feof(conf_file)) {
d = getline(line, lsize, "/etc/program/program.conf");
printf("%d\n", d);
printf("%s\n", line);
}
}

return(0);

}



Compilazione ed esecuzione vanno nel modo seguente:

bash-3.1# gcc programd.c -o programd
bash-3.1# ./programd

Command syntax:

programd [ start | stop ]
start: start daemon
stop: stop daemon
bash-3.1# ./programd start
-1
Segmentation fault
bash-3.1#

mentre il file di configurazione è il seguente:

# Begin configuration file

OPT=/etc/myprogram/myprogram.log

OPT=/etc/myprogram/myprogram.lock

# End configuration file
dark0s
Linux 2.6
Linux 2.6
 
Messaggi: 556
Iscritto il: lun gen 10, 2005 0:00

Re: effettuare la scansione di un text file in C

Messaggioda Blizzard » ven ott 03, 2008 17:06

scusa ma hai fatto un po un casino

Codice: Seleziona tutto
conf_file = fopen("program.conf", "r");
      if (conf_file == NULL) perror("File not open");
      while (d = getline(&line, &lsize, conf_file)!=-1) {
         
         printf("%d\n", d);
         printf("%s", line);
         free(line);
         line=NULL;
      }
      fclose(conf_file);


man getline per vedere dove avevi incasinato nel chiamare la funzione... a partire dai puntatori sino allo stream del file

Gio

edit: ho cambiato il path del file per provarlo... rimetti il tuo
Ariedit:
1. CHIUDI I FILEEEEES!!!!!
2. un puntatore lo hai dichiarato type * var; un'altro type* var;
il modo generalmente migliore è type *var; :D
3. occhio a quando faccio la free e assegnamento NULL di line. È abbastanza importante
Avatar utente
Blizzard
Master
Master
 
Messaggi: 1509
Iscritto il: mar gen 02, 2007 22:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox

Re: effettuare la scansione di un text file in C

Messaggioda targzeta » ven ott 03, 2008 17:48

dark0s ha scritto:...d = getline(line, lsize, "/etc/program/program.conf");...

Dal getline(3), il prototipo della funzione è:
Codice: Seleziona tutto
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
quindi tutti e tre i parametri che gli passi sono sbagliati. I primi due perchè non gli passi dei puntatori, ma semplicemente la copia delle variabili, quindi getline non può lavorarci su. Il terzo perchè non è neanche del tipo richiesto (non che i primi due lo fossero, ma ti eri avvicinato di più :D). Prova a compilare con:
Codice: Seleziona tutto
-Wall -pedantic
generalmente questi errori grossolani li noti al volo così.

Spina
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6201
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti

cron