begin process at 2008 07 06 18:32:28
1 205 717 membres
280 nouveaux aujourd'hui
14 119 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

FONCTION QUI PERMET DE LIRE UN CHAMP DANS UN CSV EN FONCTION DE SA LIGNE ET DE SA COLONNE.


Information sur la source

Catégorie :VB.NET Source .NET ( DotNet ) Classé sous : CSV, Lire, colonnes, lignes, champ Niveau : Débutant Date de création : 02/02/2008 Date de mise à jour : 02/02/2008 02:38:54 Vu / téléchargé: 5 108 / 256

Note :
6 / 10 - par 1 personne
6,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

Description

Ce bout de code est une fonction qui permet de lire un champ dans un CSV en fonction de sa ligne et de sa colonne.
voici la forme de la fonction : (ByVal Fichier As String, ByVal Séparateur As String, ByVal Ligne As Integer, ByVal Colonne As Integer)

Pourquoi avoir fait cette fonction ?
Car je suis automaticien de formation et pour un prjet avec un automate type S7-300 connecté a un afficheur type TP277 lui meme connecté a un PC bref ... mon afficheur m'archive des variables et autres alarmes sur le PC sous forme de fichiers *.CSV donc pour faire une application conviviale avec l'utilisateur j'ai utilisé cette fonction pour aller chercher certaines données et les afficher pour consultation...

Enfin je pense que cette fonction peut etre utilisée pour des applications quelconque, tant que les fichiers sont de type texte avec séparateur.

Pour finir en cherchant un peu je n'ai pas trouvé d'equivalent, j'ai trouvé des sources qui importé une colonne complete d'un CSV dans une richbox, mais pas pratique pour récupérer la donnée... il est important de dire aussi que c'est ma première source alors j'aimerais des commentaire constructif pour m'aider a améliorer cette chose ...Voila Merci d'avance ...

(j'ai mis un fichier CSV dans le zip ... ce sera plus simple pour tester)

Source

  • Imports System.IO
  • Public Class Form1
  • Dim cptlignes As Integer
  • Dim cptcolonnes As Integer
  • Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  • End Sub
  • Function Read_CSV(ByVal Fichier As String, ByVal Séparateur As String, ByVal Ligne As Integer, ByVal Colonne As Integer) As String
  • '-------------------------------------------------------------------------------
  • ' Fonction Read_CSV s'utilise avec une listbox nommée readCSV avec un propriété visible=false crée par vos soins
  • ' ex: Var IHM.Recette_hmi.timeofday;01/01/1990
  • ' Cette fonction reçoit un argument Séparateur de type string (Séparateur : , ; )...
  • ' Cette fonction reçoit un argument Ligne de type integer (qui correspond a la Ligne lu)... "Attention la première ligne est la ligne 0 et non pas la ligne 1" (prefere laisser comme ca car ca me parrait plus logique de commencer a 0)
  • ' Cette fonction reçoit un argument Colonne de type integer (qui correspond a la Colonne lu)... "Attention la première colonne est la colonne 0 et non pas la colonne 1"
  • ' Elle renvoie String qui est la chaine située entre 2 séparateurs
  • '-------------------------------------------------------------------------------
  • 'Chargement du CSV dans la listbox nommée readCSV
  • Dim Valeur As String = ""
  • Dim cptlignes As Integer
  • Dim cptcolonnes As Integer
  • Try
  • Dim Reader As New StreamReader(Fichier)
  • Dim Reader_line As String
  • Do
  • Reader_line = Reader.ReadLine 'Reader.ReadLine la ligne exemple toto;coucou;56;plop
  • readCSV.Items.Add(Reader_line) 'et on boucle pour ajouter a la listbox les ligne une/une
  • cptlignes = cptlignes + 1
  • Loop Until Reader_line Is Nothing
  • Reader.Close()
  • Catch ex As System.IO.IOException
  • MsgBox("Erreur d'ouverture du fichier", MsgBoxStyle.OkOnly)
  • GoTo fin
  • Catch ex As Exception 'cette exception permet d'éviter une erreur du type "La valeur ne peut pas être null. Nom du paramètre : item" a l'initialisation
  • End Try
  • 'Chargement de la ligne choisie dans ListboxLine
  • Dim ListboxLine As String
  • Try
  • ListboxLine = readCSV.Items(Ligne).ToString
  • readCSV.Items.Clear()
  • 'Recherche de la positon des séparateurs, les valeurs sont stockées dans la listbox readCSV de façon chronologiques
  • Dim Recherche As String
  • Dim Position As Integer
  • Recherche = Séparateur
  • readCSV.Items.Add("0") 'Pour permettre de venir chercher plus tard la colonne 0
  • Position = InStr(ListboxLine, Recherche)
  • readCSV.Items.Add(Position)
  • Do
  • Position = InStr(Position + 1, ListboxLine, Recherche) 'recherche dans une chaine fonction "Instr (position de départ, chaine ou l'on cherche, la chaine recherchée)"
  • cptcolonnes = cptcolonnes + 1
  • readCSV.Items.Add(Position) 'a chaque séparateur trouvé on vient l'ajouter en tant qu'item dans la list box
  • Loop While Position > 1
  • Catch ex As Exception 'cette exception permet d'éviter une erreur du type "La valeur ne peut pas être null. Nom du paramètre : item" a l'initialisation
  • MsgBox("Numéro de colonne ou de ligne invalide." & vbCr & "Pour information:" & vbCr & "Le fichier ne possède que " & cptlignes & " ligne(s).", MsgBoxStyle.OkOnly)
  • GoTo fin
  • End Try
  • 'Détermine les limites en fonction du choix Colonne
  • Try
  • Dim Left As Integer
  • Dim right As Integer
  • Dim ListboxLineLength As Integer = ListboxLine.Length
  • Left = readCSV.Items(Colonne)
  • right = readCSV.Items(Colonne + 1)
  • 'J'ai distingué 3 cas possibles 1er cas left=0 première colonne, 2eme cas left et right différent de 0, 3eme cas right=0 dernière colonne
  • If Left = 0 Then
  • Valeur = Mid(ListboxLine, 1, right - 1)
  • ElseIf right = 0 Then
  • Valeur = Mid(ListboxLine, Left + 1, ListboxLineLength - Left + 1)
  • Else
  • right = right - Left
  • Valeur = Mid(ListboxLine, Left + 1, right - 1)
  • End If
  • Catch ex As Exception 'cette exception permet d'éviter une erreur du type "La valeur ne peut pas être null. Nom du paramètre : item" a l'initialisation
  • MsgBox("Numéro de colonne ou de ligne invalide." & vbCr & "Pour information:" & vbCr & "Le fichier ne possède que " & cptlignes & " ligne(s)." & vbCr & "Le fichier ne possède que " & cptcolonnes & " colonne(s).", MsgBoxStyle.OkOnly)
  • End Try
  • 'Petite comparaison un peu inutile ...
  • If Valeur = "" Then
  • Valeur = "Champ vide"
  • End If
  • readCSV.Items.Clear()
  • 'ici possibilité de répuérer la valeurs des 2 compteurs
  • Label9.Text = cptlignes
  • Label10.Text = cptcolonnes
  • Return Valeur
  • fin:
  • End Function
  • Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  • ' On Error GoTo err
  • TextBox5.Text = Read_CSV(CStr(TextBox1.Text), CStr(TextBox4.Text), CInt(TextBox2.Text), CInt(TextBox3.Text))
  • 'TextBox5.Text = Read_CSV("C:\Archive_Excel\Recette--------.csv", ";", 0, 0)
  • 'err:
  • ' MsgBox("Erreur de syntaxe dans la déclaration de la fonction")
  • End Sub
  • Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
  • GroupBox1.Text = TextBox1.Text
  • End Sub
  • End Class
