Newsgroup: it.comp.lang.c
Titolo: Lettura con fscanf

Premetto che ho appena iniziato a studiare i files(non ho ancora letto
niente)
Dovrei leggere una serie arbitraria di parole da un file. Il sistema che ho
trovato consiste nel leggere prima il file carattere per carattere,
individuando il numero di parole, che viene memorizzato in una variabile.
Poi chiudo il file e lo riapro (per farlo rileggere dall'inizio), leggendo
tante stringhe quante sono le parole trovate.
Così facendo funziona senza problemi(ignorando anche spazi, etc...).
Il dubbio che ho è questo:
FILE è una struttura, tra i cui membri ci dovrebbero essere il puntatore al
prossimo byte da leggere e il puntatore alla base. Pensavo di poter far
ricominciare a leggere il file dall'inizio azzerando il puntatore al
prossimo carattere, ma non ha dato risultati. Come mai?
Tra i vari membri della struttura, c'è la dimensione del buffer. E' questa
la dimensione del file?
Se volete, comunque, mando il file oggetto...
--
Marco Iannaccone
"Questa è una nave moderna, ma ha un nome antico e glorioso...
Trattala come una signora e ti riporterà sempre a casa"

 del file?
<cons>
	$ man fseek
	NAME
       		fgetpos,  fseek,  fsetpos,  ftell,  rewind  - 
		reposition a stream
	SYNOPSIS
       		#include <stdio.h>
	       int fseek( FILE *stream, long offset, int whence);
	       long ftell( FILE *stream);
	       void rewind( FILE *stream);
	       int fgetpos( FILE *stream, fpos_t *pos);
	       int fsetpos( FILE *stream, fpos_t *pos);
	DESCRIPTION
       		The fseek function sets the file position  
		indicator  for the  stream pointed to by stream.  
		The new position, measured in bytes, is obtained 
		by adding offset bytes to the position specified  
		by whence. If whence is set to SEEK_SET, SEEK_CUR, 
		or SEEK_END, the offset is relative to the start of 
		the file, the current position indicator, or 
		end-of-file, respectively. A successful call to 
		the fseek function clears the end-of-file indicator 
		for the stream and undoes any effects of the 
		ungetc(3) function on the same stream.
</cons>
	Alla prossima,
		Marco

prossimo carattere, ma non ha dato risultati. Come mai?
Non toccare mai i dati contenuti nella struttura FILE (OOP dove sei
?;)) ma limitati ad usare le funzioni standard, come rewind() per
esempio, che e' *quasi* come fseek().
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
---------------------------------------------

Grazie, ma mi serve qualcosa di standard(programmo anche sotto DOS)...


Grazie, comunque mi è venuta in mente un'altra cosa:
se provassi a leggere una stringa dal file, controllando se è una stringa
vuota e/o magari il valore restituito da fscanf(), continuando con altre
stringhe solo in caso positivo?
(Come ho già detto ho fatto solo qualche esperimento con i file, quindi non
so cose si comportano le funzioni leggendo ad esempio da file vuoti o
comunque tentando di leggere qualcosa che non c'è...)


 prossimo byte da leggere e il puntatore alla base.
Veramente FILE dovrebbe essere considerato un "tipo opaco" e quindi
andare a guardare cosa contiene ed utilizzare quelle informazioni è
pratica altamente sconsigliabile.
EMG

comunque tentando di leggere qualcosa che non c'è...)
Devi analizzare i valori di ritorno.


Veramente FILE dovrebbe essere considerato un "tipo opaco" 
Assolutamente vero ! ;)


 Grazie, ma mi serve qualcosa di standard(programmo anche sotto DOS)...
fseek() _e'_standard_
--
 Ciao, Luca.
 Reply to 
luca....@tiscalinet.it

scusa, pensavo fosse una delle funzioni per il filesystem unix...(avevo
detto che non ho ancora studiato bene i files... :) )
--
Marco Iannaccone
"Questa è una nave moderna, ma ha un nome antico e glorioso...
Trattala come una signora e ti riporterà sempre a casa"
@
tiscalinet.it

Ho risolto il problema della lettura di parole...
Volevo solo sapere cosa ottengo andando a leggere indefinitamente delle
stringhe da un file, magari vuoto, con fscanf....


Ah, grazie, era proprio questo che volevo sapere qualche domanda fa....
Comunque, al di la del valore di ritorno di fscanf, che stringa ottengo
leggendo oltre la fine di un file?



A volte si scambia il NG per un manuale OnLine.
Avresti sprecato meno tempo e meno soldi di bolletta, andando a vedere
sull' help del compilatore che usi che quando non c'e' input da leggere
fscanf restituisce EOF.
Ivan Molella

 A volte si scambia il NG per un manuale OnLine.
Condivido pienamente.
EMG

Infatti, solo che volevo fare prima qualche esperimento....


fscanf restituisce EOF.
EOF viene restituito quando si cerca di leggere oltre la fine del
file. "Quando non c'e' input da leggere" puo' significare "quando non
c'e' nessun input che corrisponda al formato impartito alla funzione".
In questo caso fscanf() restituisce 0 (zero), cioe' il numero di campi
effettivamente assegnati.


stringhe da un file, magari vuoto, con fscanf....
che si riferisce chiaramente al caso di lettura indiscriminata fino al
raggiungimento della fine del file,non dell 'input conforme alla
formattazione impartita alla funzione.
Ivan Molella