|
Trouver une ressource
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 !
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
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
scinder des cellules excel [ par lebleu ]
j'ai un fichier ckient dans lequel j'ai besoin de scinder la colonne titre+nom+prenom en une colonne titre, une colonne nom et une colonne prenom...je
tester si colonne d'un classeur Excel est vide [ par J-F ]
Bonjour, Quelqu'un sait-il comment tester si la colonne d'un classeur Excel est vide?Merci,J-F
sélection de deux plages d'une même colonne dans Excel [ par J-F ]
Bonjour,Je dois créer une fonction pour calculer une autocorrélation à partir d'une colonne Excel. Pour ce faire, je dois sélectionner un range avec l
copie d'une colonne d'un fichier excel a un autre. [ par gsu ]
Comment faire pour ouvrir un fichier excel du meme nom que celui actif (date de l'enregistrement via une inputbox),copier une colonne et la coller dan
importer une colonne excel dans une listbox [ par Patou ]
Bonjour je suis totalement novice avec vb, et mon premier problème (déjà) est d'insérer une série de nombre dans une listbox. Merci de vos réponses.
Importation d'un fichier Excel sous access avec VBA [ par Cassidy ]
OK, je sais utiliser l'assistant d'importation de feuilles de calcul, mais ce que je voudrais c'est pouvoir faire la même chose en vba.Au pire, je sai
Pro en Excel :P [ par stage ]
Bon voici le probleme !Au départ, j'ai un fichier au format .txt que je dois ouvrir avec excel. Je veux ouvrir ce fichier texte la en lui mettant des
Remplacer dans une colonne Excel [ par stage ]
A partir de vb, comment on fait pour remplacer dans une colonne Excel.Exemple:de C5:C200je veux remplacer les x par des o
Comment creer un tableau excel qui m'aficherai les vendredi dans 1 colonne [ par Baboune ]
Salut, je suis débutant en VBA.J'aimerai créer un tableau sous Excel dans lequel la première colonne afficherai tous les vendredi d'une période donnée
Excel : [ par seb ]
Bonjour et merci à ceux qui m'ont répondu la dernière fois ! J'ai un petit problème à vous soummettre, toujours avec Excel ( ah, toujours les chiffr
|
Téléchargements
Logiciels à télécharger sur le même thème :
|