Newsgroup: it.comp.lang.c
Titolo: AIUTO..FSEEK..(FORSE)

Ciao ragazzi,
sarò brevissimo. Devo creare una funzione che mi consenta di leggere da un
file di testo dei valori da utilizzare. Questi valori sono sia stringhe che
numeri interi. Poichè il file è organizzato in questo modo:
stringa1            stringa2           num_intero
come faccio a prelevare l'intero senza prelevare tutta la stringa??devo
usare fseek?come? nel K&R non ho trovato molto.
Grazie anticipatamente per l'aiuto

 stringa1            stringa2           num_intero
Se conosci a priori la lunghezza delle stringhe puoi usare fseek; in caso 
contrario, devi leggerti tutte le stringhe per arrivare al numero.
Potresti aggiungere un altro campo (di ampiezza fissa, se non ti crea 
problemi) prima di "stringa1" indicante i byte da saltare per raggiungere 
l'intero:
njmp stringa1 stringa2 num_intero
Spero di esserti stato d'aiuto.
Saluti
-- 
Per l'e-mail rimouvere gli underscore e la frase in maiuscole.

 Saluti
Ciao

 perdonami, ma non ho proprio capito. che intendi per campo?
Esempio pratico:
0015 879454654 236 666
0015 è il campo (o stringa, o record, o quello che ti pare) che contiene la 
somma dei caratteri contenuti nelle due stringhe, separatori compresi.
Saluti.


 l'intero:
Ecco,  il problema  e` questo:  lo stream  di testo  e` una  sequenza di
caratteri, fseek, invece, opera con un offset in byte.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
"La Via prosegue senza fine."
	Bilbo Baggins - Il Signore degli Anelli - J.R.R. Tolkien

> E` sconsigliato utilizzare fseek in modo diretto su file di >testo.
Ho risolto in un altro modo, ehm...diciamo alla femminina(come diceva il
caro e vecchio prof. di fisica).
o prelevato dal file tutta la stringa con fgets e poi ho contato la
posizione che i numeri (solo 2 cifre) andavano ad assumere all'interno del
buffer riempito con fgets. Poichè i valori erano sempre gli stessi, quasiasi
era la stringa, mi è bastato prelevare solo i due elementi del buffer che
contenevano i numeri e convertire la stringa con una atoi().
E' un po' complicato e forse poco efficiente, ma funziona bene.
che ne dici?

 caratteri, fseek, invece, opera con un offset in byte.
Se sul sistema di Roberto 1 char=1 byte, è a posto.


 Se sul sistema di Roberto 1 char=1 byte, è a posto.
Uhmm, il char e' per definizione esattamente 1 byte.
Potrebbe essere che il byte non sia esattamente di 8 bit, ma a meno che tu 
non ti occupi di operazioni sui singoli bit, non ne risenti l'influenza.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

 quasiasi era la stringa, mi è bastato prelevare solo i due elementi del
Vuoi dire che le due stringhe erano costanti? Se è così, data la 
discussione con Mox, ti consiglio *vivamente* d'usare fseek: comsumerai 
meno memoria e sarà tutto più veloce.


 
Un problema potrebbe sorgere coi caratteri estesi, wchar_t, ma non sembra 
questo il caso.


 meno memoria e sarà tutto più veloce.
si. ogni stringa è formata da 42 elementi. Il problema è:
come devo usare fseek?Come spoto l'offset sul numero intero di due cifre?

 questo il caso.
Scusate, il problema è un altro: su un file di testo, quello che in C io
scrivo \n, può diventare \r\n(non so se in quest'ordine, forse al contrario,
comunque è \xD\xA), \n, \r secondo il sistema; poiché su DOS, primo caso, un
carattere diventa 2, il conto salta. Per questo NON si usa fseek su file di
testo. Il problema comunque non si presenta sulla prima riga, ma almeno
bisogna andare alla seconda. Ciao
--
Paolo Giarrusso
Per rispondere togliere solo "TOGLIMI" dall'indirizzo, non _spam.

 come devo usare fseek?Come spoto l'offset sul numero intero di due cifre?
Innanzitutto, scusa se ti rispondo con questo ritardo: ho avuto dei 
problemini da nulla, quasi inezie (leggi reistallazione di tutto) con la 
partizione di boot...
FILE *file;
file=fopen("file.fil", "r");
fseek(, 42*2+[spazi_tra_le_stringhe], SEEK_CUR);
Saluti
P.S.: stando a quanto asserito da Blaisorblade, se devi leggere su diverse 
righe la cosa si complica e diventa dipendente dal SO.
