Envoyer données d'un fichier CSV dans un tableau

romanosky35 Messages postés 50 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 23 juin 2011 - 20 mars 2009 à 13:51
troxsa Messages postés 553 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 2 octobre 2016 - 23 mars 2009 à 16:36
Bonjour,

l'année dernière j'avais déjà eu recours à ce forum.. et cela m'a beaucoup aidé.


Merci encore, notamment à un certain "Casy". :)



Cette année j'ai un autre projet à faire.


J'aimerais savoir ceci :


Comment s'y prendre pour lire un CSV, qui se présente comme ceci :


               
;1991;1992;1993;......;2006


Allemagne;206;152;


France      ;215;452


Belgique;


...


...



Je dois utiliser la fonction streamreader (donc je sais qu'il faut importer IO)


et j'aimerais mettre ces données dans un tableau



Ensuite, j'aimerai qu'au chargement du form (et donc au chargement du
fichier csv et à la suite de la "construction" du tableau) pouvoir
utiliser les données qui sont dans le tableau, pour afficher des
informations sur chaque pays, comme ceci :



On a un ComboBox dans lequel il y a les pays, et en sélectionnant un
pays dans le ComboBox, les chiffres qui lui sont associés
apparaissent.. dans des TextBox par exemple.(et pour ca je dois
utiliser la commande "Select" ou "Select Case".. ou peut-être "If Case.." je ne sais plus..)


Mais il faut donc que cette recherche d'info (quand on sélectionne un pays) se fasse dans ce tableau.


Et.; petite question, comment je gère la "cellule" vide, en 1ère ligne, 1ère colonne ???


pour info, après cela, je vais utiliser ChartDirector avec les données
de ce tableau... pour faire des graphiques (pour ceux qui ne
connaissent pas Chart Director ;) )


Voilà, je ne sais pas si je suis assez clair, n'hésitez pas à me poser des questions si besoin.

Serait-il possible d'avoir des extraits de code de votre part ??

Mais que des choses très simples, très basiques (sans mauvais jeu de
mot ;) ), ça vous prendra moins de temps à faire ^^ Je ne vous demande
pas monts et merveilles mais juste un petit peu d'aide.


Merci d'avance pour vos réponses.

15 réponses

troxsa Messages postés 553 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 2 octobre 2016 1
20 mars 2009 à 14:38
Bonjour,

J'ai fais un petit exemple je sais pas si ça fonctionne car j'ai pas fait de teste dessus

    Private tdonnée As New ArrayList
_________________________________________________________________________________________
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim f As New StreamReader("monfichier.csv")

        Do Until f.Peek = -1 'Lecture du fichier ligne par ligne
            Dim MaLigne As String = f.ReadLine
            If MaLigne = "" Then
                Continue Do
            Else
                Dim sourcecsv() As String = MaLigne.Split(";")
                ComboBox1.Items.Add(sourcecsv(0)) ' on ajoute tout les pays dans la combo
                tdonnée.Add(MaLigne) ' on stock toute les donner lu dans un tableau général
            End If

        Loop
    End Sub
_________________________________________________________________________________________
    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

        For i As Integer = 0 To tdonnée.Count - 1
            If tdonnée.Item(i).ToString.IndexOf(ComboBox1.Text) >= 0 Then
                Dim lecdonnées() As String = tdonnée.Item(i).ToString.Split(";")
                For j As Integer = 0 To lecdonnées.Count - 1 'lecture des donnée qui correspond au pays
                    MsgBox(lecdonnées(j)) 'lecture des données une par une
                Next
            End If
        Next
    End Sub
End Class
_________________________________________________________________________________________

Sa fait super plaisir de lire quelle un qui explique bien son problème :)

Cordialement,
0
romanosky35 Messages postés 50 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 23 juin 2011
20 mars 2009 à 14:52
C vrai, j'ai bien écrit mon problème ?? ^^ Waw !
Et bien merci beaucoup !!! C'est sympa.

Et surtout merci pour cette réponse "rapide" (<- le mot est faible !! Mais comment vous faîtes ??!!!)

Je vais tester ça de suite... et je vous tiens au courant !

Merci encore !!
0
romanosky35 Messages postés 50 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 23 juin 2011
20 mars 2009 à 15:35
Le chargement du Form fonctionne bien.

Mais pour la sélection dans le ComboBox... Et bien, en fait dans le code....
il me souligne :   lecdonnées.Count

en m'indiquant ceci : 'Count' n'est pas un membre de 'System.Array'

Une idée sur le problème ?

Merci d'avance!
0
romanosky35 Messages postés 50 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 23 juin 2011
20 mars 2009 à 19:47
Bonsoir,

J'ai retrouvé ceci, cela ressemble plus à ce que je recherche en fait..

