Soyez le premier à donner votre avis sur cette source.
Vue 11 404 fois - Téléchargée 709 fois
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
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...
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.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.