Imports System.IO

Public Class Form1
    Dim cptlignes As Integer
    Dim cptcolonnes As Integer
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


    End Sub

    Function Read_CSV(ByVal Fichier As String, ByVal Séparateur As String, ByVal Ligne As Integer, ByVal Colonne As Integer) As String
        '-------------------------------------------------------------------------------
        ' Fonction Read_CSV s'utilise avec une listbox nommée readCSV avec un propriété visible=false crée par vos soins
        ' ex: Var IHM.Recette_hmi.timeofday;01/01/1990
        ' Cette fonction reçoit un argument Séparateur de type string (Séparateur : , ; )...
        ' Cette fonction reçoit un argument Ligne de type integer (qui correspond a la Ligne lu)... "Attention la première ligne est la ligne 0 et non pas la ligne 1" (prefere laisser comme ca car ca me parrait plus logique de commencer a 0)
        ' Cette fonction reçoit un argument Colonne de type integer (qui correspond a la Colonne lu)... "Attention la première colonne est la colonne 0 et non pas la colonne 1"
        ' Elle renvoie String qui est la chaine située entre 2 séparateurs
        '-------------------------------------------------------------------------------

        'Chargement du CSV dans la listbox nommée readCSV
        Dim Valeur As String = ""
        Dim cptlignes As Integer
        Dim cptcolonnes As Integer

        Try

            Dim Reader As New StreamReader(Fichier)
            Dim Reader_line As String
            Do
                Reader_line = Reader.ReadLine 'Reader.ReadLine la ligne exemple toto;coucou;56;plop
                readCSV.Items.Add(Reader_line) 'et on boucle pour ajouter a la listbox les ligne une/une
                cptlignes = cptlignes + 1

            Loop Until Reader_line Is Nothing
            Reader.Close()

        Catch ex As System.IO.IOException
            MsgBox("Erreur d'ouverture du fichier", MsgBoxStyle.OkOnly)
            GoTo fin
        Catch ex As Exception 'cette exception permet d'éviter une erreur du type "La valeur ne peut pas être null. Nom du paramètre : item" a l'initialisation
        End Try

        'Chargement de la ligne choisie dans ListboxLine

        Dim ListboxLine As String
        Try
            ListboxLine = readCSV.Items(Ligne).ToString
            readCSV.Items.Clear()

            'Recherche de la positon des séparateurs, les valeurs sont stockées dans la listbox readCSV de façon chronologiques
            Dim Recherche As String
            Dim Position As Integer

            Recherche = Séparateur
            readCSV.Items.Add("0") 'Pour permettre de venir chercher plus tard la colonne 0
            Position = InStr(ListboxLine, Recherche)
            readCSV.Items.Add(Position)

            Do
                Position = InStr(Position + 1, ListboxLine, Recherche) 'recherche dans une chaine fonction "Instr (position de départ, chaine ou l'on cherche, la chaine recherchée)"
                cptcolonnes = cptcolonnes + 1
                readCSV.Items.Add(Position) 'a chaque séparateur trouvé on vient l'ajouter en tant qu'item dans la list box
            Loop While Position > 1

        Catch ex As Exception 'cette exception permet d'éviter une erreur du type "La valeur ne peut pas être null. Nom du paramètre : item" a l'initialisation
            MsgBox("Numéro de colonne ou de ligne invalide." & vbCr & "Pour information:" & vbCr & "Le fichier ne possède que " & cptlignes & " ligne(s).", MsgBoxStyle.OkOnly)
            GoTo fin
        End Try

        'Détermine les limites en fonction du choix Colonne

        Try
            Dim Left As Integer
            Dim right As Integer
            Dim ListboxLineLength As Integer = ListboxLine.Length

            Left = readCSV.Items(Colonne)
            right = readCSV.Items(Colonne + 1)

            'J'ai distingué 3 cas possibles 1er cas left=0 première colonne, 2eme cas left et right différent de 0, 3eme cas right=0 dernière colonne 
            If Left = 0 Then
                Valeur = Mid(ListboxLine, 1, right - 1)
            ElseIf right = 0 Then
                Valeur = Mid(ListboxLine, Left + 1, ListboxLineLength - Left + 1)
            Else
                right = right - Left
                Valeur = Mid(ListboxLine, Left + 1, right - 1)
            End If

        Catch ex As Exception 'cette exception permet d'éviter une erreur du type "La valeur ne peut pas être null. Nom du paramètre : item" a l'initialisation
            MsgBox("Numéro de colonne ou de ligne invalide." & vbCr & "Pour information:" & vbCr & "Le fichier ne possède que " & cptlignes & " ligne(s)." & vbCr & "Le fichier ne possède que " & cptcolonnes & " colonne(s).", MsgBoxStyle.OkOnly)
        End Try

        'Petite comparaison un peu inutile ...
        If Valeur = "" Then
            Valeur = "Champ vide"
        End If
        readCSV.Items.Clear()

        'ici possibilité de répuérer la valeurs des 2 compteurs
        Label9.Text = cptlignes
        Label10.Text = cptcolonnes


        Return Valeur

