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 :

Fichier CSV: export sélectif de colonnes [WD17]


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Par défaut Fichier CSV: export sélectif de colonnes
    Bonjour à tous
    voici mon problème:
    j'ai un fichier texte dont les colonnes sont séparées par le symbole ; et les enregistrements par un retour chariot.
    Le fichier comporte une vingtaine de colonnes de différentes longueurs.
    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    17;13/01/2013;07:30;06;Automate06;Jeff Scott;20/01/2013;09:17;01;Quart1;Poste3;22.30;444-56;Lub;15W40;2365;1;-1;3316;111111111;
    18;13/01/2013;07:30;02;AUtomate02;Alice Martin;20/01/2013:09:17;Quart1;Poste5;145.77;444-12;Lub;Quartz7000;2370;0;-1;3316;111111111;

    J'aimerais exporter de façon sélective une dizaine de colonnes séparées par ; sans utiliser les fichiers HyperfileSQL.
    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    13/01/2013;07:30;Automate06;Jeff Scott;Quart1;Poste3;22.30;Lub;15W40;3316;
    13/01/2013;07:30;AUtomate02;Alice Martin;Quart1;Poste5;145.77;Lub;Quartz7000;3316;
    Merci d'avance pour votre aide.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 128
    Par défaut
    Salut,

    Je ne sais pas si j'ai bien compris et j'écris à la volée mais tu pourrais faire des ExtraitChaine() sur les bouts qui t'intéressent et les séparer par des ";"

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Par défaut
    Bonjour,

    Vous avez la suggestion de Simeonn.

    Vous pourriez également
    - faire une requête sur le fichier texte
    - affecter le résultat de cette requête à une Table Mémoire (voir FichierVersTableMémoire), si le volume n'est pas prohibitif pour une Table Mémoire
    - [EDIT] ou utiliser ConstruitTableFichier comme le propose Tatayo dans une autre discussion
    - exporter les colonnes qui vous intéressent

    Bonne journée

    Hemgé

  4. #4
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Par défaut
    Bonjour,

    @Simeonn:
    merci pour le tuyau. Si j'ai bien compris le code ressemblera à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    :
    sCheminFichier="E:\OUTPUT.TXT"
    sContenuFichier=fChargeTexte(sCheminFichier)
    Sablier(Oui)
    POUR TOUTE CHAÎNE sLigne DE sContenuFichier SEPAREE PAR RC
    	SI sLigne = "" ALORS RETOUR
    	ExtraitChaîne(sLigne, 2, ";")+";"+ExtraitChaîne(sLigne, 3, ";")+";"+ExtraitChaîne(sLigne, 5, ";")+";"+ExtraitChaîne(sLigne, 6, ";")+";"+ExtraitChaîne(sLigne, 10, ";")+";"+ExtraitChaîne(sLigne, 11, ";")+";"+ExtraitChaîne(sLigne, 12, ";")+";"+ExtraitChaîne(sLigne, 14, ";")+";"+ExtraitChaîne(sLigne, 15, ";")+";"+ExtraitChaîne(sLigne, 19, ";")+";"
    mon seul hic est comment maintenir ce code en cas de changement de colonnes à exporter?

    @Hemgé:
    Comment je fais pour effectuer une telle requête sur un fichier texte?

    Merci à tous.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 128
    Par défaut
    Si t'es sûr que ton fichier ne contiendra pas de ligne vide en plein milieu oui, sinon, je mettrais plutôt un :
    Pour les parties à garder, tu peux toujours stocker quelque part une liste des colonnes à garder (c'est pas propre mais c'est déjà une piste)

  6. #6
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Par défaut
    @Simeonn:

    Il peut en effet arriver que certaines colonnes à exporter puisse comporter des vides.

    Par stockage, fais tu allusion à un fichier INI?

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Par défaut
    Citation Envoyé par pobos Voir le message
    @Hemgé:
    Comment je fais pour effectuer une telle requête sur un fichier texte?
    Euh .. Oublions cela

    En compensation, voici un traitement (pas complètement testé) propre et qui peut facilement être transformé en routine moyennant quelques paramètres.

    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
    sFichierSéparateur est une chaîne = ";" 
    sFichierChemin est chaîne = "E:\OUTPUT.TXT" 
    tabFichierExportColonne est tableau d'entiers = [1, 4, 5, 7, 11]  //soit le no des colonnes à exporter dans le fichier à traiter 
    //on peut remanier leur ordre pour changer l'ordre d'export dans le fichier CSV 
    //en fait saisir la liste, cochez un sélecteur etc 
    sExportCVS est une chaîne //résultat à exporter
    nNoFichier est un entier = fOuvre(sFichierChemin) 
    sLigneCSV est une chaîne
    SI nNoFichier <> -1 ALORS 
    	sLigneCSV = fLitLigne(nNoFichier) //on lit un enregistrement pour compter le nombre de colonnes du fichier à traiter
    	fFerme(nNoFichier) 
    SINON 
    	//
    FIN 
    //Tester EOT ou sLigneCSV = ""(erreur)
    sFichierContenu est une chaîne = fChargeTexte(sFichierChemin) 
    nFichierNbCol est un entier = ChaîneOccurrence(sLigneCSV, sFichierSéparateur)  + 1 
    nNbColCSV est un entier = Dimension(tabFichierExportColonne) // Nombre de colonnes à exporter 
    //contrôler que aucun numéro de colonne à traiter n'est supérieur à nFichierNbCol, nombre de colonnes du fichier à traiter
     
    nLigneNo est un entier 
    tabTableauCSV est un tableau de 0 par nNbColCSV chaînes //Tableau pour l'export 
     
    Sablier(Oui) 
    POUR TOUTE CHAÎNE sLigne DE sFichierContenu SEPAREE PAR RC 
    	SI SansEspace(sLigne) <> "" ALORS 
    		nLigneNo = TableauAjouteLigne(tabTableauCSV) //si on décide de sauter les lignes vides
    		//sinon nLigneNo = compteur dans le POUR TOUTE CHAINE sLigne, supra 
    		POUR TOUT ColExportNo, ColNo de tabFichierExportColonne //on n'extrait que les colonnes à exporter 
    			tabTableauCSV[nLigneNo, ColNo] = ExtraitChaîne(sLigne, ColExportNo, sFichierSéparateur) 
    		FIN
    	SINON
    		// traiter la ligne vide
    	FIN 
     
    FIN
     sExportCVS = TableauVersCSV(tabTableauCSV) 
     SI sExportCVS <> "" ALORS
     	//écrire 
     FIN
    Vous pourriez également développer un traitement plus interactif et plus visuel :
    • alimenter une Table,
    • sélectionner les colonnes à ne pas exporter et les cacher (par ex. double-clic sur une colonne la cache, prévoir un bouton pour réafficher touts les colonnes en cas d'erreur)
    • TableVersTexte [Edit] les colonnes cachées ne sont pas converties, sauf usage de la constante taAvecColonnesInvisibles
    • écrire dans le fichier


    Bonne fin de semaine

    Hemgé

  8. #8
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Par défaut
    Bonjour,

    @Hemgé: je viens de tester ton code et ça marche plutôt bien.

    merci Hemgé.

    merci à tous.

    bonne soirée.

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

Discussions similaires

  1. Importer un fichier CSV en choisissant les colonnes
    Par wam111 dans le forum Administration
    Réponses: 5
    Dernier message: 25/04/2018, 15h16
  2. [MySQL] Fichier CSV exporté contient le html de la page qui le génère
    Par old_modele dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 21/02/2015, 23h25
  3. Réponses: 6
    Dernier message: 09/01/2015, 15h38
  4. Réponses: 2
    Dernier message: 16/03/2012, 10h20
  5. [PERL] Normaliser un fichier csv : de lignes en colonnes
    Par nicolep dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 25/11/2008, 14h09

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