|
begin process at 2008 07 06 18:32:28
Derniers logiciels
|
Trouver une ressource (Nouvelle version du moteur, plus rapide & pertinent, essayez le !)
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
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
Historique
- 02 février 2008 02:38:54 :
- Première diffusion 02/02/08
Sources de la même categorie
Commentaires
Discussions en rapport avec ce code source
|
CalendriCode
| | | L | M | M | J | V | S | D |
| | 1 | 2 | 3 | 4 | 5 | 6 |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 | | | |
|
Téléchargements
Logiciels à télécharger sur le même thème :
|
|