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é: 6 963 / 345

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

Cliquez pour voir la capture en taille normale
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

Fichier Zip

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

Historique

02 février 2008 02:38:54 :
Première diffusion 02/02/08

Commentaires et avis

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

Discussions en rapport avec ce code source dans le forum

Lire un fichier et écrire dans un texbox [ par Philippe ] Dans mon programme, j'ai un texbox où l'utilisateur peut saisir plusieurs lignes. Je n'ai pas de problème pour écdrire le contenu du texbox dans un fi dimensions colonnes dans une mshflexgrid [ par vroumm ] J'ai un fichier texte avec un certain nombre d' enregistrements et d'attributs (c'est à dire un table avec des lignes et des colonnes).Je lis ce fichi création d'un tableau avec lignes et colonnes infinies [ par kiki36 ] Est-il possible de créé un tableau avec MSFlexGrid qui possèderai des lignes et des colonnes infinies.Si oui comment fairemerci tableau à n lignes et n colonnes [ par SANFER ] ogp2comment créer un tableau à 2+n colonnes et n lignes?Si vous pouviez m'aider?! Merci Lire dernière lignes d'un gros fichier texte. [ par magnum42 ] Bonjour,Je cherche à lire les dernière lignes d'un fichier.OK, j'ai trouvé pleins de codes pour ca, mais je neveux pas devoir TOUT lire.Je cherche à l fichier .csv [ par gronon2 ] J'ai vu beaucoup de chose sur la facon de lire fichier .csvmais étant donné que je suis débutant j'ai beaucoup de difficulté à bien programmé ce que j Datagrid [ par imaggine ] Bonjour,Je voudrai que l'utilisateur ne puisse pas modifier la hauteur des lignes , ni la largeur des colonnes, dans un DataGrid.J'ai réussi à verroui Peut 'on lire les lignes de commandes d'un VB.exe [ par tom6500 ] Bonjour a tous.Un prof m'a coller un pti logiciel à faire et je vien juste de m'apercevoir qu'il m'a donner un exemple .Mais ce dernier est en point E EXCEL [ par sernams ] slt tt lmd, je suis un debutant en EXCEL et j'ai fichier EXCEL, dedans il 30 colonnes et environ 200ligne et en fait pour l'intersec des ligne et colo Inverser les lignes en colonnes [ par tnouar1 ] Applications Vb sallut tt le monde,j'ai un tableau excel (plage de données) que j'obtien apprtire des liaison d'autre feuilles,ma finalité e


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

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

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,406 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.