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 :

Copier une partie du contenue d'un fichier dans un autre fichier


Sujet :

VB 6 et antérieur

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Copier une partie du contenue d'un fichier dans un autre fichier
    Bonjour
    Voici mon problème :
    J'ais un fichier.csv (fichier texte organisé) sous le format :
    date, numéro de client, nom du client, nom du produit, quantité, unité, prix, code vendeur (le fichier est classé de la date la plus ancienne à la date la plus récente).
    Ce que je voudrais faire c'est :
    L'utilisateur choisi une date et que lorsqu'il valide son choix, il faudrait rechercher cette date dans le fichier, si il ne la trouve pas, chercher la date suivante (le jour suivant) jusqu'à ce qu'il la trouve et alors copier toutes les lignes (de cette ligne à la dernière ligne) dans un autre fichier .csv.
    Je ne vois pas comment faire cela.
    Avez vous une idée ?
    Merci d'avance.

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Et tu en est ou ...? de tes connaissances en VB6

  3. #3
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Bonjour,

    dans le principe, lire ton fichier csv ligne à ligne.

    1er cas : Tu arrives sur une ligne contenant la date choisie, tu l'enregistres dans ton nouveau fichier csv et tu lis les lignes suivantes que tu enregistres également dans ton nouveau fichier csv.

    2eme cas : Tu arrives sur une ligne dont la date est postérieure à la date choisie, puisque ton fichier est trié de la date la plus ancienne à la plus récente, c'est que la date choisie n'est pas dans le fichier, tu commences donc à ce niveau là en enregistrant cette ligne et les lignes suivantes dans ton nouveau fichier csv.

    Bref, si j'ai bien compris, dès que la date est égale ou supérieure à la date choisie tu lis, tu copies.

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    @ bbil, Pour mon niveau je peux me considérer comme intermédiaire.
    En fait c'est pour un projet de mon stage.
    Je dois créer un logiciel de gestion des clients, celui-ci permet afficher la liste des clients contenue dans un fichier csv, il permet aussi d'ajouter des prospects, des observations, de gérer des fiches clients secondaires, de gérer ses rendez-vous par date précise ou par semaine, et de voir son historique des ventes (chaque information contenue dans un fichier .csv différent), chaque fonction est dans une fenêtre indépendante. J’ai tout fait à part pour l’historique des vente Et c'est là que je coince, j'arrive à afficher tout le contenue du fichier historique (10 ligne afficher en même temps) en utilisant un tableau, mais je dois afficher seulement l'historique des vente à partir d'une certaine date jusqu’à la date d'aujourd'hui (la date système) et là je ne vois pas comment faire, vu que mon tableau est de type string. C'est pour ça que je voulais une procédure intermédiaire, en fait en fessant cela j'aurais un fichier temporaire contenant seulement ce que je veux afficher et je pourrais utiliser ce que j’ai fait en chargeant ce fichier temporaire et ça m’afficheras alors seulement les résultats de la procédure précédente.

    @ OhMonBato c’est la première technique que je voudrais faire, mais ce que je ne sais pas faire c’est trouver un élément précis dans mon fichier, je sais le lire et afficher son contenue dans le logiciel, et je crois que si je sais comment trouver la date dans le fichier j’arriverais à copier ce que je recherche, donc si tu sais comment rechercher un élément précis dans un fichier et s’en servir, je suis preneur.
    Merci pour vos réponses

  5. #5
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    re,

    montre-nous le code que tu utilise pour lire ton fichier ...

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    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
    Dim file_name As String
    Dim fnum As Integer
    Dim whole_file As String
    Dim lines As Variant
    Dim one_line As Variant
    Dim num_rows As Long
    Dim num_cols As Long
    Dim the_array() As String
    Dim r As Long
    Dim C As Long
    Dim pu As Single
    Dim qt As Single
    Dim pt As Single
     
     
        file_name = newchem & "zcacomplet_csv.csv"
     
        ' charger le fichier
        fnum = FreeFile
        Open file_name For Input As fnum
        whole_file = Input$(LOF(fnum), #fnum)
        Close fnum
     
        lines = Split(whole_file, vbCrLf)
     
        ' Dimensionner le tableau.
        num_rows = UBound(lines)
        one_line = Split(lines(0), Chr(34) & "," & Chr(34))
        num_cols = UBound(one_line)
        ReDim the_array(num_rows, num_cols)
     
        ' Copier les donnée dans le tableau.
        For r = 0 To num_rows
            If Len(lines(r)) > 0 Then
                one_line = Split(lines(r), Chr(34) & "," & Chr(34))
                For C = 0 To num_cols
                    the_array(r, C) = one_line(C)
                Next C
            End If
        Next r
     
        For r = 0 To num_rows
            For C = 0 To num_cols
                Debug.Print the_array(r, C) & "|";
            Next C
            Debug.Print
        Next r
        Debug.Print "======="
    Pour le nom du ficher "newchem" correspond à la lettre de la clé usb où sont les fichiers.
    Explication : l'application doit charger les fichier qui se trouve à la racine d'une clé usb, au lancement du programme l'utilisateur choisis l'emplacement de sa clé ("e:\", "f:\",...) et je le met dans une variable public que je peux utiliser partout en utilisant "newchem" et le nom du fichier pour ouvrir les différent fichier.

  7. #7
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par jvkd59 Voir le message
    ... je sais le lire et afficher son contenue dans le logiciel, et je crois que si je sais comment trouver la date dans le fichier j’arriverais à copier ce que je recherche, donc si tu sais comment rechercher un élément précis dans un fichier et s’en servir, je suis preneur.
    Merci pour vos réponses
    étant donné que de toute façon tu lis tout t'on fichier en une seule passe, tu peu bien tester au moment de ta copie dans ton tableau "the_array"...

    pour tester la date un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim bMemoDateAtteinte as booelan 'Drapeau (flag) date atteinte...
    bMemoDateAtteinte = False
    (...)
                one_line = Split(lines(r), Chr(34) & "," & Chr(34))
               If DateValue(on_line(1)) = Date then bMemoDateAtteinte = true
               if bMemoDateAtteinte Then 
                   For C = 0 To num_cols
                      the_array(r, C) = one_line(C)
                   Next C
              end if 
    (...)

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Bonsoir.
    Je crois avoir compris ce que tu veux faire, mais il y a une erreur à cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If DateValue(one_line(0)) = datechoisie Then
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     erreur d'exécution '13' :
    type incompatible
    Pourtant ma variable datechoisie est de type date et datevalue est une fonction qui retourne une date, donc je ne comprends pas pourquoi ça fait ça.
    Aurais-tu une idée de cette erreur ?
    Le format de la date dans le fichier est "jj/mm/aaaa".

  9. #9
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 092
    Points : 16 606
    Points
    16 606
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Msgbox one_line(0)
    Msgbox datechoisie
    If DateValue(one_line(0)) = datechoisie Then
    Pour vérifier

  10. #10
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    essai d'afficher la valeur de online(0) ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    one_line = Split(lines(r), Chr(34) & "," & Chr(34))
    Debug.print one_line(0)
    Debug.print DateValue(one_line(0)) 
    stop

  11. #11
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 092
    Points : 16 606
    Points
    16 606
    Par défaut
    Salut tout le monde

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim datechoisie As Date
    Dim one_line As Variant '<--- ATTENTION variant
    one_line = "13/04/1956" '
    MsgBox TypeName(one_line) '= string
    datechoisie = CDate("13/04/1956")
    If IsDate(one_line) Then
        If DateValue(CDate(one_line)) = datechoisie Then
            Beep 'Ok
        End If
    End If

  12. #12
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    J'ai compris pourquoi ça marchait pas, chaque champs dans le fichier est contenu entre guillemets et c'est pour ça que ça marchais pas, j'ai alors utilisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    one_line(0) = Replace(one_line(0), """", "")
    Ce qui m'a permis de supprimer les guillemets et là, ça marche.

    Mais c'est là que je m'aperçois que les dix premiers résultats ne sont pas rangé chronologiquement, je vais voir à la fin du fichier et je m'aperçois que les derniers résultats ne sont pas ranger chronologiquement (2002 après 2005, etc. ...).

    Je me suis fait avoir en voulant aller trop vite, car en fait le fichier n'est pas ranger chronologiquement par date mais par nom de client.
    Donc ta technique marche bien et je te remercie beaucoup de ton aide, car tu as résolu mon problème originel.

    Mais là je ne vois pas comment je peux faire vu que ce n'est pas ranger chronologiquement. Si tu veux bien m'aider encore, ce serais gentil.
    Merci d'avance.

  13. #13
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    ben tu veux quoi dans ton tableau final ..

    si tu n'as pas besoin de trier tu peu simplement tester si la date est >= à ta datechoisie

  14. #14
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Dans mon tableau finale, je veux toutes les lignes de mon fichier qui ont une date égale ou supérieur à la date choisis (si on choisis le 03/10/2009, je veux que toutes les ligne qui on une date égale ou supérieur soit afficher et seulement celle-ci).
    Mais on peut faire des test sur les date du type > ou < ?

  15. #15
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    Bonjour,

    Tu peux aussi essayer de mettre les valeurs de tes dates dans une Listbox et l'indice de la ligne dans l'ItemData.

    Dans ta boucle...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Listbox.AddItem the_array( r , indice de la zone date)
    Listbox.ItemData(Listbox.NewIndex) = r
    Tu mets la propriété sorted de ta Listbox à la valeur True
    et tu as dans ta Listbox les Dates triées, et l'itemData correspondant te donne l'indice de la ligne( r ) correspondant aux valeurs de ton tableau associées à chaque date.
    Puis tu procèdes comme tu voulais le faire sur un fichier trié

  16. #16
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Donc avec un test sur la date, ça fonctionne, donc je vous remercie de votre aide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    For r = 0 To num_rows
            If Len(lines(r)) > 0 Then
                one_line = Split(lines(r), Chr(34) & "," & Chr(34))
                datetab = Replace(one_line(0), """", "")
                If datetab >= datechoisie Then
                For C = 0 To num_cols
                    the_array(r, C) = one_line(C)
                Next C
                End If
            End If
        Next r
    Mais le problème, c'est que lorsque la date ne correspond pas, il passe comme même à la ligne suivante du tableau (puisque le next r est hors du test) :
    Exemple : Si la première date valide est à la 5ème ligne du fichier et la suivante à la 8ème ligne du fichier, alors le tableau est rempli de vide de la première à la quatrième ligne, le premier résultat est à la 5ème ligne du tableau, le tableau est vide de la 6ème à la 7ème ligne et le deuxième résultat est à la 8ème ligne, etc. ...
    Aurait-tu une solution pour ce problème, ou y-a-t-il une solution pour supprimer les lignes vides à la fin de la procédure ?
    Merci d'avance.

  17. #17
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    Re,

    Non il faut faire ici
    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
    
     ' Copier les donnée dans le tableau.
        For r = 0 To num_rows
            If Len(lines(r)) > 0 Then
                one_line = Split(lines(r), Chr(34) & "," & Chr(34))
                For C = 0 To num_cols
                    the_array(r, C) = one_line(C)
                    '------------------------------------------------
                    Listbox.AddItem the_array( r , indice de la zone date)
                    Listbox.ItemData(Listbox.NewIndex) = r
                    '------------------------------------------------
                Next C
            End If
        Next r
    et tu as une liste des dates triée

  18. #18
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    Re,
    oui d'accord,
    le champ date n'est pas toujours à la même place dans la ligne ,mais tu peux le reperer dans la ligne par une petite procédure puissque il est toujours sous la forme jj/mm/aaaa, donc tu peux faire un instr pour reperer les "/" et reperer
    l'indice colonne de la date.

  19. #19
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Si, la date est toujours dans la première colonne du tableau (indice 0).
    La solution que j'ai mit au-dessus, avec l'aide de bbil, fonctionne et je n'ai dans le tableau que les ligne dont la date est égale ou supérieure à celle de l'utilisateur, mais il y a des lignes vides, et ce que je voudrais c'est de les supprimer à la fin de la procédure de création du tableau et avant l'affichage, si tu sais comment effacer des lignes vide dans un tableaux je suis preneur.
    Merci pour ton aide.

  20. #20
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                   '------------------------------------------------
     ici  tu mets          Listbox.AddItem the_array( r , 0 )
                              Listbox.ItemData(Listbox.NewIndex) = r
                    '------------------------------------------------

Discussions similaires

  1. Copier le contenu d'un fichier dans un autre fichier
    Par adissa357 dans le forum Général Java
    Réponses: 3
    Dernier message: 13/04/2013, 13h06
  2. Réponses: 2
    Dernier message: 27/04/2009, 23h14
  3. Réponses: 4
    Dernier message: 28/08/2007, 17h11
  4. Réponses: 1
    Dernier message: 15/05/2007, 16h55

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