begin process at 2012 05 29 19:25:50
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Nombre d'entier d'un fichier composé de chiffres


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Nombre d'entier d'un fichier composé de chiffres

mercredi 21 avril 2004 à 10:22:05 | Nombre d'entier d'un fichier composé de chiffres

ValToutCourt

Bonjour à tous,
j'ai un probléme en programmation, je dois recupérer le nombre d'entier stoké dans un fichier, ca parait bidon, mais j'ai deja tout essayé et ca marche pas!!!Je recupére toujours un chiffre bidon.

Je m'explique:
L'énoncé du probléme est le suivant:
"Construire un fichier de données comportant un certain nombre d'entiers en utilisant un editeur de texte. On ouvrira ce fichier puis on lira les données de ce fichier pour les trier en ordre non décroissant. "

Le programme est presque fait.Il me reste a savoir CE nombres de chiffres!

Comment faire pour recupérer le nombre exact de chiffres de mon fichier? (il me sert a créer mon tableau dans lequel j'effectue mon trie).
Je ne sais pas si mon probleme proviens du fichier de données ou de ma fonction elle meme.

int taille_fichier(char *fichier)
{int p, taille_fich,taille_lue;
int tabchar[BUFSIZE];
FILE *f;

if ((f=fopen(fichier,"r"))==0) {exit(2);}

p=0;
while((taille_lue=fread(tabchar,sizeof(int),BUFSIZE,f)) ==BUFSIZE)
p++;

taille_fich=p*BUFSIZE+taille_lue;
fclose(f);
return taille_fich;
}

Merci d'avance pour ceux qui pourrait m'eclairer!!

Val
mercredi 21 avril 2004 à 10:46:46 | Re : Nombre d'entier d'un fichier composé de chiffres

c2millet

Tu as essayé ceci "taille_fich=taille_fich+taille_lue "?
Cmill

mercredi 21 avril 2004 à 14:14:17 | Re : Nombre d'entier d'un fichier composé de chiffres

theneoiceman

La solution devrait etre assez simple a comprendre ...
En fait les nombres qui composent ton fichier c'est toi meme qui les a rentrés on est d'accord ? Donc ca fait que tu dois les récupérer en utilisant la fonction fscanf car la fonction fread ne lit que les fichiers écrits en binaire et non sous forme de texte comme tu l'as fait pour ton fichier contenant les nombres... Tu me suis ?
tu fais une boucle qui parcoure ton fichier du debut a la fin, utilisant fscanf et incrementant un compteur a chaque nombre trouvé. Ca donne un trcu du genre :

// on suppose que ton fichier est deja ouvert et tout...
int nbNbre=0; // <==> a ta variable p en fait
int temp;

while(!feof(f))
{
fscanf(f,"%d",&temp);
nbNbre++;
}

return temp;

C'est aussi simple que ca... essaye, tu verras ca devrait marcher comme ca. Tiens moi au courant.
Et surtout n'oublie pas la grande différence entre fread et fscanf : fread lit les fichiers binaires (utile si tu veux récupéré des données écrites à l'aide de la fonction fwrite dans un fichier(très utile pour sauvegarder/charger des structures) alors que fscanf lit les fichiers en mode texte (ca recupere les données telles que les entiers, les chaines de caracteres etc.). Voila voila.
J'attends de tes news.
++
jeudi 22 avril 2004 à 13:48:39 | Re : Nombre d'entier d'un fichier composé de chiffres

ValToutCourt

C'est impec!!!
Mon programme fonctionne, j'ai tout modifié comme tu me l'as indiqué meme la suite du programme!
C'est cool!
Merci!

Par contre, j'ai un autre probléme pour une autre fonction d'affichage, quand j'utilise cette meme structure, il m'affiche deux fois le dernier chiffre!

C'est a dire quand mon fichier est composé de 1 2 3 il m'affiche 1 2 3 3.


while(!feof(f))
{fread(&i,sizeof(int),1,f);
printf("%d|",i);
}

avec fscanf(f,"%d",&i), le resultat tourne en boucle et ne s'arrete plus!

Je l'ai modifié de cette facon:

while(fread(&i,sizeof(int),1,f))
{ printf("%d|",i);
}
programme qui marche.

Mais Y a t il pas moyen de garder la structure while(!feof(f)) ?


Val







jeudi 22 avril 2004 à 23:34:44 | Re : Nombre d'entier d'un fichier composé de chiffres

theneoiceman

Ya peut etre une solution mais je la trouve moi meme un peu trop "bourrinne" et je suis mem pas sur qu'elle fonctionnerait... il faudrait rejouter un autre test dans la boucle...
En fait faudrait tester si ya encore la place de recupérer un entier dans le fichier ouvert...
Un truc du genre :
while(!feof(f))
{
int tmp=ftell(f);
fseek(f,0L,SEEK_END);
if((ftell(f)-tmp)>= (sizeof(int)))
{
fseek(f,tmp,SEEK_SET);
fscanf(f,"%d",&d);
}
}

Je ne garantis pas que cette méthode marche pour plusieurs raisons :
- la fonction ftell est très utilisée pour les fichiers binaires mais la son action sera très limitée.
- je compare la taille entre la fin du fichier et la position courante pour savoir si il ya la place e mettre un entier encore et donc il se peut que ce test ne marche pas a tous les coups.... au pire si ca marche pas envoie moi la sour ce de ton programme et je verrai ce que je peux faire en gardant la structure du while(!feof())...
Voila sur ce je te dis bonne prog et à très bientot pour de nouvelles news de ta part....
++
neo

vendredi 23 avril 2004 à 17:33:52 | Re : Nombre d'entier d'un fichier composé de chiffres

ValToutCourt


Je n'ai pas essayé cette solution, elle me semble un peu compliquée, ou lourde plutot!
Je pensais qu'il y avais peut etre une astuce toute bidon...Je vais laisser ma structure telle quelle!
Mais merci quand meme d'y avoir reflechi!

Dans la série combine, je sais qu'on peut faire un test dans la boucle:
while feof(stdin),servant à saisir des entiers au clavier, au cas ou on ne taperais pas un entier (une lettre par exemple)
Quelqu'un connaitrait-il ce test.Il permettrais de ne pas stopper la saisie.

int saisie(int tab[L])
{int n=0;
while((!feof(stdin))&&(n<=L))
{scanf("%d",tab+n);
if(TEST ENTIER) {n++;}
else {printf("Ce n'est pas un entier/chiffre");}
}
return n;
}

Merci pour vos reponses!

Val


Cette discussion est classée dans : fichier, taille, nombre, int, chiffres


Répondre à ce message

Sujets en rapport avec ce message

nombre de caractère [ par mig73 ] salut à tousje suis sous visual c++.netj'ai utilisé la fonction suivante:CFile::GetLenght qui me donne la taille en octet du fichier que je lisA parti Connaitre le nombre de valeurs dans un fichier [ par Jarod1980 ] Salut,J'ai en fait deux petits problèmes que je n'arrive pas à résoudre. Je voudrais ouvrir un fichier contenant uniquement des valeurs et en connaîtr Lire des chiffres avec les virgules [ par Stiko ] salut, j'ai fait un petit programme pour ouvrire un fichier texte qui contient seument des chifres séparées par des points virgules.ce programme lit l Trouver le nombre X [ par mustaphase ] bonjour les amis , je viens de résoudre une énigme mathématique qui dit : Trouver le Nombre X , composé de 87 chiffres , et divisible par 2^87 , et remplir un nombre dans un tableau [ par alex934 ] Bonjour, j'ai besoin de votre aide :) Voila je souhaite mettre un nombre stocké(int) dans un tableau exemple: int a=132; int tab[3]; je voudrais Problème de définition de fonction dans une classe [ par labuche75 ] Bonjour à tous, je rencontre un problème à priori de définition de fonction dans la classe tableau permettant de manipuler de grands entiers nécessair Probleme Erreur Segmentation [ par kyubi6363 ] Voila sa compile bien mais erreur de segmentation quand je lance. Pouvais vous me dire ce qu'il ne va pas :) #include #include #define TAILLE_LARG petit probléme renvoi structure [ par diazounet ] Bonjour , doonc voila j'ai un petit probleme , dans un exo ya une question qui m'embete , la voici : Écrire une fonction de lecture qui prend en para Problème d'affichage a la lecture d'un fichier avec fonction fstream et stockage dans une chaine [ par curite ] Bonjours, j'ai créer un gestionnaire de mot de passe en c++ je vous montre le code sinon vous allez rien comprendre :p main.cpp [code=cpp] #include Agrandir la taille d'un tableau ? [ par ndubien ] Bonjour, Je cherche à agrandir un tableau ainsi:int variable = malloc( sizeof(int)*taille );Pour qu'elle devienne: int variable = malloc( sizeof(int)*


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,683 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales