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

WinDev Discussion :

Récupérer chaine de caractères dans fichier csv [WD17]


Sujet :

WinDev

  1. #1
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 271
    Points : 79
    Points
    79
    Par défaut Récupérer chaine de caractères dans fichier csv
    Bonjour à tous,

    Je souhaite récupérer les données d'un fichier WinDev dans un fichier csv.
    Cependant avec mon traitement ci dessous, j'ai mes lignes qui s'écrasent au fur et à mesure du TANTQUE et donc en résultat j'ai que deux lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    svariable1 est une chaine
    svariable2 est une chaine
     
    TANTQUE HTrouve(Données)
    svariable1 = ("Nom", "Prénom")
    svariable2 = (Données.Nom, Données.Prénom)
    HLitSuivant(Données, Id_données)
    FIN
     
    SI svariable2 <> ""
    fSauveTexte(svariable1 + RC + svariable2)
    FIN
    Que dois-je faire ? Merci pour votre aide

  2. #2
    Membre habitué Avatar de sologne
    Homme Profil pro
    Chargé de missions
    Inscrit en
    Mai 2011
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Chargé de missions
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2011
    Messages : 73
    Points : 125
    Points
    125
    Par défaut
    Bonjour,

    pourquoi n'exportes-tu pas tes données directement à partir du fichier de ton analyse ?

    Ou sinon a partir d'un table en utilisant les FAA tu exportes directement en Excel sans une seule ligne de code ...

  3. #3
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 271
    Points : 79
    Points
    79
    Par défaut
    Bonjour Sologne,

    C'est plus simple avec tes deux solutions, mais je souhaite les récupérer ainsi car j'ai un écran de sélection avec des dates à renseigner etc...

    C'est pourquoi je veux parcourir mon fichier "données" ...

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 247
    Points : 12 885
    Points
    12 885
    Par défaut
    Bonjour,
    Le fonctionnement décrit est normal: tu affectes une valeur à tes chaines de caractères, mais sans concaténation ni écriture dans le fichier. Donc à chaque itération tu écrases le contenu précédent.

    Donc tu as deux solutions:
    1. soit tu écrits le contenu de sVariable2 à chaque itération
    2. soit tu concatènes le contenu (+=), et tu écrits le résultat à la fin

    Tatayo.

  5. #5
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 271
    Points : 79
    Points
    79
    Par défaut
    Bonjour tatayo,

    Oui le fonctionnement est logique...

    1. soit tu écrits le contenu de sVariable2 à chaque itération
    1. Après mon HTrouve... j'écrit sVariable2 = ??

    2. soit tu concatènes le contenu (+=), et tu écrits le résultat à la fin
    2. Après ma boucle TQ ?

    Merci pour ton aide.

  6. #6
    Membre éprouvé Avatar de miripesage
    Homme Profil pro
    gerant
    Inscrit en
    Novembre 2009
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : gerant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 725
    Points : 1 156
    Points
    1 156
    Par défaut
    Bonjour, à peu près comme ceci :
    Citation Envoyé par johan0510 Voir le message
    Bonjour à tous,

    Je souhaite récupérer les données d'un fichier WinDev dans un fichier csv.
    Cependant avec mon traitement ci dessous, j'ai mes lignes qui s'écrasent au fur et à mesure du TANTQUE et donc en résultat j'ai que deux lignes.

    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
     
    svariable1 est une chaine
    svariable2 est une chaine
    HLitpremier(Données)
    TANTQUE HTrouve(Données)
    //svariable1 = ("Nom", "Prénom")// ? j'ai pas compris
    svariable1 +=RC+Données.Nom
    svariable2 +=RC+ Données.Prénom
    //HLitSuivant = (Données)
    HLitSuivant(Données)
    FIN
     
    SI svariable1 <> ""
    fSauveTexte(svariable1 + RC + svariable2)
    FIN
    Que dois-je faire ? Merci pour votre aide

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 247
    Points : 12 885
    Points
    12 885
    Par défaut
    Citation Envoyé par johan0510 Voir le message
    1. Après mon HTrouve... j'écrit sVariable2 = ??
    Non, tu écrits directement dans le fichier (fEcritLigne) dans la boucle.
    Citation Envoyé par johan0510 Voir le message
    2. Après ma boucle TQ ?
    Tu concatènes DANS la boucle et tu écris dans le fichier APRES la boucle.

    Tatayo.

  8. #8
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 271
    Points : 79
    Points
    79
    Par défaut
    Merci pour toutes vos réponses !

    Pour ta première solution tatayo ca ressemblerait à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    svariable1 est une chaine
    svariable2 est une chaine
     
    TANTQUE HTrouve(Données)
    svariable1 = ("Nom", "Prénom")
    svariable2 = (Données.Nom, Données.Prénom)
    fEcritLigne(Fichier, sVariable2)
    HLitSuivant(Données, Id_données)
    FIN
     
    SI svariable2 <> ""
    fSauveTexte(svariable1 + RC + svariable2)
    FIN
    Il faut que j'ouvre le fichier avant aussi...

    La deuxième solution est celle de miripesage si j'ai bien compris...

  9. #9
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Bonjour

    Tu fais un RC entre chaque rubrique ça ne correspond pas au format csv

    Il est important que tu saches en quoi consiste le format csv
    http://fr.wikipedia.org/wiki/Comma-separated_values

    Comme tu peux le voir 2 méthodes sont proposées

    - La 1ère : séparation des rubriques avec une "," et des enregistrements avec un retour à la ligne (RC)
    inconvénient , si une des rubriques contient une "," la chaine va être répartie sur 2 rubriques. Lors de la récupération des données tout va être décalé, voire va faire planter vu qu'on se retrouve avec une rubrique de trop sur l'enregistrement...

    - La 2ème : séparation des rubriques avec une ";" et des enregistrements avec un retour à la ligne (RC) et surtout encadrement des chaînes par des " ce qui évite le problème citer ci dessus

    Dans ton code y-a un problème
    - de parcours du fichier Données
    - de concaténation
    - et avec la fonction le fSauveTexte, tu le sauves où et avec quel nom ton fichier csv ???

    Le code pour un csv sans encadrement des données par des "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    sTexte est une chaîne
     
    sTexte = "Nom,Prénom" + RC
    HLitPremier(Données)
    TANTQUE HTrouve(Données)
    	sTexte += Données.Nom + "," + Données.Prénom + RC
    	HLitSuivant(Données)
    FIN
     
    SI sTexte <> "" ALORS
    	fSauveTexte("C:\Temp\MonFichier.csv", sTexte)		
    FIN
    Le code pour un csv avec encadrement des données par des "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    sTexte est une chaîne
     
    sTexte = """Nom"",""Prénom""" + RC
    HLitPremier(Données)
    TANTQUE HTrouve(Données)
    	sTexte += """" + Données.Nom + """;""" + Données.Prénom + """" + RC
    	HLitSuivant(Données)
    FIN
     
    SI sTexte <> "" ALORS
    	fSauveTexte("C:\Temp\MonFichier.csv", sTexte)		
    FIN

  10. #10
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 271
    Points : 79
    Points
    79
    Par défaut
    Bonjour Laurent30s et merci pour ton explication.

    J'ai mis à jour mon code avec votre aide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    sEntete = ("Nom" +";"+ "Prénom")
    sContenuFichier est une chaine
     
    sContenuFichier = ""
    HLitRecherchePremier(Données, Id_données, [SAI_Année, Combo_Mois, Clients.Id_Clients, Type])
    TANTQUE HTrouve(Données)
    sContenuFichier += RC + Données.Nom
    sContenuFichier += RC + Données.Prénom
    HlitSuivant(Données, Id_données)
    FIN
    SI sContenuFichier <> ""
    fSauveTexte("C:\Temp\MonFichier.csv", sEntete + sContenuFichier)
    FIN
    Cependant dans mon fichier CSV voici le résultat :

    NOM Prénom

    DURANDPAUL
    DIDIERRENE

    etc....

    Mes données ne sont pas séparés dans chaque colonne respective....
    Seul mon entête fonctionne correctement

    Avez vous une idée ?

  11. #11
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    c'est un problème de concaténation de chaîne regardes au dessus comment j'ai fait...

  12. #12
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 271
    Points : 79
    Points
    79
    Par défaut
    sTexte += Données.Nom + "," + Données.Prénom + RC
    J'ai changé comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sContenuFichier += Données.Nom + ","
    sContenuFichier += Données.Prénom + ","
    C'est déjà mieux mais pas encore ça...!

  13. #13
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 271
    Points : 79
    Points
    79
    Par défaut
    J'ai trouvé la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    sEntete = ("Nom" +";"+ "Prénom")
    sContenuFichier est une chaine
     
    sContenuFichier = ""
    HLitRecherchePremier(Données, Id_données, [SAI_Année, Combo_Mois, Clients.Id_Clients, Type])
    TANTQUE HTrouve(Données)
    sContenuFichier += Données.Nom + ";"
    sContenuFichier += Données.Prénom + ";" + RC
    HlitSuivant(Données, Id_données)
    FIN
    SI sContenuFichier <> ""
    fSauveTexte("C:\Temp\MonFichier.csv", sEntete + RC + sContenuFichier)
    FIN
    En tout cas merci à tous pour votre aide

  14. #14
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    même si ça fonctionne, le ";" est de trop avant le RC vu qu'il n'y a pas d'autre rubrique après

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sContenuFichier += Données.Prénom + ";" + RC

  15. #15
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 247
    Points : 12 885
    Points
    12 885
    Par défaut
    Allons jusqu'au bout alors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sContenuFichier += [rc] + Données.Nom + ";" + Données.Prénom
    Tatayo.

  16. #16
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 271
    Points : 79
    Points
    79
    Par défaut
    même si ça fonctionne, le ";" est de trop avant le RC vu qu'il n'y a pas d'autre rubrique après
    Oui effectivement j'avais rectifié merci

    sContenuFichier += [rc] + Données.Nom + ";" + Données.Prénom
    Que veux dire [RC] ?

  17. #17
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 178
    Points : 416
    Points
    416
    Par défaut
    Bonjour,

    "[...]" est un opérateur de concaténation optionnelle.
    L'aide à ce sujet.

    Extrait :
    Remplissage d'une chaîne avec des éléments séparés par des RC (Retour Chariot). Le séparateur n'est pas concaténé si la chaîne d'origine est une chaîne vide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ChaîneRes est une chaîne
    POUR TOUT Client
            ChaîneRes += [RC] + Client.Nom
    FIN
    Cela permet d'insérer le retour à la ligne que si la chaîne est non vide et qu'elle ne se termine pas déjà par un RC.
    On évite ainsi les sauts de ligne intempestifs et les lignes vide en fin de fichier.

  18. #18
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 271
    Points : 79
    Points
    79
    Par défaut
    Bonjour Themayu,

    Lorsqu'on ne sait pas si les données récupérées sont vides (chaine vide) il ne faut donc pas utiliser [RC] ?


  19. #19
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 178
    Points : 416
    Points
    416
    Par défaut
    Le contraire en fait

    Cas 1, votre chaîne n'est pas vide, pour respecter le format vous devez donc retourner à la ligne avant d'ajouter un enregistrement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Machaine = "Toto" + rc + "Tata"
     Machaine += [rc] + "Titi"
    
     -> Machaine = "Toto" + rc + "Tata" + rc + "Titi"
    Cas 2, votre chaîne est vide, vous ne voulez donc pas avoir un retour à la ligne inutile.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Machaine = ""
     Machaine += [rc] + "Titi"
     
     -> Machaine = "Titi"

  20. #20
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 247
    Points : 12 885
    Points
    12 885
    Par défaut
    Si pour un client le nom et le prénom sont vides, de toute la ligne contiendra un séparateur, donc le résultat ne sera pas vide.

    Donc ici ça ne pose pas de problème.

    Tatayo.

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

Discussions similaires

  1. [Débutant] Caractère � dans fichier csv
    Par mailbox dans le forum VB.NET
    Réponses: 4
    Dernier message: 06/02/2012, 14h05
  2. [Batch] Remplacer chaine de caractère dans fichier xml
    Par meumeu73.1 dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 27/09/2011, 08h36
  3. Remplacer chaine de caractère dans fichier .txt
    Par lepiaf69 dans le forum VB.NET
    Réponses: 6
    Dernier message: 07/09/2010, 15h57
  4. Comment trouver une chaine de caractère dans fichier texte
    Par youssef1989 dans le forum Débuter
    Réponses: 3
    Dernier message: 01/05/2008, 16h45
  5. chaines de caractères dans fichier .rc ou .res
    Par raggadoll dans le forum C++Builder
    Réponses: 5
    Dernier message: 22/03/2004, 15h19

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