J'ai quelques questions par rapport à ce code :
quand je l'exécute, il me lit les données présentes dans mon fichier .csv, les mets dans un tableau, puis il prend les données de ce tableau et les mets dans un fichier .txt... c'est bien ça ?

Si je me trompe, pourriez-vous me donner quelques explications supplémentaires s'il vous plaît ?

Et si c'est bien le cas, comment je poursuis mon programme ?
Comment je fais pour aller chercher telle donnée, situé dans telle ligne et telle colonne
Est-ce que cela ressemble à : TabCar(numéroligne, numérocolonne),
auquel cas j'écrirais quelque chose comme :
sw.Writeline(TabCar(num..,num...))  ??

Je vous laisse regarder ce code, merci d'avance pour vos réponses :)
N'hésitez pas pour les questions si je ne suis pas assez précis dans mes explications !

Module Module1
    Sub Fichier_LireEcrire()
        '
        ' ----------------------------------------------------------------------
        '   Déclarations et initialisations des variables locales
        ' ----------------------------------------------------------------------
        '
        '       Fichiers
        '
        Dim NomFichierEntree As String = _
                "D:\Mes documents" & _
                "Accidents.csv"
        Dim NomfichierSortie As String = _
                "D:\Mes documents" & _
                "DonneesLues.txt"
        '
        '       Stream
        '
        Dim sr As StreamReader = New StreamReader(NomFichierEntree)
        Dim sw As StreamWriter = New StreamWriter(NomfichierSortie)
        '
        '       Variables "scalaires"
        '
        Dim LigneLue As String = Nothing
        Dim MaChaine As String = Nothing
        Dim CompteurDElement As Integer = 0
        '
        '       Variable tableau
        '
        Dim TabCar() As String = Nothing
        '
        '   Boucle de parcours du fichier
        '
        Do While sr.EndOfStream = False
            '
            '
            '
            LigneLue = sr.ReadLine()
            '
            '
            '
            ReDim Preserve TabCar(CompteurDElement)
            '
            '
            '
            TabCar(CompteurDElement) = LigneLue
            '
            '
            '
            CompteurDElement += 1
            '
        Loop
        '
        '   Ecriture des éléments contenus dans TabCar
        '   dans le fichier de sorti.
        '
        For i As Integer = 0 To TabCar.GetUpperBound(0)
            sw.WriteLine(TabCar(i))
        Next i
        '
        '   Fermeture des fichiers ouverts
        '
        sr.Close()
        sw.Close()
        '
        '----------------------------------------------------------------------
        '   Fin du sous-programme
        '----------------------------------------------------------------------
        '
    End Sub

End Module
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
20 mars 2009 à 21:46
Dsl, je n'ai pas trop le temps de t'expliquer le code que je donne, mais je t'invite à consulter l'aide pour le comprendre.

La première ligne est à mon avis, à ignorer car il semble qu'elle soit la ligne des entetes de colonnes. Elle ne contient donc pas de données en soi, si ce n'est l'année à laquelle correspond les données en dessous

        Public TabCode As String() = {}

        Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click
                Dim sr As New System.IO.StreamReader("C:\temp\classeur1.csv")

                'Ignore la
première ligne
                sr.ReadLine()

                Do While sr.EndOfStream = False
                        ReDim Preserve TabCode(TabCode.GetLength(0))
                        TabCode(TabCode.GetLength(0) - 1) =
sr.ReadLine()
                Loop

                For i As Integer = 0 To TabCode.GetUpperBound(0)
                        ComboBox1.Items.Add((TabCode(i).Split(";"c))(0))
                Next
                ComboBox1.SelectedIndex = 0
        End Sub

        Private Sub ComboBox1_SelectedIndexChanged(ByVal
sender As System.Object, ByVal e As System.EventArgs) Handles
ComboBox1.SelectedIndexChanged
                Dim i As Integer = ComboBox1.SelectedIndex
                TextBox1.Text = (TabCode(i).Split(";"c))(1)
                TextBox2.Text = (TabCode(i).Split(";"c))(2)
                TextBox3.Text = (TabCode(i).Split(";"c))(3)

        End Sub

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
troxsa Messages postés 553 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 2 octobre 2016 1
20 mars 2009 à 21:54
Bonjour,

Effectivement, le code fais la lecture puis écrit dans un texte ...
ReDim n'est plus utiliser dans le dot net il est su moins encore supporter mais chiant a utiliser (pardon pour le mot chiant)
Le module dans l'état ou il est sers a rien, enfin si, juste a lire le fichier CSV puis le mettre dans un texte.

Pour ce qui concerne le petit bout de code que j'ai donné il est possible qu'avec une version de visual studio moins recente a 2008 cela ne fonctionne pas !
il faudra changé "lecdonnées.Count" par "UBound(tdonnée)"
Je viens de faire le test avec le code que j'ai donné plus, cela fonctionne sans aucun probleme
je vais le redonner encore une fois dans son intégralité

