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 :

Importer un fichier .txt


Sujet :

Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2016
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2016
    Messages : 73
    Points : 41
    Points
    41
    Par défaut Importer un fichier .txt
    bonjour,


    Je souhaiterais comparer deux fichiers (de type .txt) entre eux et ensuite afficher les différences qu'il y a entre ces deux fichiers.

    Pour cela, j'ai commencé par essayer d'envoyer le premier fichier vers une ztable (qui serait donc "temporaire"). Cette ztable est reliée à un fichier Acess(vide) et c'est dans ce fichier que je voudrais que soient enregistrées les informations venant du fichier .txt. Mais je ne sais pas du tout comment faire. Quelqu'un pourrait me donner une piste?

    Donc pour l'instant j'ai juste ceci, où je sélectionne le premier fichier via le bouton rechercher.
    Nom : Capture.PNG
Affichages : 427
Taille : 3,9 Ko


    D'avance merci!

  2. #2
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Bonjour,
    tu peux lire chaque fichier ligne à ligne, et les comparer avec les fonctions CompareText ou CompareStr (sensible à la casse ou non)

    A+
    Charly

  3. #3
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2016
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2016
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    D'accord merci, je ne connaissais pas cette fonction.

    Donc pour l'instant j'ai ceci, qui me permets de sélectionner les deux fichiers à comparer
    Nom : Capture.PNG
