Fseek en c++

Signaler
Messages postés
82
Date d'inscription
vendredi 20 mai 2005
Statut
Membre
Dernière intervention
24 octobre 2005
-
Messages postés
202
Date d'inscription
dimanche 18 mai 2003
Statut
Membre
Dernière intervention
6 mars 2010
-
Bonjour,
je cherche l'equivalent de fseek en c++, j'ai utilise la fonction suivante:
vecteur* RegionApprox:: readvecteur(char *fichier,int *taille)
{
int cp=0;
float val1,cst=1600/(4*d);
ifstream Al;
vecteur *data;
data=new vecteur[cst];

Al.open(fichier);
//fseek(Al,*taille*4*d-1,0);?????
while ((Al )&& (cp<cst))
{
for(int i=0;i<d;i++)
{
Al>>val1;
data[cp].coord[i]=val1;
}
cp++;
}
(*taille)=cp-1;
if(!Al) *taille=-1;
Al.close();
return data;
}
comment je peux l'utiliser dans cette fonction .
Merci d'avance

3 réponses

Messages postés
202
Date d'inscription
dimanche 18 mai 2003
Statut
Membre
Dernière intervention
6 mars 2010

la fonction est seekg( offset , dir ).



offset : déplacement de offset octet dans le fichier

dir : peut prendre 3 valeurs :

- std::ios_base::beg : à partir du début du fichier

- std::ios_base::cur : depuis la position courante

- std::ios_base::end : à partir de la fin du fichier

Voili,Voilou
Messages postés
82
Date d'inscription
vendredi 20 mai 2005
Statut
Membre
Dernière intervention
24 octobre 2005

oui c ca merci, mais j'utilise le fichier txt qui contient les donnés suivante:
44.4 22.1993 21.9798 58.44 32.34 55.34 567. 45 12 56 45.56 45.56 76.45...

pour lire le n*10eme element j'ai utiliser le bout du code:
void vecteur::readvecteur(char *fich,int i)
{
ifstream Al;
float val;
Al.open(fich);
Al.seekg((10*i*4),ios::beg);
Al>>val;
cout<<val<<" ";
}
for(int i=0;i<N;i++)
{
readvecteur(fich,int i);
}
je recupére des valeurs tronqué par rapports aus valeurs du fichier par exemple:2.5 au lieu de 12.5
quelqu'un peut me dire pourqoi?
Merci
Messages postés
202
Date d'inscription
dimanche 18 mai 2003
Statut
Membre
Dernière intervention
6 mars 2010

tu lis des données dans un fichier texte. les fottant sont enregistrer
en caratères. étant données que la taille des nombres soient variables
( ex: 44.4 : 4 octets , 21.1933 : 7 octets ... ) tu ne peut pas
utilisé cette méthode.



tu peux compter les espace. Au n-1 espace tu lis ton nombre.



code:



while( i > 1 )

{

if( Al.get() == ' ' )

i--;

}

Al >> val;




si tu veut utilisé la même technique ( avec seekg ) il faut stocker tes valeur en fichier binaire.


Voili,Voilou