PDA

View Full Version : [C] posizione in un file .txt


VendeR
20-04-2006, 00:54
ciao raga!!! sono sempre io, il vostro stress che ogni tanto torana farsi sentire con nuovi problemi :D :D
allora ecco il recente: io devo leggere più volte un file di testo (già caricato) il quale nella prima riga contiene le dimensioni di una matrice, e nelle righe successive i valori da mettere nella matrice: quando arrivo alla fine del file di testo, devo ricominciare la lettura della matrice da capo, ma non devo leggere di nuovo la prima riga contenente le dimensioni.. inoltre vorrei poter andare (da un punto qualunque del file di testo) di nuovo alla prima riga della matrice.. come posso fare?? :confused:
ho provato ad usare rewind, ma mi fa ricominciare dalla prima riga del file di testo, e quindi ogni volta mi fa leggere le dimensioni della matrice..(ok potrei leggerle a vuoto, però non mi pare stia benissimo..).
ho anche provato a scrivere questo codice, ma non gli piace:
all'inizio, appena ho letto i valori di righe e colonne ho scritto:
long pos;
pos = ftell(pf); /*pf è il puntatore al file di testo*/
e poi più avanti nel programma, quando voglio (o meglio, vorrei) ritornare alla seconda riga del file di testo, ho scritto:
fseek(pf,pos,SEEK_SET);
non dovrebbe essere giusto?? come mai mi da casini(non si posiziona dove dovrebbe)?? non so proprio che fare.. :muro: :muro: :muro:
grazie a tutti in anticipo!

andbin
20-04-2006, 09:41
long pos;
pos = ftell(pf); /*pf è il puntatore al file di testo*/
e poi più avanti nel programma, quando voglio (o meglio, vorrei) ritornare alla seconda riga del file di testo, ho scritto:
fseek(pf,pos,SEEK_SET);
non dovrebbe essere giusto?? come mai mi da casini(non si posiziona dove dovrebbe)?? non so proprio che fare.. :muro: :muro: :muro:
grazie a tutti in anticipo!Visto così direi che è giustissimo. Controlla cosa ti ritorna la fseek. Se ti ritorna diverso da 0 (-1 secondo le specifiche), prova a stampare a video il valore di errno (aggiungi #include <errno.h>), così vediamo cosa diavolo è successo!

VendeR
20-04-2006, 13:37
ok più tardi provo.. ma per stampare errno va bene se faccio così:
printf("%d",errno);
o ci va qualcosìaltro??

andbin
20-04-2006, 13:50
ok più tardi provo.. ma per stampare errno va bene se faccio così:
printf("%d",errno);
o ci va qualcosìaltro??Va benissimo. errno è un int.

VendeR
20-04-2006, 13:59
ok dopo che ho finito di studiare analisi lo provo :D :D

VendeR
21-04-2006, 00:33
guarda ho provato a vedere cosa mi ritornava, ed era sempre 0.. comunque ho modificato un pò il resto del codice ed ora fseek funziona alla grande :D :D
si lo so ho :ciapet: :ciapet: !
solo una piccola (ed ultima) info: ma errno contiene tutti gli errori ritornati dalle funzioni? cioè come funziona scusa??

andbin
21-04-2006, 10:17
ma errno contiene tutti gli errori ritornati dalle funzioni? cioè come funziona scusa??errno è una variabile (di tipo int, come ho già detto) che è contenuta all'interno della libreria standard del "C". Quando una delle funzioni della libreria standard fallisce per qualche motivo, ritorna un valore che indica, in modo generico, un errore (es. NULL per la fopen o la malloc, diverso da 0 per la fseek, ecc...). Oltre a questo, imposta la variabile errno ad un valore specifico più significativo. Nota che non tutte le funzioni della libreria standard ritornano un errore o impostano errno!!!

Per conoscere i tipi di errore possibili per errno, consulta la guida del tuo compilatore.

VendeR
21-04-2006, 13:42
ok grazie mille per le info!!