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

  FORUM HardWare.fr
  Programmation
  C

  [ C ] Aide pour programme de lecture fichier txt

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ C ] Aide pour programme de lecture fichier txt

n°1542746
malibu68
Posté le 13-04-2007 à 17:56:53  profilanswer
 

Bonjour,
 
Je vous explique, j'ai un fichier texte qui contient des données en colonnes : 1 colonne de float et 6 autres de int.
 
Les données arrivent au fur et à mesure dans ce fichier texte.
 
Je souhaite donc pouvoir lire ces données ligne par ligne et si la ligne n'est pas encore là, attendre quelle apparaisse.
 
Autre info : le fichier contiendra plusieurs milliers de ligne, donc il faudrait un code qui ne prenne pas trop de temps.
 
 
J'arrive à lire la 1ere ligne du fichier comme il faut avec la commande fscanf cependant je n'arrive pas à pouvoir choisir la ligne à traiter.
 
 
D'avance merci si vous arrivez à éclairer ma lanterne.  :D

mood
Publicité
Posté le 13-04-2007 à 17:56:53  profilanswer
 

n°1542778
Sve@r
Posté le 13-04-2007 à 19:25:50  profilanswer
 

malibu68 a écrit :

Bonjour,
 
Je vous explique, j'ai un fichier texte qui contient des données en colonnes : 1 colonne de float et 6 autres de int.
 
Les données arrivent au fur et à mesure dans ce fichier texte.
 
Je souhaite donc pouvoir lire ces données ligne par ligne et si la ligne n'est pas encore là, attendre quelle apparaisse.
 
Autre info : le fichier contiendra plusieurs milliers de ligne, donc il faudrait un code qui ne prenne pas trop de temps.
 
 
J'arrive à lire la 1ere ligne du fichier comme il faut avec la commande fscanf cependant je n'arrive pas à pouvoir choisir la ligne à traiter.
 
 
D'avance merci si vous arrivez à éclairer ma lanterne.  :D


 
Grosso-modo, en C, pour mnipuler un fichier, tu as
- des fonctions d'ouverture/fermeture => fopen()/fclose()
- des fonctions de lecture => fscanf(), fgets(), fgetc(), fread()
- des fonctions d'écriture => fprintf(), fputs(), fputc(), fwrite()
- des fonctions de déplacement => fseek()
- des fonctions un peu spéciales => fflush(), ftell(), feof()
Rien d'autre. C'est à toi à utiliser ces fonctions pour créer l'algo dont t'as besoin. Par exemple, si tu veux récupérer la 18° ligne, il te faut
- lire 17 lignes pour rien
- lire la ligne suivante
 
Ensuite, étant donné que ces fonctions sont bufférisées, je ne connait pas le comportement de ce genre de fonctions quand tu lis d'un coté un fichier qui se remplit de l'autre coté.  
 
Si tu bosses sur Unix et apparentés, t'as aussi des fonctions plus bas niveau qui sont
- des fonctions d'ouverture/fermeture => open()/close()
- une fonction de lecture => read()
- une fonction d'écriture => write()
- des fonctions de déplacement => seek()
Ces fonctions plus bas niveau travaillent directement sur le fichier donc la manipulation de "je lis pendant que qqun d'autre écrit" a plus de chances de réussir...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1542787
malibu68
Posté le 13-04-2007 à 20:22:21  profilanswer
 

Merci j'ai résolu mon problème.
 
Par contre dans mon cas je n'aurais pas à lire 17 lignes pour rien (heureusement ca prendrait trop de temps vu la taille du fichier final).
 
Il suffit de faire appel plusieurs fois de suite à la fonction fscanf, les lignes seront lues successivement. J'ai un problème de lecteur à cause d'une colonne supplémentaire dans mon fichier. Pour ne pas en tenir compte il faut faire un %*d.

n°1542918
Sve@r
Posté le 14-04-2007 à 19:01:26  profilanswer
 

malibu68 a écrit :

Par contre dans mon cas je n'aurais pas à lire 17 lignes pour rien (heureusement ca prendrait trop de temps vu la taille du fichier final).
 
Il suffit de faire appel plusieurs fois de suite à la fonction fscanf, les lignes seront lues successivement.


Ben oui. Tu fais plusieurs fois appel à fscanf() et tes lignes sont lues successivement pour rien (c'est à dire qu'elles sont lues mais tu n'utilises pas ce qu'elles te renvoient).
D'ailleurs, je te conseillerais plutôt "fgets()" qui est plus rapide que "fscanf()"...
 

malibu68 a écrit :

J'ai un problème de lecteur à cause d'une colonne supplémentaire dans mon fichier. Pour ne pas en tenir compte il faut faire un %*d.


Au pire, tu utilises "fgets()" => Ca te donne une ligne entière de ton fichier (jusqu'au <return> ) qu'ensuite tu peux analyser avec différentes fonctions de traitement de chaînes (strstr(), strtok_r(), strchr() ou simplement sscanf())


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1543024
jramakiche​nin
Posté le 15-04-2007 à 15:05:46  profilanswer
 

Et pourquoi ne pas utiliser fseek pour se déplacer dans le fichier? C'est quand même plus rapide!

n°1543036
bneben
'Ben Gwin' de son vrai nom.
Posté le 15-04-2007 à 16:53:44  profilanswer
 

Oué c'est kler, et utilise les pointeurs, c'est bien plus rapide.

n°1543182
Sve@r
Posté le 16-04-2007 à 09:09:25  profilanswer
 

jramakichenin a écrit :

Et pourquoi ne pas utiliser fseek pour se déplacer dans le fichier? C'est quand même plus rapide!


C'est plus rapide à condition de connaître le nb d'octets de déplacement. Donc c'est si tu as un fichier avec des lignes de taille fixe.
 
Lui, il doit lire un fichier "texte", donc à priori avec des lignes qui ne sont pas de la même taille.
En dehors de "x" fgets(), je ne vois pas ce qui pourrait être plus rapide pour sauter "x" lignes...
 

bneben a écrit :

Oué c'est kler, et utilise les pointeurs, c'est bien plus rapide.


Plus rapide que quoi ? Que fopen/fclose ?????


Message édité par Sve@r le 16-04-2007 à 09:13:26

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

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

  [ C ] Aide pour programme de lecture fichier txt

 

Sujets relatifs
[RESOLU] fichier excel dans webexpert 6Ouvrir un fichier php
probleme de programme en CTraitement automatique d'un fichier
[Aide] Insertion MySQL à partir d'un fichier .CVS depuis un script PHPtaille de fichier pas dos
[stdio.h]2 programmes font un fopen en "w" sur un même fichierAide a la programmation php
Aide sur Excel pour formule compliquée! 
Plus de sujets relatifs à : [ C ] Aide pour programme de lecture fichier txt


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