Accueil > > > LIRE UNE COLONNE DANS UN CSV (FUNCTION)
LIRE UNE COLONNE DANS UN CSV (FUNCTION)
Information sur la source
Description
Pouvoir lire une colonne en particulier dans un CSV. J'utilise beaucoup d'export CSV et rare sont les fois ou je réutilise la totalité du CSV, je lis par exemple un index produit, puis le resultat du test (ok/nok) je n'utilise pas les x autres colonnes (date, opérateur,...). Donc j'ai eu l'idée de faire une petite fonction "bricolée" pour faire cela. Cette fonction averti l'utilisateur si le fichier CSV n'existe pas ou si la colonne demandé n'existe pas. Possibilité aussi de ne pas traiter la premiére ligne si elle contient les titres des colonnes. Merci de donner vos avis sur les optimisations possible du code. salut
Source
- Public Function lire_colonne_CSV(ByVal fichier As String, ByVal séparateur As String, ByVal ligne_de_titre As Boolean, ByVal num_col As Integer) As String()
- Dim colonnes_de_la_ligne As String() ' tableau de champs à lire pour une ligne
- Dim index_ligne As Integer = 0 ' index de ligne en cours
- Dim monfichier_existe As Boolean = My.Computer.FileSystem.FileExists(fichier) ' variable binaire qui test la présence du fichier
- Dim valeurs_lus(0) As String 'status du traitement de la fonction
- 'defaut = 0 => OK, defaut =1 => fichier pas trouvé, defaut =2 => colonne pas trouvé
-
- If monfichier_existe Then
- ' obligé pour l'instant de faire un tour à vide du fichier pour dimensionner le tableau en fonction du nb de ligne
- Using lirecsv As New Microsoft.VisualBasic.FileIO.TextFieldParser(fichier)
- lirecsv.SetDelimiters(séparateur)
- While Not lirecsv.EndOfData 'tant que pas fin de fichier
- colonnes_de_la_ligne = lirecsv.ReadFields()
- index_ligne += 1 ' on compte le nombre de ligne
- 'vérification de la demande de lecture
- If num_col > colonnes_de_la_ligne.Length - 1 Then
- valeurs_lus(0) = "impossible de trouver la colonne"
- GoTo fin
- End If
- End While
- End Using
-
- 'nombre de lignes luent moins la derniére et la premiére si ligne de titre
- Dim a As Integer
- If ligne_de_titre Then a = 1 Else a = 0 ' suppression de la ligne de titre ou pas
- ReDim valeurs_lus(index_ligne - a) 'redimensionnement du tableau
- valeurs_lus(0) = "ok" 'status fonction OK
- 'raz de l'index ligne pour remplissage des valeurs
- index_ligne = 1
- Using lirecsv As New Microsoft.VisualBasic.FileIO.TextFieldParser(fichier)
- lirecsv.SetDelimiters(séparateur)
- While Not lirecsv.EndOfData 'tant que pas fin de fichier
- colonnes_de_la_ligne = lirecsv.ReadFields() ' on lit tous les champs de la ligne en cours
- 'élimine la premiére ligne si c'est la ligne des titres
- If Not ligne_de_titre Then ' au premier cycle on ne fait rien
- valeurs_lus(index_ligne) = (colonnes_de_la_ligne(num_col))
- index_ligne += 1
- End If
- ' mise à vrai lorsque la premiére ligne est passé
- ligne_de_titre = False
- End While
- ' transfert de la lecture
- Return valeurs_lus
- End Using
- Else
- valeurs_lus(0) = "impossible de trouver le fichier"
- End If
- fin:
- Return valeurs_lus
- End Function
Public Function lire_colonne_CSV(ByVal fichier As String, ByVal séparateur As String, ByVal ligne_de_titre As Boolean, ByVal num_col As Integer) As String()
Dim colonnes_de_la_ligne As String() ' tableau de champs à lire pour une ligne
Dim index_ligne As Integer = 0 ' index de ligne en cours
Dim monfichier_existe As Boolean = My.Computer.FileSystem.FileExists(fichier) ' variable binaire qui test la présence du fichier
Dim valeurs_lus(0) As String 'status du traitement de la fonction
'defaut = 0 => OK, defaut =1 => fichier pas trouvé, defaut =2 => colonne pas trouvé
If monfichier_existe Then
' obligé pour l'instant de faire un tour à vide du fichier pour dimensionner le tableau en fonction du nb de ligne
Using lirecsv As New Microsoft.VisualBasic.FileIO.TextFieldParser(fichier)
lirecsv.SetDelimiters(séparateur)
While Not lirecsv.EndOfData 'tant que pas fin de fichier
colonnes_de_la_ligne = lirecsv.ReadFields()
index_ligne += 1 ' on compte le nombre de ligne
'vérification de la demande de lecture
If num_col > colonnes_de_la_ligne.Length - 1 Then
valeurs_lus(0) = "impossible de trouver la colonne"
GoTo fin
End If
End While
End Using
'nombre de lignes luent moins la derniére et la premiére si ligne de titre
Dim a As Integer
If ligne_de_titre Then a = 1 Else a = 0 ' suppression de la ligne de titre ou pas
ReDim valeurs_lus(index_ligne - a) 'redimensionnement du tableau
valeurs_lus(0) = "ok" 'status fonction OK
'raz de l'index ligne pour remplissage des valeurs
index_ligne = 1
Using lirecsv As New Microsoft.VisualBasic.FileIO.TextFieldParser(fichier)
lirecsv.SetDelimiters(séparateur)
While Not lirecsv.EndOfData 'tant que pas fin de fichier
colonnes_de_la_ligne = lirecsv.ReadFields() ' on lit tous les champs de la ligne en cours
'élimine la premiére ligne si c'est la ligne des titres
If Not ligne_de_titre Then ' au premier cycle on ne fait rien
valeurs_lus(index_ligne) = (colonnes_de_la_ligne(num_col))
index_ligne += 1
End If
' mise à vrai lorsque la premiére ligne est passé
ligne_de_titre = False
End While
' transfert de la lecture
Return valeurs_lus
End Using
Else
valeurs_lus(0) = "impossible de trouver le fichier"
End If
fin:
Return valeurs_lus
End Function
Conclusion
' utilisation de la fonction Dim monfichier As String = Application.StartupPath & "\testsTOR.csv" 'chemin du fichier Dim resultat() As String
resultat = lire_colonne_CSV(monfichier, ";", False, 1) If resultat(0) = "ok" Then 'affichage des résultats si la colonne est bien rempli For a As Integer = 1 To resultat.Length - 1 RichTextBox1.Text += resultat(a) & vbCrLf Next Else : MsgBox(resultat(0)) End If
Historique
- 01 octobre 2007 09:32:44 :
- Rajout du traitement d'erreur par retour d'un code.
0 = OK
1 = pas trouvé fichier
2 = pas trouvé colonne
merci PCPT. Transfert sur Codyx ;)
- 02 octobre 2007 08:39:20 :
- correction suite à remarque de PCPT (integer dans un string).
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
[Catégorie modifiée VB6 --> VBA] excel Changer de colonne quand touche virgule pressé [ par sonataIII ]
Salut à tous Sur excel, je cherche à passer à la colonne de droite quand la touche virgule est relaché ? PS: je métrise pas vba merci d'avance.
[Catégorie modifiée .Net --> VBA] Tableau croisé dynamique - Excel [ par Adikt73 ]
Bonjour, J'ai une base de données (Excel 2003) sur laquelle figurent les colonnes ci-après: 1ère colonne: noms et prénoms des résidents 2ème colonne
parcourir colonne excel VBA [ par siham2010 ]
Bonjour, j'ai un userform où j'ai deux textbox pour entrer les date et un bouton test. quand je clique sur le bouton test, il faudrait qu'il m'affich
copier de excel vers txt [ par truebenja ]
Bonjour, Je tente depuis des jours de monter une macro sans succès J'aurais aimé pouvoir copier le contenu d'un tableau excel (qui ne contient qu'un
aide macro excel [ par komanvi ]
slt le forum bonne et heureuse annee a toussssssssssss je suis komanvi et je penche encore vers vous pour une aide en faite j'ai un colonne dans la q
VBA sur tableau word comme sur excel [ par jacky1002 ]
Bonjour à tous, certains me connaisse déjà car j'ai eu recours a vos connaissance il y a à poeu près un an lors d'un stage ou je voulais mettre en pl
Combobox sous excel [ par joybach ]
Bonjour, j'ai un petit soucis, Voila je suis vraiment débutant dans le VBA, et en fait, je voudrais créer une petite interface graphique avec 3 liste
[Catégorie modifiée VB6 -> VBA] Macro sous Excel [ par LWO ]
Bonjour à tous, Novice en VBA mais j'apprends vite. Je cherche un code pour alimenter les cellules d'une colonne par une valeur et ce autant de fois
Excel [ par Liro ]
bonjour à tous, J'ai une feuille avec une MFC (mise en forme confitionnelle) texte en rouge et en gras si différent de la colonne d'à côté. Je souhai
calcul sue excel [ par haykoula1984 ]
bonjour, je veux écrire un code qui suivant le contenu de la case de la 4 ème colonne(D) et la 5 ème colonne(E) : il fait le produit sur la même ligne
|
Derniers Blogs
PRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGEPRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGE par richardc
http://www.c2idotnet.com/articles/presentation-des-api-rest-de-windows-azure-lister-les-comptes-de-storage
Désolé pour "toto", mais c2i existait avant blogs.developpeur.org et c'est mon site "officiel" ;-) ...
Cliquez pour lire la suite de l'article par richardc [HTML5] SLIDES ET DéMOS : AUTOUR DU W3C , NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] SLIDES ET DéMOS : AUTOUR DU W3C , NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Très bonne après-midi passée lors cette conférence avec le W3C, organisée par L' Inria sur les nouveaux standards, ce Mardi 14 Février, on sent vraiment que çà bosse au W3C, et l'avenir est très très prometteur pour le HTML5, notamment ...
Cliquez pour lire la suite de l'article par Gio GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc
Forum
FONCTION EXCELFONCTION EXCEL par samanta26
Cliquez pour lire la suite par samanta26
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|