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

VB 6 et antérieur Discussion :

Concatenation de 7 fichiers .txt en 1 seul puis tri


Sujet :

VB 6 et antérieur

  1. #1
    Membre averti
    Inscrit en
    Août 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 22
    Par défaut Concatenation de 7 fichiers .txt en 1 seul puis tri
    Bonjour,

    Je viens de jeter un oeil a la faq ainsi qu'aux différents threads et je n'ai pas trouvé ce que je cherchais.
    En fait j'ai 7 fichiers textes chacun contenant des données sous la forme

    donnés1;donnés1_bis
    donnés2;donnés2_bis

    etc etc

    Les fichiers font entre 8000 et 35000 lignes et je voudrais d'abord concaténer les 7 fichiers pour n'en avoir qu'un seul (tjrs au format .txt) qui gardera la meme forme cad donnés;donnés_bis.

    Puis derriere j'aurais voulu trier par ordre croissant donnésX (avec X le nombre).

    Pensez vous franchement que ce soit réaliste au vu du langage et au vu de la quantité d'informations a traiter ( environ 100 000 lignes ).

    Merci

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 133
    Par défaut
    salut,

    oui c'est tout à fait réalisable ce que tu veux...

    Alors tu me dis sur quoi tu bloques et j'essayerais de t'aider...

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 730
    Par défaut
    Bonjour,

    ce que je ferais :

    - créer une base et une table de 2 colonnes (Access, SQL, MySQL... ce que tu veux)
    - lire les fichiers un à un
    - enregistrer les lignes des 7 fichiers dans la table
    - ouvrir un fichier texte vide
    - faire une requête dans ta table avec un ordre de tri ("ORDER BY")
    - réécrire dans le fichier texte vide tous les enregistrements de la table

  4. #4
    Membre averti
    Inscrit en
    Août 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 22
    Par défaut
    La meilleure facon de le faire alors, c'est de d'abord créér une BDD ? Le prob c'est que le script tourne de facon automatique et est lancé en tache de fond quotidiennement, donc pas moyen de faire a la main une base et table de 2 colonnes sous acces, SQL ...

    Après pour trier, je voulais savoir si comparer a des tris comme des tris a bulles ou autres si ca allait prendre enormement de temps (bah oui 100 000 lignes) parce que le reste du script prend 1H15 à tourner.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 730
    Par défaut
    Tu peux sans problème créer une base de manière automatisée (DAO : CreateDatase, base .mdb)

    ...si ca allait prendre enormement de temps (bah oui 100 000 lignes)
    moins d'une minute

  6. #6
    Membre averti
    Inscrit en
    Août 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 22
    Par défaut
    Ok je vais aller me plonger dans l'aide en ligne de VB6 une fois les fichiers concatene dans le BDD je pense que ca devrait aller assez vite.

  7. #7
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonsoir

    voici une autre possibilité sans passer par une base Access

    La premiere procédure compile l'ensemble des fichiers .txt contenus dans le dossier "C:\Repertoire" vers un fichier de synthese nommé "Compilation.txt".

    important: le fichier "Compilation.txt" doit etre créé dans un dossier différent des autres fichiers !


    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
    Sub CompilationFichiersTexte_ADO()
    '
    'Necessite d'activer la reference
    '"Microsoft ActiveX Data Objects 2.x Library"
    '
    Dim Rc As ADODB.Recordset
    Dim cn As String, Chemin As String, Fichier As String, x As String
    Dim i As Long
     
    'répertoire contenant les fichiers texte
    Chemin = "C:\Repertoire"
     
    'Ouvre un nouveau fichier Texte pour compiler les données
    '! attention à ne pas le placer dans le meme repertoire que les autres ...
    Open "C:\Compilation.txt" For Output As #1
     
    '--- adaptez cette ligne en fonction du nombre
    'de colonnes dans les fichiers
    Print #1, "Champ1;Champ2" & vbCrLf;
    '------------
     
        'boucle sur l'ensemble des fichiers txt
        Fichier = Dir(Chemin & "\*.txt")
        Do While Fichier <> ""
     
            '----- requète pour récupérer le contenu du fichier txt
            cn = "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
            "Dbq=" & Chemin & ";Extensions=asc,csv,tab,txt"
     
            Set Rc = New ADODB.Recordset
            Rc.Open Source:="SELECT * FROM " & Fichier, ActiveConnection:=cn
     
            If Not Rc.EOF Then
     
                    '--- recuperation des entêtes
                    For i = 0 To Rc.Fields.Count - 1
                    x = x & Rc.Fields(i).Name & ";"
                    Next i
                    Print #1, Left(x, Len(x) - 1) & vbCrLf;
                    '---
     
                Print #1, Rc.GetString(, , ";", vbCrLf, "");
            End If
     
            Rc.Close
            x = ""
            '-------------------------
        Fichier = Dir
        Loop
     
    'Fermeture du fichier Compilation
    Close #1
     
    MsgBox "Opération terminée"
    End Sub

    La 2eme procedure crée un autre fichier "C:\CompilationTriee.txt" qui va récupérer la synthese triée du 1er fichier "Compilation.txt"


    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
    Sub TriFichierTXT_ADO()
    '
    'Necessite d'activer la reference
    '"Microsoft ActiveX Data Object 2.x Library'
    '
        Dim Rc As ADODB.Recordset
        Dim cn As String, Chemin As String, Fichier As String
        Dim i As Long
        Dim x As String
     
    'Ouvre un nouveau fichier Texte pour compiler les données triée
    Open "C:\CompilationTriee.txt" For Output As #1
     
        'le fichier que vous souhaitez trier
        Chemin = "C:\"
        Fichier = "Compilation.txt"
     
        cn = "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
        "Dbq=" & Chemin & ";Extensions=asc,csv,tab,txt"
     
        Set Rc = New ADODB.Recordset
        Rc.Open Source:="SELECT * FROM " & Fichier & _
                    " ORDER BY Champ1", ActiveConnection:=cn
     
        If Not Rc.EOF Then
     
                    '--- recuperation des entêtes
                    For i = 0 To Rc.Fields.Count - 1
                    x = x & Rc.Fields(i).Name & ";"
                    Next i
                    Print #1, Left(x, Len(x) - 1) & vbCrLf;
                    '---
     
        Print #1, Rc.GetString(, , ";", vbCrLf, "");
        End If
     
        Rc.Close
        Set Rc = Nothing
     
    'Fermeture du fichier CompilationTriee
    Close #1
     
    MsgBox "Opération terminée"
    End Sub

    je n'ai pas testé avec 100 000 données mais je suis curieux et interessé de connaitre la durée de traitement...;o)


    bonne soiree
    michel

  8. #8
    Membre averti
    Inscrit en
    Août 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 22
    Par défaut
    C'est vraiment sympa.
    Bon je vais tester ca et te dire au point de vue timing combien de temps ca prends !

    Merci

  9. #9
    Membre averti
    Inscrit en
    Août 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 22
    Par défaut
    J'ai un problème lorsque j'exécute mon prog, et vu que moi et les BDD en VB ...



    L'erreur ensuite me guide vers la ligne suivante :


    Rc.Open Source:="SELECT * FROM " & Fichier, ActiveConnection:=cn

    Voila merci

  10. #10
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonjour

    sans doute qu'il y a des espaces dans le nom des fichiers txt

    tu peux utiliser cette adaptation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rc.Open Source:="SELECT * FROM [" & Fichier & "]", ActiveConnection:=cn

    bonne journée
    michel

  11. #11
    Membre averti
    Inscrit en
    Août 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 22
    Par défaut
    Niquel c'est exactement ce que je cherchais en ce qui concerne la concatenation.
    Dernier (j'espeère) problème, lors du tri, je me retrouve avec le meme genre d'erreur que précedemment mais cette fois, ci cela ne peut pas venir d'un fichier contenant des espaces vu que l'on vient chercher le fichier C:\Compilation.txt



    Et l'erreur me renvoie vers cette ligne la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rc.Open Source:="SELECT * FROM [" & Fichier & "] ORDER BY Champ1", ActiveConnection:=cn
    Puis j'ai fait une erreur en disant que mon fichier concaténé aurait 100 000 lignes, ca en fait que 85 000.

    Merci (promis après j'arrête de vous embeter).


    C'est bon j'y suis arrivé !
    Merci

    PS : pour trier 130 000 données ca mets une dizaine de secondes.

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

Discussions similaires

  1. [AC-2010] Importer X fichier txt dans une seule table
    Par Mitch_69 dans le forum VBA Access
    Réponses: 5
    Dernier message: 23/10/2012, 14h01
  2. Concatenation fichiers txt
    Par Jean-Matt dans le forum Langage
    Réponses: 2
    Dernier message: 29/09/2009, 12h20
  3. Copier plusieurs fichier txt dans un seul fichier
    Par vieri31 dans le forum C++Builder
    Réponses: 3
    Dernier message: 31/05/2008, 13h57
  4. detecter une ligne a un seul mot dans un fichier txt
    Par malikoo dans le forum Général Python
    Réponses: 9
    Dernier message: 04/07/2007, 19h43
  5. Réponses: 28
    Dernier message: 22/05/2006, 16h25

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