Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1025 connectés 

  FORUM HardWare.fr
  Programmation
  C

  se placer dans un fichier.txt en C [ Probléme Résolut ]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

se placer dans un fichier.txt en C [ Probléme Résolut ]

n°1771790
torx
Posté le 11-08-2008 à 07:22:55  profilanswer
 

Bonjour tout le monde,
 
je cherche à me positionner dans un fichier.txt en connaissant le numéro de la ligne à la quelle je souhaite me placer au début.
 
je ne connais que deux fonctions de positionnement dans un txt
 
fseek :
prototype

Code :
  1. int fseek(FILE* pointeurFichier, long deplacement, int origineDuDeplacement);


 
int origineDuDeplacement modifiée par:

Code :
  1. SEEK_SET //début du fichier.
  2. SEEK_CUR //position actuelle du curseur.
  3. SEEK_END //fin du fichier


 
je ne pense pas que je puisse l'utiliser car je ne suis pas sensé connaitre le nombre de déplacement, je sais juste que je doit me mettre au début de telle ligne connue
 
rewind : positionne le curseur au début
 
édit: je suis sur windows xp pro
 
je suis pas encore très doué en C alors j'ai pas de gros reflex et si c'est possible de me placer à une ligne connue dans un txt avec ces fonctions merci de me mettre sur la voie pour que je trouve, mais sinon merci de me donner la fonction qui pourrais m'aider, merci d'avance
 
ou encore je viens d'avoir l'idée à l'instant, comment compté le nombre de "\n" dans un txt merci je pense que sa pourrais m'aider, merci d'avance, édit: enfin sa je sais le faire, mais surtout se placer après un "\n" précisément.


Message édité par torx le 11-08-2008 à 18:25:18
mood
Publicité
Posté le 11-08-2008 à 07:22:55  profilanswer
 

n°1771802
Joel F
Real men use unique_ptr
Posté le 11-08-2008 à 08:59:27  profilanswer
 

En général, on procède pas comme ça. Soit tu lis tout ton txt dans un char* et tu travail en mémoire ou bien tu itères sur ton fichier avec fgets. On se déplace rarement en x,y dans un fichier

n°1771804
torx
Posté le 11-08-2008 à 09:20:31  profilanswer
 

A peu près compris pour la première méthode je vais essayer et je te dit après.
 
sinon itérer mon fichier avec la fonctions fgets, je connais la fonctions mais j'ai pas trop compris
 
merci


Message édité par torx le 11-08-2008 à 09:21:34
n°1771805
Taz
bisounours-codeur
Posté le 11-08-2008 à 09:22:39  profilanswer
 

une ligne c'est une vue de l'esprit: un fichier C, c'est un flux de d'octets, pas une collection d'enregistrement. fgets c'est bien, mais attention à l'usage (code de retour, est-ce que la chaine lue contient bien un \n sinon buffer trop petit, etc)

n°1771806
Un Program​meur
Posté le 11-08-2008 à 09:24:32  profilanswer
 

Il y a aussi fgetpos et fsetpos.
 
fseek pour les fichiers textes (et c'est particulièrement vrai sous Windows) ne peut utiliser de manière sûre que le résultat de ftell; fsetpos ne peut utiliser que les résultats de fgetpos.
 
Donc la méthode est de lire une première fois le fichier en gardant un tableau des débuts de lignes puis de s'en servir.

n°1772129
torx
Posté le 11-08-2008 à 18:22:29  profilanswer
 

C'est bon problème résolut, bon vu l'heure vous vous direz il est bien lent ^^
 
mais j'ai soulagée la nuit blanche pour le reste du programme
 
enfin voila j'ai donc calculé le nombre de ligne de mon fichier.txt avec
 
 

Code :
  1. while(fgets(chaine, TAILLE_MAX, fichierDicoMotSecret) != NULL)
  2. {
  3.     nombreDemots++;
  4. }
  5. MAX = nombreDemots;
  6. srand(time(NULL));
  7. numeroDeLaLigneDuMot = (rand() % (MAX - MIN + 1)) + MIN;
  8. rewind(fichierDicoMotSecret);
  9. do
  10. {
  11.     fgets(chaine2, TAILLE_MAX, fichierDicoMotSecret);
  12.     arretALaLigne++;
  13. }while(arretALaLigne < numeroDeLaLigneDuMot);


 
chaine2 contiendra donc le mot à la ligne numeroDeLaLigneDuMot
 
enfaite c'était pour un jeu de Pendu et j'ai un fichier dictionnaire de mot secret pour ne pas toujours tombé sur le même
 
voila au moins sa m'auras fait apprendre quelque chose  :bounce:  :bounce:  :bounce:


Message édité par torx le 11-08-2008 à 18:22:44
n°1772131
Joel F
Real men use unique_ptr
Posté le 11-08-2008 à 18:23:38  profilanswer
 

ouais alors ça ce moment lis ton fichier en entier dans un tableau de chaine de caractère et tire au hasard l'indice dans ton tableau.
La ton truc est affreusement lent ^^

n°1772138
torx
Posté le 11-08-2008 à 18:32:56  profilanswer
 

mon truc est affreusement lent ?
Hum certes mais j'ai pas encore les acquis pour le dire/savoir alors je fait avec ce que je connais ^^
 
j'ai acquis tout ce que je connais sur internet alors je rate sans doute des choses intéressantes mais bon j'espére les connaitre plus tard
 
et si tu pourrais me proposé une version plus rapide hésite pas que je regarde comment sa marche
 
édit:
et avec mon code je dois remplacer '\n' par '\0' sinon j'ai un caractère en trop,
voila :) c'est tout fini, c'est lent mais sa marche  :bounce:


Message édité par torx le 11-08-2008 à 18:49:55
n°1772146
Joel F
Real men use unique_ptr
Posté le 11-08-2008 à 19:02:39  profilanswer
 

bah c'est pareil sauf que au lieu de compter le nombre de ligne, tu recopie la ligne lu dans une nouvelle chaine de caractère allouée à la bonne taille et que tu range dans une structure genre lise chainée.

n°1772153
torx
Posté le 11-08-2008 à 19:23:23  profilanswer
 

ok ok compris vi sa sera mieux


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  se placer dans un fichier.txt en C [ Probléme Résolut ]

 

Sujets relatifs
Problème de refrechpetit pg pour supprimer certaines propriétés d'un fichier son (mp3)
Problème de mise en place URL rewritingrecuperer le contenu d'un fichier
fichier sur lecteur reseau ?Problème Popup qui s'ouvre pas.
[RESO]problème d'affichage apres selection d'une cellule via une macro[C] accéder à une zone de mémoire allouée en dehors d'une DLL
XML-XSL => XML, modification d'un fichier XMLForce download fichier AVI !
Plus de sujets relatifs à : se placer dans un fichier.txt en C [ Probléme Résolut ]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR