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.NET Discussion :

Modifier CSV pour export XML [Débutant]


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Utilisation Privé de VB.NET
    Inscrit en
    Janvier 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Utilisation Privé de VB.NET

    Informations forums :
    Inscription : Janvier 2013
    Messages : 14
    Points : 11
    Points
    11
    Par défaut Modifier CSV pour export XML
    Bonjour,
    Pour le contexte qui a son importance, je suis plutôt débutant en VB.NET bien qu'à force de lire les différents Tutoriels ou les réponse pertinentes sur le Forum ça commence à rentrer ...
    Bref, je cherche à convertir un fichier CSV sous la forme (Nom;Date;Masse) en fichier XML.
    J'ai réussi aprés de nombreuses heures sur Internet à le faire partiellement avec le code suivant :
    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
     
      Private Sub ObjetXML()
     
            Dim CheminFichierSource As String = "C:/Test.csv" 'Chemin du fichier CSV
            Dim CheminFichierXML As String = "C:/Test.xml" 'Chemin du fichier XML
            Dim TexteCSV As String() 'Texte du Fichier source
            Dim StructureXML As XElement 'Structure XML du Fichier XML à générer
     
            'Déclarer le flux de fichier en mode "Création" (Fichier XML) pour écraser éventuellement
            'le fichier qui porterait le même nom (partir d'un fichier vide avant son remplissage)
            'puis le fermer
            Dim CreerFichierXML As New FileStream(CheminFichierXML, FileMode.Create)
            CreerFichierXML.Close()
     
            'Affecter à la variable "TexteCSV" le contenu du Fichier source
            TexteCSV = File.ReadAllLines(CheminFichierSource)
     
            'Déclarer le flux de fichier en mode "Ecriture" (Fichier XML)
            Dim EcrireFichierXML As New StreamWriter(CheminFichierXML)
     
            'Affecter à la variable "StructureXML" la structure XML du Fichier XML à générer
            StructureXML = _
                <Root>
                    <%= From strs In TexteCSV _
                        Let fields = Split(strs, ";") _
                        Select _
                        <Objet>
                            <Nom><%= fields(0) %></Nom>
                            <DateYYMMDD><%= fields(1) %></DateYYMMDD>
                            <MasseTonne><%= fields(2) %></MasseTonne>
                        </Objet>
                    %>
                </Root>
     
            'Ecrire le fichier XML puis fermer le fichier
            EcrireFichierXML.WriteLine(StructureXML)
            EcrireFichierXML.Close()
     
        End Sub
    Le problème maintenant à résoudre est que je voudrais traiter les champs de mon fichier CSV avant de les basculer dans le fichier XML.
    En effet dans mon fichier CSV, le format date est "DD/MM/YY" et le format masse est "xxxxKg". Moi je voudrais les transférer dans un format différent ("YYYY-MM-DD" et "X Tonne").
    Merci à ceux qui ont pris le temps de lire mon Post jusqu'au bout et à ceux qui peuvent m'aider.

  2. #2
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Bonsoir,

    Bienvenu sur developpez.com

    Il vous suffit d'écrire des fonctions de mise en forme pour traiter les données :
    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
        Private Sub ObjetXML()
     
            Dim CheminFichierSource As String = "D:/Test.csv" 'Chemin du fichier CSV
            Dim CheminFichierXML As String = "D:/Test.xml" 'Chemin du fichier XML
            Dim TexteCSV As String() 'Texte du Fichier source
            Dim StructureXML As XElement 'Structure XML du Fichier XML à générer
     
            'Déclarer le flux de fichier en mode "Création" (Fichier XML) pour écraser éventuellement
            'le fichier qui porterait le même nom (partir d'un fichier vide avant son remplissage)
            'puis le fermer
            Dim CreerFichierXML As New FileStream(CheminFichierXML, FileMode.Create)
            CreerFichierXML.Close()
     
            'Affecter à la variable "TexteCSV" le contenu du Fichier source
            TexteCSV = File.ReadAllLines(CheminFichierSource)
     
            'Déclarer le flux de fichier en mode "Ecriture" (Fichier XML)
            Dim EcrireFichierXML As New StreamWriter(CheminFichierXML)
     
            'Affecter à la variable "StructureXML" la structure XML du Fichier XML à générer
            StructureXML = _
                <Root>
                    <%= From strs In TexteCSV _
                        Let fields = Split(strs, ";") _
                        Select _
                        <Objet>
                            <Nom><%= fields(0) %></Nom>
                            <DateYYMMDD><%= miseEnFormeDate(fields(1)) %></DateYYMMDD>
                            <MasseTonne><%= fields(2) %></MasseTonne>
                        </Objet>
                    %>
                </Root>
     
            'Ecrire le fichier XML puis fermer le fichier
            EcrireFichierXML.WriteLine(StructureXML)
            EcrireFichierXML.Close()
     
        End Sub
     
        Public Function miseEnFormeDate(ByVal strDate As String) As String
            Return strDate.Substring(4, 2) & strDate.Substring(2, 2) & strDate.Substring(0, 2) ' A adapter
        End Function
    La fonction est bien sur à mettre à votre sauce...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Utilisation Privé de VB.NET
    Inscrit en
    Janvier 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Utilisation Privé de VB.NET

    Informations forums :
    Inscription : Janvier 2013
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Merci Sankasssss de ta réponse.
    Elle m'a permis de résoudre mon problème mais surtout m'a fait comprendre, sur un cas concret, la différence (l'utilité ...) des Fonctions par rapport aux Procédures.
    Pour les personnes qui se poseraient la même question que moi avant la réponse de Sankasssss, voici le code adapté à mon besoin :

    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
    Private Sub ObjetXML()
     
            Dim CheminFichierSource As String = "C:\Users\DOMINIQUE\Desktop\TEST.csv" 'Chemin du fichier CSV
            Dim CheminFichierXML As String = "C:\Users\DOMINIQUE\Desktop\TEST.XML" 'Chemin du fichier XML
            Dim TexteCSV As String() 'Texte du Fichier source
            Dim StructureXML As XElement 'Structure XML du Fichier XML à générer
     
            'Déclarer le flux de fichier en mode "Création" (Fichier XML) pour écraser éventuellement
            'le fichier qui porterait le même nom (partir d'un fichier vide avant son remplissage)
            'puis le fermer
            Dim CreerFichierXML As New FileStream(CheminFichierXML, FileMode.Create)
            CreerFichierXML.Close()
     
            'Affecter à la variable "TexteCSV" le contenu du Fichier source
            TexteCSV = File.ReadAllLines(CheminFichierSource)
     
            'Déclarer le flux de fichier en mode "Ecriture" (Fichier XML)
            Dim EcrireFichierXML As New StreamWriter(CheminFichierXML)
     
            'Affecter à la variable "StructureXML" la structure XML du Fichier XML à générer
            StructureXML = _
                <Root>
                    <%= From strs In TexteCSV _
                        Let fields = Split(strs, ";") _
                        Select _
                        <Objet>
                            <Nom><%= fields(0) %></Nom>
                            <DateYYMMDD><%= miseEnFormeDate(fields(1)) %></DateYYMMDD>
                            <MasseTonne><%= KgToTonne(fields(2)) %></MasseTonne>
                        </Objet>
                    %>
                </Root>
     
            'Ecrire le fichier XML puis fermer le fichier
            EcrireFichierXML.WriteLine(StructureXML)
            EcrireFichierXML.Close()
     
        End Sub
     
        Public Function miseEnFormeDate(ByVal datDate As DateTime) As String
     
            'Affecter à la variable "strDate" la mise en forme de la Date d'entrée
            Dim strDaTE As String = datDate.ToString("yyyy-MM-dd")
     
            'Renvoyer la valeur de "strDate"
            Return strDaTE
     
        End Function
     
        Public Function KgToTonne(ByVal intKg As Integer) As String
     
            'Renvoyer la valeur en Tonne à partir de la valeur d'entrée en Kilogramme
            Return intKg / 1000
     
        End Function

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

Discussions similaires

  1. [CSV] export csv pour lecture sur mac
    Par lodan dans le forum Langage
    Réponses: 2
    Dernier message: 24/09/2008, 16h42
  2. Réponses: 2
    Dernier message: 06/12/2007, 15h11
  3. Moulinette pour export csv d'une base de données
    Par freestyler dans le forum C#
    Réponses: 6
    Dernier message: 16/02/2007, 11h57
  4. Relation récursive pour exporter vers XML
    Par bossun dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/08/2005, 14h17
  5. Standard XML pour exportation du contenu d'une BDD
    Par Fares BELHAOUAS dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 09/07/2005, 16h03

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