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 :

Recherche de string dans plusieurs fichiers (findstr like)


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Directeur
    Inscrit en
    Juin 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Juin 2005
    Messages : 113
    Par défaut Recherche de string dans plusieurs fichiers (findstr like)
    Bonjour à tous,
    Je me demandais comment faire pour rechercher une chaine de caractaires dans tous les fichiers d'un dossier via delphi (un peu l'équivalent de la commande findstr de l'invite de commande) et retourner le/les fichiers correspondant(s) pour modifier cette chaine(une fois que j'arrive retourner le non du fichier, ne vous en faites pas, je sais comment l'ouvrir et modifier la chaine ). J'ai fais quelques recherches sur google et sur ce site, je n'ai rien trouvé qui ne me donne ne serait-ce qu'un indice ... Pouriez-vous me mettre sur la voie svp ? Que ce soit en delphi pur ou en winapi mais que ca reste le plus légé possible svp.

    Merci pour tout

  2. #2
    Membre confirmé
    Profil pro
    Directeur
    Inscrit en
    Juin 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Juin 2005
    Messages : 113
    Par défaut
    Je complete un peu mon poste en vous donnant mon idee que j'apprecie que tres peu car tres longue et "couteuse" en ressources je pense: lister le dossier, pour chaque fichier, l'ouvrir dans un stream, faire un pos(), si pos() est different de 0 alors la chaine existe, donc donner le nom du fichier (ou alors, tant qu'on y est, directement remplacer la chaine)

  3. #3
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Je ne vois pas comment on peut faire autrement
    A moins de creer une sorte de table de hashage listant les mots contenus dans chaques fichiers.

    Cela prends un certain temps pour mettre a jour la table mais la recherche est plus rapide. Bien sur l'ideal est de conserver cette table d'une recherche a l'autre ....

  4. #4
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Petite idee ... si as acces au mode d'enregistrement des fichiers, peut etre peut tu generer lors de l'enregistrement une table d'index des mots : une suite de numeros indiquant la position de depart de chaques mots du fichier.
    La recherche sera plus rapide car il te suffit de tester le premier caractere et si different, sauter directement au mot suivant.

    Rajoute en plus de la position la taille du mot pour ne tester que les mots de meme taille.

  5. #5
    Membre confirmé
    Profil pro
    Directeur
    Inscrit en
    Juin 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Juin 2005
    Messages : 113
    Par défaut
    @Cl@udius > J'ai pensé a ca oui mais je me suis dit que ca serait pas assez drole ^^
    @Clorish > Dsl, j'ai pas tout compris a ce que tu as dit. Il faut savoir que la recherche ne sera faite qu'une fois par pc/dossier et que donc, rien ne sert de stocker les infos

  6. #6
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    je ne comprends pas trop ton probleme en fait.
    si elle ne doit etre fait qu'une seule fois par PC et dossier, ou est l'interet de gagner en rapidité ?
    Il suffit de planifier la recherche la nuit, et apres ca peux prendre 12h .. et alors ?

    Par contre si tu dois regulierement faire des recherches la oui ca a un interet.
    Et pour accelerer la recherche il faut eviter de faire des choses inutiles, comme tester des mots dont on sait qu'il ne conviennet pas.

    Si tu compare "toto" (4 lettre) face a un mot qui en fait 5 tu peux etre sur que ce mot n'est pas toto. Donc inutile de le comparer.

    De meme, si le mot commence par AXXX alors ca ne peut pas etre "toto" donc encore une fois inutile a comparer.

    Maintenant si on connait avant de scanner le fichier le nombre de mots = 4 et leurs positions dans le fichier (par exemple 3 mots aux positions 15, 200 et 515) il te suffit de tester au mieux 3 caracteres au pire 12 en faisant des jum dans le fichier de 0 à 15 puis 200 puis 512

    Comparatif : 1 fichier avec 100 mots avec une moyenne de 4 caracteres par mots soit 400 octets.
    Ca te demande 100 iterations pour reperer les mots susceptibles d'etre celui recherché plus quelques iteration de plus pour les tester.
    On gagne pas mal par rapport a une analyse des 400 caracteres du fichier... (envirion 50 a 75%).

    Bon bien sur, cela depends de la frequence des mots candidats et de leurs graphie.

    Un fichier contenant 100 mots, tous de 4 lettres avec 1 toto et que des toti .... ca risque de pas le faire :p
    Par contre un fichier de 99 mots de 5 lettres et un seul de 4 (toto) la recherche sera tres rapide !

    A voir

  7. #7
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut

    Une idée comme ça !
    Et si tu utilisais cette bonne vieille commande DOS FindStr en redirigeant l'echo vers un fichier texte ?

    Tu disposerais ainsi de la liste des fichiers qui t'intéressent.

    @+ Claudius

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

Discussions similaires

  1. [Batch] Recherche d'une string dans plusieurs fichiers
    Par zenzedoon dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 29/12/2012, 16h14
  2. Logiciel de recherche d'expression dans plusieurs fichiers
    Par Deciprog dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 31/03/2010, 16h23
  3. Recherche de valeurs dans plusieurs fichiers
    Par Trooper2 dans le forum Macros et VBA Excel
    Réponses: 33
    Dernier message: 04/07/2007, 12h04
  4. Module de recherche de mots dans plusieurs fichiers
    Par hat_et_m dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 24/09/2006, 20h09

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