____________________________________________________
Imports System.IO
____________________________________________________
Public Class Form1
    Private tdonnée As New ArrayList
____________________________________________________

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

        For i As Integer = 0 To tdonnée.Count - 1
            If tdonnée.Item(i).ToString.IndexOf(ComboBox1.Text) >= 0 Then
                Dim lecdonnées() As String = tdonnée.Item(i).ToString.Split(";")
                For j As Integer = 1 To lecdonnées.Count - 1 'lecture des donnée qui correspond au pays
                    MsgBox(lecdonnées(j)) 'lecture des données une par une
                Next
            End If
        Next
    End Sub
____________________________________________________
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim f As New StreamReader("monfichier.csv")

        Do Until f.Peek = -1 'Lecture du fichier ligne par ligne
            Dim MaLigne As String = f.ReadLine
            If MaLigne = "" Then
                Continue Do
            Else
                Dim sourcecsv() As String = MaLigne.Split(";")
                ComboBox1.Items.Add(sourcecsv(0)) ' on ajoute tout les pays dans la combo
                tdonnée.Add(MaLigne) ' on stock toute les donner lu dans un tableau général
            End If

        Loop
    End Sub
End Class
____________________________________________________

Cordialement,
0
romanosky35 Messages postés 50 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 23 juin 2011
21 mars 2009 à 12:04
MERCI BEAUCOUP POUR CES 2 REPONSES !!!
Je vais tester tout ça rapidement...
A plus tard.
Et MERCI encore :)
0
romanosky35 Messages postés 50 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 23 juin 2011
21 mars 2009 à 12:27
Alors.. j'ai testé la réponse de casy, ça fonctionne à merveille !
Pour ta réponse TroXsa, [../auteur/TROXSA/18536.aspx ] désolé, j'ai encore des erreurs..

Néanmoins j'ai à peu près compris comment fonctionne vos 2 solutions, donc à un grand merci à vous 2 !!!!

Il se peut.. il y a même de grandes chances, pour que je vous sollicite à nouveau d'ici à quelques jours pour l'utilisation de mes données...
Je dois voir avec mon "équipe ; on va probablement utiliser les données pour faire des graphiques avec ChartDirector. Mais on nous a également parler de l'utilisation d'un Datagrid, dans lequel on affichera les données du csv, etc...

Bref ! Tout ça est encore flou. En tous cas, encore merci à vous 2.

Romain.
0
troxsa Messages postés 553 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 2 octobre 2016 1
22 mars 2009 à 20:15
Bonjour,

Ya pas de quoi :) mais j'aimerais comprendre ou est l'erreur avec le code que je tes donnée ?
Tu as quelle version de VB ?

Cordialement,
0
romanosky35 Messages postés 50 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 23 juin 2011
22 mars 2009 à 21:03
Bonsoir,

J'utilise Visual Basic 2005 Express Edition.
C'est courageux d'effectuer ce boulot en plus !
Et cela me servira aussi j'imagine.

Donc merci !
0
troxsa Messages postés 553 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 2 octobre 2016 1
23 mars 2009 à 09:24
Bonjour romanosky35,

A l'ocaz pourrais tu essayer avec la version 2008 Express ?
Il me semble que la version utiliser y fais beaucoup, il y a beaucoup plus de fonctionnalité et d'amélioration dans 2008 que dans 2005

Merci

Cordialement,
0
romanosky35 Messages postés 50 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 23 juin 2011
23 mars 2009 à 15:31
Et bien je l'avais installée sur mon ordinateur mais.. va savoir pourquoi, cela est "entré en conflit" avec plusieurs logiciels dont internet explorer, ou bien la msie en veille de l'ordi aussi...
On me demandait toujours s'il fallait déboguer je ne sais quoi... (alors que VB n'était même pas lancé...)
J'ai préféré revenir au 2005... pour le moment.

Voilà :)
0
troxsa Messages postés 553 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 2 octobre 2016 1
23 mars 2009 à 15:39
Bonjour,

ok, merci pour les informations :)
je pense que c'est un problème de version simplement, maintenant que je sais que tu travail en 2005 je ferais attention au code que je te donnerais :)
mais précise le a chaque fois que tu met un nouveau message

A bientot

Cordialement,
0
romanosky35 Messages postés 50 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 23 juin 2011
23 mars 2009 à 15:46
Oui c'est vrai j'y avais pensé ! Mais je me suis dit que la catégorie "VB.net et VB 2005" du forum suffirait !

J'y penserai ;)

A bientôt
0
troxsa Messages postés 553 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 2 octobre 2016 1
23 mars 2009 à 16:36
oui mais vb .net est aussi VB 2008 :)
0
Rejoignez-nous