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

  FORUM HardWare.fr
  Programmation
  C++

  [C++] supprimer des lignes dans un fichier pour gagner du temps

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] supprimer des lignes dans un fichier pour gagner du temps

n°701292
xyz75
Posté le 16-04-2004 à 17:16:19  profilanswer
 

Bonjour,
J'ai un fichier (fstream) qui contient un grand nombre d'enregistrements du genre champ1 champ2... champN.
Mon fichier ressemble à :
100 data1
100 data2
101 data3
101 data4
101 data5
...
1389 dataY
1389 dataZ
 
Je voudrais faire un traitement sur les données indexés 1000 par exemple.
Je fais donc une recherche sequentielle, avec des getline(), et je teste si je suis sur 1000. Ce qui fait perdre un temps fou, surtout quand je dois faire le traitement pour chaque index : ca peut prendre 2s pour le premier mais aussi 10s pour le dernier parce que je dois parcourir tout le fichier avant.
 
Y aurait-il une méthode plus efficace pour accéder à un enregistrement ? Quelque chose qui pourrait ressembler idealement à une requête sur SGBD ?
 
J'avais pensé à supprimer l'enregistrement en cours une fois que son traitement est terminé, mais comment faire ? Est-il possible de supprimer (ou effacer) la ligne courante d'un fichier ?
J'ai vu sur certains forums qu'une solution serait de copier le reste du fichier (sans la ligne lue dernierement) dans un autre fichier et de travailler ensuite sur ce nouveau fichier. Le problème c'est toujours le temps de traitement: il faut parcourir tout le reste du 1e fichier pour le copier dans le 2e. Ca revient donc au meme en terme de performance...
Autre solution : garder en memoire l'emplacement courant dans le fichier puis revenir à cet emplacement à la nouvelle ouverture du fichier, mais comment ca marche ?
 
Merci pour votre aide ;)

mood
Publicité
Posté le 16-04-2004 à 17:16:19  profilanswer
 

n°701297
Taz
bisounours-codeur
Posté le 16-04-2004 à 17:19:53  profilanswer
 

1) utilise un SGBD
2) y a plein de techniques pour stocker et utiliser efficacement des enreigstrements dans un fichier : chainage, table de hachage, bitmap, index, etc


Message édité par Taz le 16-04-2004 à 17:20:20
n°701317
xyz75
Posté le 16-04-2004 à 17:46:17  profilanswer
 

Pour l'instant, je souhaite explorer la solution "code". J'ai pas de SGBD sous la main...
Je ne suis pas sûr, mais je crois qu'utiliser des structures (listes chainées, tables...) prend beaucoup de ressources memoire, d'autant que j'ai une quantité de données très importante à traiter. De plus, il faut aussi le temps de créer ces structures à partir du fichier, ce qui n'est pas ideal, meme s'il ne faudrait parcourir le fichier qu'une seule fois.
Sinon, qu'est-ce que le bitmap ?

n°701319
Taz
bisounours-codeur
Posté le 16-04-2004 à 17:47:38  profilanswer
 

je parlais pas de choses en mémoire, je te parlais de structure de fichier

n°702521
Juntao2k2
Posté le 19-04-2004 à 09:45:58  profilanswer
 

la dichotomie pourrait etre une bonne solution

n°702743
Taz
bisounours-codeur
Posté le 19-04-2004 à 13:39:48  profilanswer
 

je crois pas

n°704354
blackgodde​ss
vive le troll !
Posté le 20-04-2004 à 23:04:53  profilanswer
 

tu peux définir une taille fixe pour chaque enregistrement. puis s'ils sont contigus, et sans trou, tu sais directement ou tu as a aller suivant ton n° d'enregistrement. s'ils ne le sont pas, tu peux créer un index : une suite d'associations {n°enregistrement, offset enregistrement} de taille fixe dans un autre fichier.


---------------
-( BlackGoddess )-
n°706148
Juntao2k2
Posté le 22-04-2004 à 16:30:07  profilanswer
 

taz, pq la dichotomie dans ce cas precis ne serait pas valable ?

n°706242
Taz
bisounours-codeur
Posté le 22-04-2004 à 17:22:16  profilanswer
 

Juntao2k2 a écrit :

taz, pq la dichotomie dans ce cas precis ne serait pas valable ?

ben t'es sur un fichier, c'est pas facile de maintenir l'ordre dans un fichier


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

  [C++] supprimer des lignes dans un fichier pour gagner du temps

 

Sujets relatifs
charger un fichier xml en C++[SQL] Supprimer les lignes 'inutiles' dans mon résultat...
Ecrire mon propre type de fichiertraiter chaque ligne d'un fichier
fonction de recherche de fichier en C [LINUX]A l'aide inclusion de fichier
[VB6] Caractère de fin de ligne de fichier[JSP/Servlet/Flash] Vérification de l'existence d'un fichier
Est-ce normal d'avoir 200 lignes de code pour en afficher 4 ? 
Plus de sujets relatifs à : [C++] supprimer des lignes dans un fichier pour gagner du temps


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