Affichages : 424
Taille : 7,0 Ko

    J'ai beau lire la doc qu'il y a sûr embarcadero et sur Google, je ne comprends pas comment utiliser comparetext... . Et comme je débute, c'est pas évident ... .


    function CompareText(const S1, S2: string): Integer;
    function CompareText(const S1, S2: string; LocaleOptions: TLocaleOptions): Integer;

    Je dois remplacer S1 et S2 par les noms des fichiers respectifs que je souhaite analyser?


    Ce que j'avais essayé c'était quelque chose comme ça :
    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
    procedure TFprinc.btnOkClick(Sender: TObject);
    begin
      fichier1 := OpenDialog1.Files;
      fichier2 := OpenDialog2.Files;
         while EOF(fichier1)=false DO
              begin
              Readln(fichier1);
              reset(fichier2);
                  while EOF(fichier2)=false do
                  begin
                    Readln(fichier2);
                    if (fichier1 = fichier2) then
                        begin
                          ShowMessage('test');
                        end;
    	          end;
    	closefile(fichier2);
    end;
    closefile(fichier1);

  4. #4
    Membre du Club
    Homme Profil pro
    Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Inscrit en
    Juin 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 227
    Points : 51
    Points
    51
    Par défaut
    Salut je croix que tu vas tous trouver ici sur la manipulation des fichier txt.

  5. #5
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2016
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2016
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par bm1990 Voir le message
    Salut je croix que tu vas tous trouver ici sur la manipulation des fichier txt.
    edit : ok j'avais pas vu le lien, merci. Je vais essayer ça

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    ce que bm1990 tente de dire avec sa croix c'est que tu manques de connaissance de traitement sur les fichiers text et comme il a oublié d'indiquer le lien c'est sur que c'est moins évident encore
    donc voici au moins un lien sur un tutoriel http://bodman.developpez.com/ESdelphi/
    et le lien sur l'aide de référence http://docwiki.embarcadero.com/RADSt...d_Input-Output

    pour en revenir à ton "squelette" de code la première chose est d'ouvrir les fichiers : assignfile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var fichier1,fichier2 : TextFile;
     ...
    begin 
      AssignFile(fichier1,OpenDialog1.FileName);
      AssignFile(fichier2,OpenDialog2.FileName);
    et ne pas oublier de positionner au début
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    reset(fichier1);
    reset(fichier2);
    une fois ceux-ci il faut récupérer la "même" ligne sur chacun des deux fichiers et ce dans des variables soit l'utilisation de Readln
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var
     ligne1,ligne2 : String;
     ...
    begin
      ....  // les ouvertures
      Readln(Fichier1,ligne1);
      Readln(Fichier2,ligne2);
    ainsi tu pourras utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if CompareText(ligne1,ligne2) then .....
    reste la logique de la boucle, telle qu'indiquée dans ton squelette tu ne fait pas une comparaison ligne par ligne mais plutôt une recherche d'une ligne du fichier1 dans le fichier2. Mais ça c'est une question de logique de programmation à revoir
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Citation Envoyé par bertrantitude Voir le message
    edit : ok j'avais pas vu le lien, merci. Je vais essayer ça
    Quel lien ? Quelqu'un a vu un lien ?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Points : 777
    Points
    777
    Par défaut
    Quel type de comparaison veux-tu faire ? Une simple comparaison ligne par ligne (fichier1/ligne1 = fichier2/ligne1 ?) ou une comparaison indiquant les modifications, insertions, suppressions à la manière d'un WinMerge ?

  9. #9
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2016
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2016
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par GoustiFruit Voir le message
    Quel type de comparaison veux-tu faire ? Une simple comparaison ligne par ligne (fichier1/ligne1 = fichier2/ligne1 ?) ou une comparaison indiquant les modifications, insertions, suppressions à la manière d'un WinMerge ?
    C'est une comparaison indiquant les modifications, insertions, suppressions. Je suppose que je dois faire un readln de la première ligne fichier1 et puis faire une boucle qui va lire toutes les lignes du fichier2. Est-ce juste?

    desolé mais je débute...

    Pour l'instant j'ai ceci
    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
    begin
      AssignFile(fichier1,OpenDialog1.FileName);              // on ouvre le fichier1
      AssignFile(fichier2,OpenDialog2.FileName);              //on ouvre le fichier2
      reset(fichier1);                                        //on met à 0 le fichier1
      reset(fichier2);                                        // on met à 0 le fichier2
        while eof(fichier1)=false do                          //tant qu'on est pas à la fin du fichier1
        begin
          Readln(Fichier1);                                    //on lit le fichier1
          reset (fichier2);                                    //on met à 0 le fichier2
          readln(fichier2);                                    //on lit le fichier2
            while EOF(fichier2)=false do                      // tant qu'on est pas à la fin du fichier2
                    begin
                      Readln(fichier2);                      //on lit le fichier2
                      if (fichier1 <> fichier2) then          //s'il y a une différence
                          begin
                            ShowMessage('test');
                          end;                             
     
     //if CompareText(ligne1,ligne2)>1 then
    // showmessage ('test');
    Si j'ai bien compris, je pourrai remplacer " if (fichier1 <> fichier2) then " par le comparetext que j'ai mis en commentaire. Est-ce juste?

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Points : 777
    Points
    777
    Par défaut
    Citation Envoyé par bertrantitude Voir le message
    C'est une comparaison indiquant les modifications, insertions, suppressions.
    Oulà, alors le problème peut être très complexe ! Tes fichiers texte ressemblent à quoi ?

  11. #11
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Il faut que tu fasses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Var
       Ligne1, Ligne2 : String ;
     
    ...
    Begin
    ...
       Readln(Fichier1, Ligne1) ; 
       Readln(Fichier2, Ligne2) ;
    ...
    Puis tu compares Ligne1 et Ligne2 avec Comparetext

    ensuite tu boucle jusqu'à la fin du fichier le plus court

    le plus simple serait d'afficher Ligne1 et Ligne2 dans 2 mémos pour voir les différences (sinon il faut traiter Ligne1 et Ligne2, mais c'est beaucoup plus complexe : Word le fait)

    A+
    Charly

  12. #12
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2016
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2016
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par GoustiFruit Voir le message
    Oulà, alors le problème peut être très complexe ! Tes fichiers texte ressemblent à quoi ?
    voici une ligne du fichier (tout est sur une ligne)

    Alfredine, Yvonne Marco Yvonne19080505655 00009-11 1999-01-01 Afreld 0ABUT990050117572 0A08:00 16031573260536100 RESIDENCE DE LA GLYCINES 00009-11


    Il est possible qu'un jour un fichier en contienne 1000...

    Ce que je souhaite, c'est d'obtenir les lignes qu'il y a en plus ou en moins dans un des deux fichiers. Donc pour ceci, selon moi, il faudrait que je fasse un readln de la première ligne du fichier1 et puis que le lance le second fichier afin de vérifier ligne par ligne si cette première ligne du fichier1 est comprise dans le fichier2.

  13. #13
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2016
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2016
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par Charly910 Voir le message
    Il faut que tu fasses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Var
       Ligne1, Ligne2 : String ;
     
    ...
    Begin
    ...
       Readln(Fichier1, Ligne1) ; 
       Readln(Fichier2, Ligne2) ;
    ...
    Puis tu compares Ligne1 et Ligne2 avec Comparetext

    ensuite tu boucle jusqu'à la fin du fichier le plus court

    le plus simple serait d'afficher Ligne1 et Ligne2 dans 2 mémos pour voir les différences (sinon il faut traiter Ligne1 et Ligne2, mais c'est beaucoup plus complexe : Word le fait)

    A+
    Charly
    pour l'instant j'ai ceci
    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
    begin
      AssignFile(fichier1,OpenDialog1.FileName);              // on ouvre le fichier1
      AssignFile(fichier2,OpenDialog2.FileName);              //on ouvre le fichier2
      reset(fichier1);                                        //on met à 0 le fichier1
      reset(fichier2);                                        // on met à 0 le fichier2
        while eof(fichier1)=false do                          //tant qu'on est pas à la fin du fichier1
        begin                                                 //on lit le fichier1
          Readln(Fichier1, ligne1);
          reset (fichier2);
          i:=i+1;                                    //on met à 0 le fichier2
          //readln(fichier2, ligne2);                                    //on lit le fichier2
            while EOF(fichier2)=false do                      // tant qu'on est pas à la fin du fichier2
                    begin
     
                      Readln(fichier2 ,ligne2);               //on lit le fichier2
                       j:=j+1;
                     if CompareText(ligne1,ligne2)=0 then    //s'il y a une différence
     
                          begin
                            ShowMessage('test');
                          end;
                    end;
        end;
     
     
     
    end;
    Mais je ne sais pas comment faire laboucle

  14. #14
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Citation Envoyé par bertrantitude Voir le message
    Mais je ne sais pas comment faire la boucle
    Et répondre aux questions qu'on te pose, tu sais faire ?

    Citation Envoyé par Jipété Voir le message
    Citation Envoyé par bertrantitude Voir le message
    edit : ok j'avais pas vu le lien, merci. Je vais essayer ça
    Quel lien ? Quelqu'un a vu un lien ?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  15. #15
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par bertrantitude Voir le message
    pour l'instant j'ai ceci
    largement aidé et encore si je lis le commentaire de la ligne 17 j'ai quelques doutes sur la compréhension de la fonction CompareText
    Citation Envoyé par aide Delphi
    CompareText compares S1 and S2 and returns 0 if they are equal. If S1 is greater than S2, CompareText returns an integer greater than 0. If S1 is less than S2, CompareText returns an integer less than 0. CompareText is not case sensitive and is not affected by the current locale.
    mais je ne sais pas comment faire la boucle
    Ce que je souhaite, c'est d'obtenir les lignes qu'il y a en plus ou en moins dans un des deux fichiers. Donc pour ceci, selon moi, il faudrait que je fasse un readln de la première ligne du fichier1 et puis que le lance le second fichier afin de vérifier ligne par ligne si cette première ligne du fichier1 est comprise dans le fichier2.
    c'est de l'algorithme basique de lecture de fichiers en parallèle, mais peut être que ce genre de programme est considéré comme d'une époque révolue

    maintenant il faudrait pour que cela fonctionne faire tellement d'ouvertures/fermetures de fichiers que le traitement, sans parler du fait qu'il faut le faire deux fois (une fois avec le fichier1 comme référence, une fois avec le fichier2) qu'il me semble qu'il y aurait tout intérêt à passer par deux TStringList, triés ,

    une portion de ligne qui pourrait ressembler à une valeur unique serait également un gros plus
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  16. #16
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Bonjour,

    à des fins didactiques, voici ton code corrigé (compilé, mais non testé) :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Procedure TCompareFile.Btn_CompareClick(Sender: TObject);
    Var
       Fichier1, Fichier2  : TextFile ;
       Nom1, Nom2          : String ;
       Ligne1, Ligne2      : String ;
       i, j                : Integer ;
    begin
      If OpenDialog1.Execute Then
      Begin
         If OpenDialog2.Execute Then
         Begin
            Nom1 := OpenDialog1.FileName ;
            Nom2 := OpenDialog2.FileName ;
            AssignFile(fichier1, Nom1) ;
            AssignFile(fichier2, Nom2);
            reset(fichier1);
            i := 0 ;
            Memo1.Clear ;
            Memo1.Lines.add('Comparaison '+Nom1 +' et '+ Nom2+ ' :');
              while Not eof(fichier1) do                          //tant qu'on est pas à la fin du fichier1
              begin                                                 //on lit le fichier1
                Readln(Fichier1, ligne1);
                Reset (fichier2);
                i:=i+1;
                j := 0 ;                                   
                while Not EOF(fichier2) do                      // tant qu'on est pas à la fin du fichier2
                    begin
                      Readln(fichier2 ,ligne2);               //on lit le fichier2
                      if CompareText(ligne1,ligne2)=0 then    
                          begin
                            j := 1 ;
                            Memo1.Lines.add('Ligne '+IntToStr(i)+' trouvée dans Fichier2');
                          end ;
                    end;
                If (j = 0) Then Memo1.Lines.add( 'Ligne '+IntToStr(i)+' non trouvée dans Fichier2') ;
              end;
         End;
      End ;
    End ;
    Mais comme le dit SergioMaster, cette méthode va être très lente surtout pour des gros fichiers. Il faut que tu charges chaque fichier dans un TStringList, en triant les chaines (propriété Sorted). Puis tu travailles sur les TStringLists

    A+
    Charly

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Points : 777
    Points
    777

  18. #18
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Bonjour,

    et pour charger un fichier dans le TStringList List1, c'est la fonction List1.LoadFromFile

    A+
    Charly

  19. #19
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2016
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2016
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    Après avoir pris quelque jours pour voir les bases de delphi et de comprendre le code, j'ai ceci, qui fonctionne :

    Nom : Capture.JPG