fin:
    End Function


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        ' On Error GoTo err
        TextBox5.Text = Read_CSV(CStr(TextBox1.Text), CStr(TextBox4.Text), CInt(TextBox2.Text), CInt(TextBox3.Text))

        'TextBox5.Text = Read_CSV("C:\Archive_Excel\Recette--------.csv", ";", 0, 0)
        'err:
        '  MsgBox("Erreur de syntaxe dans la déclaration de la fonction")
        

    End Sub

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        GroupBox1.Text = TextBox1.Text
    End Sub

End Class
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

02 février 2008 02:38:54 :
Première diffusion 02/02/08
  • signaler à un administrateur
    Commentaire de JACKY007 le 04/02/2008 09:02:45 6/10

    C'est bien compliqué pour une si petite chose...
    1er étape : lire le fichier.
    Conseil pour commenser, utilise les extraits de codes !!!
    Celui-ci nous donne :
    Dim fileContents As String
    fileContents = My.Computer.FileSystem.ReadAllText("C:\Test.txt")
    Ensuite on pointe sur la ligne :
    dim ligne As string = fileContents.split(separateurLigne)(Ligne)
    Généralement, separateurLigne=vbLf : tu peux le mettre dans la fonction en optionnal. Cela te permettra de l'utiliser plus tard pour d'autres choses

    Puis sur notre champ :
    dim champ As string = ligne.split(separateurColonne)(Colonne)
    return champ
    Fini !
    En 3 lignes (sans la gestion d'erreur) tu as le résultat...
    Pour ce qui est de du nombre de lignes et de colonnes tu peux rajouter des UBound sur les tableaux (il te faudra 2 lignes de plus!)
    Dernier conseil : place ta fonction dans tes extraits de codes pour la réutiliser plus tard.
    Sinon ton code est propre, bien aéré et commenté.
    Bonne chance pour la suite.
    Respectueusement.

  • signaler à un administrateur
    Commentaire de Solenoyde le 04/02/2008 13:35:39

    Ah merci pour ce commentaire !

    C'est vrai que la fonction est un peut longue pour ce quelle fait hehe ...
    et cette petite ligne 'dim ligne As string = fileContents.split(separateurLigne)(Ligne) ma l'air bien sympa.

    Je vais donc essayer d'appliquer votre conseil et encore merci, car sans crtitiques on progresse pas beaucoup tout seul...

Ajouter un commentaire

Pub



Appels d'offres

WEB DESIGN
Budget : 1 000€
Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS