Lecteur de csv grace à zedgraph

Soyez le premier à donner votre avis sur cette source.

Vue 11 360 fois - Téléchargée 1 224 fois

Description

Projet "pro" pour lire un CSV et le retranscrire en courbe, façon excel avec TOUS les avantages de la DLL de ZEDGRAPH. Le projet consiste à faire l'acquisition de valeurs via RS232 et USB (K8055). Cela permet de mesurer le process de séchage d'une mousse dans un secheur. Le dataloggeur récupére les valeurs de température, d'hygrométrie, vitesse d'air et masse de la mouse par 4 port RS232, des évenements TOR sont eux récupérer par la carte VM110(K8055) de chez velleman. Je ne peux vous poster que la partie lecteur de courbe, mais cela est déja un bon tuto pour ceux qui veulent utiliser cette Dll, vous trouverez en plus :
-Lecture / écriture d'un config.ini
-Configuration des couleurs et activation des courbes par control dynamiques avec TAG
-Traduction en francais du menu contextuel de la DLL zedgraph
-Affichage des form en mode "FUN"
Voila ma contribution à ce trés bon site.
je joins un CSV pour l'exemple.
Dans le futur j'éssayerai de revoir les fonctions afficher/cacher car le case n'est pas trés beau.
Faire en sorte de pouvoir lire des CSV en automatique (quelques soit leur config, nb de courbes et autres)
cordialement @dn.

Conclusion :


Pas de bug connu si respect du config.ini livré dans le debug et dans le format supporté du CSV.
Avant j'utilisais les combo box de MM_Simohamed, mais par incompatibilité en deploy je l'ai réécris avec des BP simple. Mise à jour prochiane avec le bon travail de Mayzz (voir ici : http://www.vbfrance.com/codes/MM-CHECKBOX-NET_50750.aspx)
Voila si critique commentez !
cordialement @dn

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
Salut, une petite astuce qui simplifie la vie
pour remplir les courbes, je passe désormais par une méthode de ma classe "gestion de compte bancaire" Cls_compte
1- je déclare une structure :
Public Structure tableau_bilan
Public _valeur() As Double
Public _date() As Double 'converti en OADate
End Structure ' structure d'un tableau de bilan mensuel pour graphique

2-j'écris le code qui vas bien pour la remplir
'----------------------------------------------------------------------
' Function qui retourne le bilan crédit/débit par mois (_valeur,_date)
' ou le bilan d'un budget par mois (_valeur,_date)
'----------------------------------------------------------------------
Public Function bilan() As tableau_bilan If Me.lignes.Count 0 Then bilan Nothing : Exit Function

' récupére le nombre d'année total du compte pour définir le nombre de _valeur
Dim premiére_an As Integer = Me.lignes(Me.lignes.Count - 1).L_date.Year
Dim derniére_an As Integer = Date.Now.Year
Dim nombre_an As Integer = derniére_an - premiére_an

' déclare un nouveau type de tableau_bilan
Dim _Bilan As New tableau_bilan
ReDim _Bilan._valeur(12 * (nombre_an + 1)) '+1 car il y a forcément une année au minimun
ReDim _Bilan._date(12 * (nombre_an + 1))

'débute une boucle pour le nombre d'année trouvé
For années As Integer = 0 To nombre_an
'pour toutes les lignes de mon compte chargé (en marche arriére donc step -1)
For ligne As Integer = Me.lignes.Count To 1 Step -1
'si l'année correspond
If Me.lignes(ligne - 1).L_date.Year = premiére_an + années Then

'puis pour chaque mois de l'année en cours
For mois As Integer = 1 To 12
' si le mois correspond
If mois = Me.lignes(ligne - 1).L_date.Month Then
' ajoute la valeur en euro
_Bilan._valeur((mois - 1) + (années * 12)) += Me.lignes(ligne - 1).L_credit - Me.lignes(ligne - 1).L_debit
' ajoute la date au milieu du mois
_Bilan._date((mois - 1) + (années * 12)) = Convert.ToDateTime(Me.lignes(ligne - 1).L_date.Year & "/" & _
Me.lignes(ligne - 1).L_date.Month & "/15").ToOADate

End If
Next mois

End If
Next ligne
Next années
Return _Bilan
End Function

3- dans ma form de visu des courbes je n'ai plus qu'a écrire :
'calcul et ajoute les points aux batons 'crédit/débit'
Dim monBilan As Cls_compte.tableau_bilan = Mon_compte.bilan()
' Création des batons
Dim mesBarres As BarItem
' batons 'crédit/débit'
mesBarres = myPane.AddBar("", monBilan._date, monBilan._valeur, Color.Transparent) 'Couleur_forms)

c'est vachement plus lisible une fois fait ;)

bonne prog à tous.
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
Merci claudetom pour ta participation. Cordialement ADN
Messages postés
115
Date d'inscription
jeudi 11 octobre 2001
Statut
Membre
Dernière intervention
15 octobre 2012

J'ai testé ce programme mais impossible de lire le CSV (format incompatible)
Solution à cause des options régional :
Ajout :
Dans load_courbes
Dim SeparateurDécimal As String = NumberFormatInfo.CurrentInfo.NumberDecimalSeparator
Pour chaque valeur qui est converti en double :
CDbl(valeur.Replace(",", SeparateurDécimal).Replace(".", SeparateurDécimal))

Après cela chargement OK
Bonne source
Messages postés
51
Date d'inscription
jeudi 2 juin 2011
Statut
Membre
Dernière intervention
1 août 2012

Maintenant il faut que j'impémente la partie des axes. Et désolé si c'est un peu codé en mode spaghetti, j'en apprends tout les jours sur ce VB.NET! Je suis donc ouvert à tous conseils permettant de m'améliorer.
Merci
Messages postés
51
Date d'inscription
jeudi 2 juin 2011
Statut
Membre
Dernière intervention
1 août 2012

La fonction pour créer les courbes:

Public Curve(100) As LineItem
Public DataPointsList As PointPairList

#Region "Creating of the curves versus time"
Public Sub CreateCurvesVsTime(ByVal zgc As ZedGraphControl)
Dim myPane As GraphPane = zgc.GraphPane
Dim yAxisData As String
Dim xAxisData(UBound(Analysis_windows.CSV1_Data) - 4) As Double
Dim OldxAxisData As New Double
Dim Difference As New Double
Dim Offset As New Double
Dim i, j As Double
Dim lst As New List(Of PointPairList)

' Reading of first value of time channel in order to define the offset
Offset = Val(Analysis_windows.CSV1_Data(3, 74))

' Reading of the time channel for X axis
For j = 2 To UBound(Analysis_windows.CSV1_Data) - 3
' Reading of new value of xAxisData
xAxisData(j - 2) = Val(Analysis_windows.CSV1_Data(j, 74)) - Offset
' Checking of difference between new and old value of time data in order to
' detect and remove the jumps of time (due to GPS accuracy)
Difference = xAxisData(j - 2) - OldxAxisData
If j <> 2 And Difference > 0.2 Then
Offset = Offset + Difference
xAxisData(j - 2) = Val(Analysis_windows.CSV1_Data(j, 74)) - Offset
End If
' Reading of old value of xAxisData
OldxAxisData = xAxisData(j - 2)
Next

' Reading of the channels data and saving in lists of points
For i = 0 To 99
DataPointsList = New PointPairList
For j = 2 To UBound(Analysis_windows.CSV1_Data) - 3
' Reading of y axis data
yAxisData = Analysis_windows.CSV1_Data(j, i)
If yAxisData = "" Then
DataPointsList.Add(xAxisData(j - 2), 0)
Else
DataPointsList.Add(xAxisData(j - 2), Val(yAxisData))
End If
Next
' Creating of curves
lst.Add(DataPointsList)
Curve(i) = myPane.AddCurve(Analysis_windows.CSV1_Data(0, i), lst(i), Analysis_windows.color(i), SymbolType.None)
Curve(i).IsVisible = False
Curve(i).Label.IsVisible = False
zgc.GraphPane.XAxis.Scale.Min = 0
zgc.GraphPane.XAxis.Scale.Max = xAxisData(UBound(xAxisData) - 1)
zgc.AxisChange()
zgc.Refresh()
Next
End Sub
#End Region
Afficher les 45 commentaires

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.