Bonjour,
Je suis nouveau sur developpez.com, et malgré mes recherches je n'ai pas trouvé de réponse à mon problème.
Dans mon code, je lis un fichier csv pour en récupérer les valeurs et ensuite tracer les courbes en fonction de ces points.
La première colonne du fichier correspond à l'axe des temps et les colonnes suivantes aux valeurs à tracer en fonction du temps.
Dans un premier temps, j'ai essayé de récupérer les 2 premières colonnes pour essayer de tracer une courbe via ZedGraph.
Cependant le tableau contenant les valeurs de la courbes me renvoie une erreurlorsque la lecture arrive après la dernière mesure.L'index se trouve en dehors des limites du tableau.
Le fichier contient 1197 valeurs, sans compter les 4 premières lignes du fichier qui contiennent l'entête dont je ne m'occupe pas pour le moment (d'où les 4 lectures "à vide" avant le traitement). Après les mesures, le fichier contient 2 lignes vides puis une ligne contenant sa date de création (dont je ne m'occupe pas non plus pour le moment).
Ce fichier est généré sur demande par une application de mesures extérieur, je ne peux donc pas modifier sa mise en page.
Les séparateur sont anglophones (',' pour séparer les valeurs et '.' pour séparer les décimales).
Pour visualiser les valeurs enregistrées, j'ai crée 3 listbox dans lesquels j'affiche les tableaux contenant les mesures.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 string[] Tligne; // tableau qui va contenir les sous-chaines extraites d'une ligne. double[] mesures=new double[1200]; double[] temps = new double[1200]; int j = 0; if (File.Exists(file)) { StreamReader line = new StreamReader(file); string ligne = line.ReadLine(); for (int i = 0; i < 3; i++) ligne = line.ReadLine(); do { ligne = line.ReadLine(); readCSV.Items.Add(ligne); Tligne = ligne.Split(','); // Choix du séparateur décimal CultureInfo culture; if (Tligne[0].Contains(".")) { // Utilisation de InvariantCulture si présence du . comme séparateur décimal. culture = CultureInfo.InvariantCulture; } else { // Utilisation de CurrentCulture sinon (utilisation de , comme séparateur décimal). culture = CultureInfo.CurrentCulture; } // Conversion de la chaîne en double, en utilisant la culture correspondante. double.TryParse(Tligne[0], NumberStyles.Number, culture, out temps[j]); // L'exception est levé ici lorsque j = 1197 double.TryParse(Tligne[1], NumberStyles.Number, culture, out mesures[j]); for (int i = 0; i < Tligne.Length; i++) { splitCSV.Items.Add(Tligne[i]); } testTab.Items.Add(temps[j]); j++; }while(ligne != null);
Je pensais que le problème était du au fait que Tligne contienne une valeur nulle à j = 1197, j'ai donc posé une condition pour vérifier cela mais l'exception persiste.
Je pense que c'est un problème avec les valeurs d'entrées du moins je ne vois que ca.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 if(Tligne != null) { // Conversion de la chaîne en double, en utilisant la culture correspondante. double.TryParse(Tligne[0], NumberStyles.Number, culture, out temps[j]); // L'exception est encore levé ici lorsque j = 1197 double.TryParse(Tligne[1], NumberStyles.Number, culture, out mesures[j]); }
Si vous avez une idée, je suis preneur.
Merci d'avance.
Partager