Affichages : 318
Taille : 99,7 Ko
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
     
    var
      Fdeux: TFdeux;
       Fichier1, Fichier2  : TextFile ;
       Nom1, Nom2          : String ;
       Ligne1, Ligne2      : String ;
       i, j                : Integer ;
    implementation
     
    {$R *.dfm}
     
    procedure TFdeux.btnrechercherfichieroldFileClick(Sender: TObject);
    begin
    OpenDialog1.Execute;
    AssignFile(fichier1,OpenDialog1.FileName);
     Edit1.Text := OpenDialog1.FileName;
     
    end;
     
    procedure TFdeux.btnrechercherNewFileClick(Sender: TObject);
    begin
    OpenDialog2.Execute;
    AssignFile(fichier2,OpenDialog2.FileName);
    Edit2.Text := OpenDialog2.FileName;
    btncompareclick.Visible:=true;
    btncompare2.Visible:=true;
    end;
     
    procedure TFdeux.btncompareclickClick(Sender: TObject);
    begin
     
      AssignFile(fichier1,OpenDialog1.FileName);
      Begin
         AssignFile(fichier2,OpenDialog2.FileName);
         Begin
            Nom1 := OpenDialog1.FileName ;
            Nom2 := OpenDialog2.FileName ;
     
     
            reset(fichier1);
            i := 0 ;
            Memo1.Clear ;
              while Not eof(fichier1) do                          
              begin                                                 
                Readln(Fichier1, ligne1);
                Reset (fichier2);
                i:=i+1;
                j := 0 ;
                while Not EOF(fichier2) do                     
                    begin
                      Readln(fichier2 ,ligne2);               
                      if CompareText(ligne1,ligne2)=0 then
                          begin
                            j := 1 ;
                            Memo1.Lines.add(ligne1);
                          end ;
                    end;
                  If (j = 0) Then Memo2.Lines.Add(ligne1) ;
              end;
         End;
      End ;
    end;
     
    procedure TFdeux.btncompare2Click(Sender: TObject);
    begin
     
      AssignFile(fichier2,OpenDialog2.FileName);
      Begin
         AssignFile(fichier1,OpenDialog1.FileName);
         Begin
            Nom1 := OpenDialog1.FileName ;
            Nom2 := OpenDialog2.FileName ;
            AssignFile(fichier1, Nom1) ;
            AssignFile(fichier2, Nom2);
            reset(fichier2);
            i := 0 ;
            Memo3.Clear ;
              while Not eof(fichier2) do                          
              begin                                                 
                Readln(Fichier2, ligne2);
                Reset (fichier1);
                i:=i+1;
                j := 0 ;
                while Not EOF(fichier1) do                      
                    begin
                      Readln(fichier1 ,ligne1); //ligne2               
                      if CompareText(ligne1,ligne2)=0 then
                          begin
                            j := 1 ;
                           Memo4.Lines.add(ligne2);
                          end ;
                    end;
                 If (j = 0) Then Memo3.Lines.add( ligne2) ;
              end;
              btnChangements.Visible:=true;
         End;
      End ;
    end;
     
    procedure TFdeux.btnResetClick(Sender: TObject);
    begin
    Memo1.Clear;
    Memo2.Clear;
    Memo3.Clear;
    Memo4.Clear;
    btnChangements.visible:=false;
    end;
     
     
     
    procedure TFdeux.btnChangementsClick(Sender: TObject);
    var lineSup: string;
    var lineLess: string;
    begin
    if SaveDialog1.Execute then
     
      begin
     
        lineSup := SaveDialog1.FileName;
     
     
        Memo3.Lines.SaveToFile(lineSup);
      end;
    if SaveDialog2.Execute then
      begin
         lineLess :=SaveDialog2.FileName;
        Memo2.Lines.SaveToFile(lineLess);
      end;
    end;
     
    end.

    Le soucis est qu'effectivement avec deux fichiers de 10000 lignes chacun, j'ai laissé tombé après 2 heures... . Donc, je tente la méthode Sergiomaster, mais je me heurte à un "déclaration forward ou external non satisfaite. comparestringlist. "Je ne cerne pas bien ce que cela veut dire. Je l'ai déclaré dans les procédures pourtant! Et bien entendu, à cause de ce problème, je ne peux pas tester la suite du code... .

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    unit udeux;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Grids, Buttons;
    
    type
      TFdeux = class(TForm)
        Memo1: TMemo;
        Memo2: TMemo;
        OpenDialog1: TOpenDialog;
        OpenDialog2: TOpenDialog;
        Edit1: TEdit;
        Edit2: TEdit;
        btncompareclick: TButton;
        PrintDialog1: TPrintDialog;
        PrinterSetupDialog1: TPrinterSetupDialog;
        btncompare2: TButton;
        Memo3: TMemo;
        Memo4: TMemo;
        btnrechercherfichieroldFile: TBitBtn;
        btnrechercherNewFile: TBitBtn;
        btnReset: TButton;
        SaveDialog1: TSaveDialog;
        btnChangements: TBitBtn;
        LabelAdd: TLabel;
        LabelMinus: TLabel;
        SaveDialog2: TSaveDialog;
        procedure btncompareclickClick(Sender: TObject);
        procedure btnrechercherfichieroldFileClick(Sender: TObject);
        procedure btnrechercherNewFileClick(Sender: TObject);
        procedure btnResetClick(Sender: TObject);
        procedure btnChangementsClick(Sender: TObject);
         procedure CompareStringLists(List1, List2: TStringList; Missing1, Missing2: TStrings);
    
      private
        { Déclarations privées }
    
      public
        { Déclarations publiques }
        
      end;
    
    var
      Fdeux: TFdeux;
       Fichier1, Fichier2  : TextFile ;
       Nom1, Nom2          : String ;
       Ligne1, Ligne2      : String ;
       i, j                : Integer ;
       list1, list2         : string;
    
    implementation
    
    {$R *.dfm}
    
    procedure TFdeux.btnrechercherfichieroldFileClick(Sender: TObject);
       begin
            OpenDialog1.Execute;
            AssignFile(fichier1,OpenDialog1.FileName);
            Edit1.Text := OpenDialog1.FileName
       end;
    
    procedure TFdeux.btnrechercherNewFileClick(Sender: TObject);
       begin
            OpenDialog2.Execute;
            AssignFile(fichier2,OpenDialog2.FileName);
            Edit2.Text := OpenDialog2.FileName;
            btncompareclick.Visible:=true;
            btncompare2.Visible:=true;
       end;
    
    
    procedure CompareStringLists(List1, List2: TStringList; Missing1, Missing2: TStrings);
      var
      i, j   : Integer ;
       begin
            List1.Sort;
            List2.Sort;
            I := 0;
            J := 0;
                    while (I < List1.Count) and (J < List2.Count) do
                             begin
                                      if List1[I] < List2[J] then
                                             begin
                                             Missing2.Add(List1[I]);
                                             Inc(I);
                                             end
                                     else if List1[I] > List2[J] then
                                             begin
                                             Missing1.Add(List2[J]);
                                             Inc(J);
                                             end
                                     else
                                             begin
                                             Inc(I);
                                             Inc(J);
                                             end;
                             end;
                    for I := I to List1.Count - 1 do
                              Missing2.Add(List1[I]);
                    for J := J to List2.Count - 1 do
                              Missing1.Add(List2[J]);
       end;
    procedure TFdeux.btncompareclickClick(Sender: TObject);
    var
      List1: TStringList;
      List2: TStringList;
    begin
      List1 := TStringList.Create;
      List2 := TStringList.Create;
      AssignFile(fichier1,OpenDialog1.FileName);
      Begin
         AssignFile(fichier2,OpenDialog2.FileName);
         Begin
            Nom1 := OpenDialog1.FileName ;
            Nom2 := OpenDialog2.FileName ;
         end;
      end;
      try
        List1.LoadFromFile(Edit1.Text);
        List2.LoadFromFile(Edit1.Text);
        Memo2.Lines.Assign(List1);
        Memo3.Lines.Assign(List2);
        CompareStringLists(List1, List2,Memo2.Lines, Memo3.Lines);
    
      finally
        List2.Free;
        List1.Free;
      end;
    
    end;
    
    
    { //chgt à faire en fonction du stringlist
    procedure TFdeux.btnChangementsClick(Sender: TObject);
    var lineSup: string;
    var lineLess: string;
    begin
    if SaveDialog1.Execute then
    
      begin
    
        lineSup := SaveDialog1.FileName;
    
    
        Memo3.Lines.SaveToFile(lineSup);
      end;
    if SaveDialog2.Execute then
      begin
         lineLess :=SaveDialog2.FileName;
        Memo2.Lines.SaveToFile(lineLess);
      end;
    end;
    }
    end.

  20. #20
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    procedure TFdeux.CompareStringLists(List1, List2: TStringList; Missing1, Missing2: TStrings);
      var
    ...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [SQLServer]Script import fichier .txt
    Par Jenbi dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/08/2006, 16h49
  2. Importer fichiers txt d'un dossier dans une table
    Par avantoux dans le forum Access
    Réponses: 16
    Dernier message: 28/12/2005, 12h13
  3. import fichier TXT via ACCESS
    Par lepierre dans le forum Access
    Réponses: 4
    Dernier message: 03/12/2005, 06h52
  4. import fichier txt
    Par nogood1 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 05/10/2005, 11h33
  5. Pb import fichier txt avec lignes de longueurs diverses
    Par zebulon90 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/12/2004, 08h32

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