IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Cherche dans un fichier texte trés rapidement


Sujet :

Langage Delphi

  1. #1
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut Cherche dans un fichier texte trés rapidement
    Salut tout le monde,

    J ai un fichier texte qui 7 GO.
    Et je voudrais connaitre la meilleure méthode pour trouver un "mot" dans ce fichier de manière la plus rapide possible.

    Cordialment.

  2. #2
    Membre émérite
    Avatar de Merlin
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2002
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 524
    Points : 2 883
    Points
    2 883
    Par défaut
    Il y a deux choses qui vont impacter au maximum sur le temps de réponse :
    -1- la façon de lire les données
    -2- l'algorithme utilisé pour tester les chaînes

    Concernant le point n°1 il faut un système le plus proche possible de la machine utilisant des buffer assez grands. Un file stream pourrait faire l'affaire mais certainement vu la taille du fichier à traiter l'accès direct à certaines API win32 donnerait encore de meilleures résultats, notamment les fichier mappés en mémoire.

    Pour le point n°2, l'algorithme considéré comme le plus efficace est le Boyer-Moore. Il en existe des implémentations Delphi, une recherche google t'en dira plus.

  3. #3
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    7Go !!!

    Effectivement j'utiliserais un FileStream mais surtout pas un fichier mappé en mémoire vu la taille de l'engin (7Go quand même, Windows ne va pas suivre ni même survivre...)
    Bidouilleuse Delphi

  4. #4
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    Et oui 7Go.......

    Bon merci a tous , je vais appliqué vos conseils.

  5. #5
    Membre émérite
    Avatar de Merlin
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2002
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 524
    Points : 2 883
    Points
    2 883
    Par défaut
    Citation Envoyé par waskol
    7Go !!!
    Effectivement j'utiliserais un FileStream mais surtout pas un fichier mappé en mémoire vu la taille de l'engin (7Go quand même, Windows ne va pas suivre ni même survivre...)
    tu te trompes ... les memory map files (fichiers mappés mémoire) de Win32 sont justement conçus pour améliorer les performances de traitement des gros fichiers...
    Cette technique donne de bien meilleurs résultats que les filestreams mais est un peu plus délicate à mettre en oeuvre puisque Delphi n'offre rien pour le faire (donc appels aux api win32 "à la main").

  6. #6
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par Merlin
    Citation Envoyé par waskol
    7Go !!!
    Effectivement j'utiliserais un FileStream mais surtout pas un fichier mappé en mémoire vu la taille de l'engin (7Go quand même, Windows ne va pas suivre ni même survivre...)
    tu te trompes ... les memory map files (fichiers mappés mémoire) de Win32 sont justement conçus pour améliorer les performances de traitement des gros fichiers...
    Cette technique donne de bien meilleurs résultats que les filestreams mais est un peu plus délicate à mettre en oeuvre puisque Delphi n'offre rien pour le faire (donc appels aux api win32 "à la main").
    Ha ? Alors si tu le dis...

    En fait je pensais, vu la taille du fichier (7Go), et vu qu'il ne doit pas avoir 7Go de RAM installé sur sa machine, son PC risquerais de swapper un max non ?

    Bref, si tu suis mon raisonnement, son programme va peut-être gérer un fichier mémoire, mais qui de toute façon sera créé par windows sur le swap de son disque dur. Par conséquent, windows gèrera quand même un fichier disque (le swap), ce qui revient à dire qu'à l'arrivée, niveau perfs, ce sera "kif kif bouricot" avec l'utilisation d'un TFilestream mais en plus compliqué.
    De plus, lorsque Windows va tenter de créer un fichier mappé en mémoire de 7 Go, voyant qu'il a 512Mo (<- en supposant qu'il y ait 512Mo installé sur sa machine) de RAM à sa dispo, va agrandir son swap d'une taille approximativement égale à 6,5 Go... Ce qui implique d'avoir de la place sur son disque dur (oui, de nos jours, ce n'est plus vraiment un problème mais quand même !)

    Tu vois ce que je veux dire ?
    Bref, je me trompe surement auquel cas ce serais sympa que tu éclaires ma lanterne à ce propos parce que je reste tout de même dubitatif sur la question
    Bidouilleuse Delphi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/04/2015, 09h35
  2. Réponses: 21
    Dernier message: 01/04/2014, 21h06
  3. [RegEx] Remplacement rapide dans un fichier texte (RTF)
    Par johweb dans le forum Langage
    Réponses: 12
    Dernier message: 17/01/2007, 09h04
  4. [LG]rechercher dans un fichier texte
    Par BadFox dans le forum Langage
    Réponses: 11
    Dernier message: 01/12/2003, 15h57
  5. recherche de doublons dans un fichier texte
    Par portu dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 07/10/2003, 14h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo