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

 Delphi Discussion :

Effectuer une recherche dans un fichier texte


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Effectuer une recherche dans un fichier texte
    Bonjour, je voudrais savoir si après avoir saisi dans un TEdit et sur le "Onclick" d'un bouton, il est possible de parcourir un fichier texte et de voir si le contenu du TEdit existe dans le fichier texte.
    Sachant que si ce contenu existe, il faudrait pouvoir extraire la ligne qui va avec dans un memo ou un autre TEdit. Est-ce possible ?
    J'ai parcouru certains tuto sans résultats ...
    Merci d’avance.

  2. #2
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Bonjour,

    Biensur que tu peux le faire.

    1) tu ajoute l'ensemble de ton fichier text dans un StringList genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      with TStringList.Create do
      Begin
        Try
          LoadFromFile(FichierAtraiter);
    //...

    2) Tu parcourw chacune des lignes du StringList

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
          i := 0;
          While (Strings[i] <> FinDeFichier) do
          Begin
     
    // ...
    3) a toi de rechercher dans la ligne en question si tu trouve ton text du tedit genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if pos(Strings[i],Edit.text) <> 0 then ...
    Voilà en gros.

    A plus

  3. #3
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    salut,

    je voudrais savoir si après avoir saisi dans un TEdit et sur le "Onclick" d'un bouton, il est possible de parcourir un fichier texte et de voir si le contenu du TEdit existe dans le fichier texte.
    Sachant que si ce contenu existe, il faudrait pouvoir extraire la ligne qui va avec dans un memo ou un autre TEdit. Est-ce possible ?
    Oui. Mets sur ta fiche :
    1- un "Edit": "Edit1"sert pour la recherche.
    2- un memo.
    3 -un Edit: "Edit2" sert pour afficher le numéro de la ligne du Memo.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    procedure TForm1.Button1Click(Sender: TObject);
    var posM,posL,i,j:integer;
        trouve:boolean;
        NumeroLigne:integer;
    begin
    for i:=0 to Memo1.Lines.Count do
    begin
    posL:=pos(Edit1.Text,Memo1.Lines[i]);
    if posL <>0 then begin
    posM:=0;
    for j:=0 to i-1 do
    posM:=posM+length(Memo1.Lines[j]);
    posM:=posM+(i*2);
    posM:=posM+posL-1;
    Memo1.SetFocus;
    Memo1.SelStart:=posM;
    Memo1.SelLength:=length(Edit1.Text);
    trouve:=true;
    ///////////// ici on recherche le le numéro de ligne /////////
     NumeroLigne := SendMessage(Memo1.Handle,EM_LINEFROMCHAR,-1,0);
      edit2.Text:=(inttostr(NumeroLigne)); //Edit2: affiche le numéro de la ligne
    /////////////////////
    break;
    end;
    if trouve=false then
    Edit2.Clear;
    end;
    end;
    A+

    NABIL74

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut


    Avant de poster, effectuer une recherche, ce sujet vient d'être débatu la semaine dernière

    Recherche d'un string dans fichier

    comment on fait une recherche dans un fichier ASCII

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    merci à vous trois pour vos réponses, je vais regarder cela

  6. #6
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Alors je me suis aidé de ce que vous m'avez dit Buzz et Nabil , désolé ShaileTroll mais je suis (très ) vite dépasser dans ta fonction ... ( quand j'aurais un peu plus d'expérience je me repencherais surement dessus) .

    cela marche j'arrive bien à trouver ce que je cherche , mais admettons que je cherche dans le fichier texte toutes les lignes en rapport avec ce qui aura été saisie dans Edit1, avec le code actuel, la recherche s'arrête dès qu'elle a trouvé le mots cherché .
    Je pense qu'il faut utiliser un while , mais pour ce qui est de la condition booléenne , je ne vois pas trop ,
    j'ai essayé avec

    while Memo1.text < > '' do
    begin ...

    mais sans resultat...

  7. #7
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Ben ce que tu veux, c'est
    continuer la recherche Tant Que la position du texte de ton Edit n'existe pas dans cette ligne
    ............. <=> ............ While ..... pos(Edit1.text,Memo1.Lines[i])=0 do

    Le truc, c'est de traduire en francais ce que tu veux faire, et ca vient tout seul ...

    Bonne chance !

  8. #8
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    salut , déjà merci de ton aide myck
    En faite , j'étais à l'ouest , je voudrais plutôt faire

    continuer la recherche jusqu'à la fin du fichier texte

    donc utiliser un repeat ? cependant il y a un probleme qui vien s'ajouter, en effet je voulais mettre une valeur en dure dans le fichier texte ( #fin#) , pour que la recherche s'effectue jusqu'à cette valeur , cependant les nouvelles informations saisies dans le fichier s'ajoute en créant une nouvelle ligne ( je ne sais pas si s'est très clair , n'hésité à me demander plus d'explication ). Serait ce possible de parcourir le fichier text , mais en sens inverse , de partir de la fin et de remonter jusqu'au début ?
    merci d'avance

  9. #9
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Salut,

    Pourtant avec mon exemple ci-dessus tu pourrais déjà le faire.

    Je te propose

    A] A l'endroit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      with TStringList.Create do
      Begin
        Try
          LoadFromFile('c:\'+FichierAtraiter); // On rempli le stringlist de l'ensemble des lignes du fichie text
          For i = 0 to Count-1 do  // On parcour le stringlist à l'endroit
          Begin
             if Strings[i] = 'BONBON' then ;// test d'une ligne 
          end; 
        Finally
          Free // on libere le stringlist
        end;
      end;
    B] A l'envers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      with TStringList.Create do
      Begin
        Try
          LoadFromFile('c:\'+FichierAtraiter); // On rempli le stringlist de l'ensemble des lignes du fichie text
          i := count-1 // On initialise le numéro de derniere ligne
          While i > 0 do    // On parcour le stringlist à l'envers
          Begin
             if Strings[i] = 'BONBON' then ;// test d'une ligne
             dec(i); // on remonte le fichier (enfin le Stringlist)
          end; 
        Finally
          Free // on libere le stringlist
        end;
      end;
    C] A l'envers de l'endroit

    Je déconne...... oupss

    Bye

  10. #10
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Alors, je n'ai pas bien compris a quoi ca pourrait servir, enfin j'ai ma petite idée, mais plus d'explications seraient les bienvenues (exemples de fichier Txt, code ...)

    Sinon, pour passer a l'envers ta liste, tu peux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      with TStringList.Create do
      Begin
        Try
          LoadFromFile('c:\'+FichierAtraiter); // On rempli le stringlist de l'ensemble des lignes du fichie text
     
          For i = Count-1 downto 0 do  // On parcour le stringlist à l'envers 
             if Strings[i] = 'BONBON' then ;// test d'une ligne 
     
        Finally
          Free // on libere le stringlist
        end;
      end;
    avec un gros COPYRIGHT BuzzLeclaire

  11. #11
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par mick605 Voir le message
    avec un gros COPYRIGHT BuzzLeclaire
    Mdr....

    Je dépose plainte !!! lol

    Cela lui fera 2 sens à l'envers comme cela. (je me demande si cela ne donnerai pas l'endroit....powaaaaaaaaaaaaa)

  12. #12
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Alors, je vais essayer de t'éclairer Myck, je suis en stage dans une entreprise qui me demande de leur faire un programme dédié à leur hotline, vu que pour le moment ils se servent d’Excel...
    Donc le programme est constitué de 2 fiches, la première étant destiné a la saisie des informations sur l'opérateur (qui répond à l’appel), le client, et la prestation qui lui est attribué (le thème, le problème, la solution proposé …).
    Les données saisies sont regroupées dans un fichier texte et sont regroupés sur une ligne, chaque enregistrement est écrit sur la ligne qui suit. Par la suite les données iront directement dans la base de donnée (il est probable que cela ne sois pas moi qui finisse le programme, mon stage se termine en effet la semaine prochaine.)
    La seconde est destiné à effectuer une’ petite ''recherche pour savoir si le client, le thème ou le problème à déjà été rencontré. Pour cela je souhaite que le programme parcours le fichier texte, et admettons que la valeur recherché soit 'bonbon'(copyright de BuzzLeclair ^^), il faudrait que j'affiche dans le mémo toute les lignes correspondantes à la recherche, je vous recontacte quand j’ai ce qui a été posté plus haut

  13. #13
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    J'oubliais ,voici un exemple de ligne:
    - ComboBoxOperateur;18/06/2009 09:37:16;NomClt;PrnmClt;NumTel;MailClt;ComboBoxTheme;ComboBoxBof;ComboBoxPb;ComboBoxDelais;SolutClt

  14. #14
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut
    Citation Envoyé par AlexTaz Voir le message
    ...désolé ShaileTroll mais je suis (très ) vite dépasser dans ta fonction ... ( quand j'aurais un peu plus d'expérience je me repencherais surement dessus) ...
    Dommage de se limiter soit-même, j'espère que ces fichiers ne seront pas trop volumineux, la TStringList a le défaut de tout charger en mémoire ... si tu reste avec ce type de méthode, tu n'amélioreras pas ton niveau, justement, c'est en cherchant à comprendre quelques choses que l'on ne connait pas que l'on progresse, allez j'arrête ma leçon ...

    Pour ton cas, c'est un fichier CSV, je me serais dirigé à la conversion de ce fichier en XML ou en une base de Données genre MySQL (LOAD DATA fait cette conversion en standard)... tu pourrais ainsi proproser ensuite des outils de statistiques ... une plus grande fiabilité aussi ...

  15. #15
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Ok ...

    Donc si j'ai bien compris, chaque ligne ne correspond pas a une information mais a un client (plusieurs informations). Comme dit ShaiLeTroll, il faut pas que tes fichiers soient trop volumineux.

    Ensuite, ce que tu veux, c'est passer toutes les lignes de ton fichier : tu peux donc les passer a l'endroit comme a l'envers avec une boucle for (BuzzLeclaire ® © ). Ensuite, j'ai l'impression que tes lignes sont rangées par date, donc en parcourant dans un sens ou dans l'autre, tu peux retrouver tes lignes de la plus ancienne a la plus récente, et inversement ...

    Je pense qu'avec ca, tu pourrais t'en sortir !

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

Discussions similaires

  1. Une fonction recherchant l'occurrence d'une chaîne dans un fichier texte
    Par l_autodidacte dans le forum Vos Contributions VBScript
    Réponses: 5
    Dernier message: 11/05/2012, 14h30
  2. Réponses: 4
    Dernier message: 26/05/2011, 22h50
  3. Rechercher dans un fichier texte une valeur
    Par promenneur77 dans le forum Langage
    Réponses: 7
    Dernier message: 20/01/2008, 19h46
  4. Réponses: 7
    Dernier message: 18/11/2007, 11h38

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