bobbybaker
Messages postés3Date d'inscriptiondimanche 4 novembre 2007StatutMembreDernière intervention20 octobre 2008
-
20 oct. 2008 à 09:25
gillardg
Messages postés3275Date d'inscriptionjeudi 3 avril 2008StatutMembreDernière intervention14 septembre 2014
-
20 oct. 2008 à 12:56
Salut à tous,
je débute sur VB.NET et j'ai bientôt terminé mon application et il ne me reste plus qu'a programmer l'écriture ( et la lecture ) de mes données ( dont beaucoup de tableaux ) dans divers fichiers *.txt.
J'ai pourtant lu un paquet de trucs sur les streamwriter et streamreader, ( et dailleur merci aux personnes ayant proposé des sources sur le sujet ), et j'arrive donc à enregistrer des variables simples dans un fichier.
Mais maintenant mon soucis se pose sur les tableaux... j'utilise des boucles for pour les enregistrer et pour les lire,
Voici mon code :
Dim nombre_max As Integer = 5
Dim montableau(nombre_max) As Integer
Public Sub Save()
Dim SW As StreamWriter = File.CreateText("data\monfichier.txt")
SW.WriteLine(nombre_max)
For i = 0 To (nombre_max - 1)
SW.WriteLine(monTableau(i))
Next
SW.Close()
End Sub
'
' Ici j'ai bien les valeurs 5 0 0 0 0 0 écrites dans monfichier.txt
'
Public Sub Read()
Dim SR As StreamReader = File.OpenText("data\monfichier.txt")
nombre_max = SR.ReadLine()
For i = 0 To (nombre_max - 1)
monTableau(i) = SR.ReadLine()
Next
SR.Close()
End Sub
'
' A la lecture des valeurs 5 0 0 0 0 0 dans monfichier.txt
' la boucle for arrive à traiter montableau(i=0)
' mais à partir de montableau(i=1) la lecture se bloque
' à ce niveau 5 0 * * * * et j'ai une erreur :
' "L'exception IndexOutOfRangeException n'a pas été gérée
' L'index se trouve en dehors des limites du tableau."
'
La variable nombre_max se lit sans aucun soucis, en revanche ma variable monTableau() bug à la lecture... Pouvez-vous m'éclairer dans mon erreur afin de trouver une solution le + rapidement possible ?
Merci aux personnes qui liront mon code ;)
Bye
bobbybaker
Messages postés3Date d'inscriptiondimanche 4 novembre 2007StatutMembreDernière intervention20 octobre 2008 20 oct. 2008 à 09:55
Salut jrivet, merci de ta réponse.
A vrai dire dans mon projet je n'assigne pas de 5 à ma variable nombre_max , là j'ai rajouté le 5 pour qu'on comprenne d'ou vient les 0 0 0 0 0 écrits dans monfichier.txt
Dans mon projet je déclare :
Public nombre_max As Integer
' dans un module 1
Public montableau(nombre_max) As Integer
' dans un module 2
Public Sub Read()
' dans un module 3
A ton observation :
nombre_max est une constante avec cette déclaration
Dim nombre_max As Integer = 5
Il semble donc inutile de la relire dans la procédure Read.
>>> nombre_max est bien une variable... ( je m'excuse pour le = 5 maladroit qui déforme la réalité : pardon )
A ton observation :
NOTE: Dim montableau(nombre_max) As Integer
Est un tableau à 6 éléments. pourquoi ne travailler qu'avec 5???
>>> nombre_max est une variable de compteur et elle compte de manière standard ( elle compte en commencant par 1 et non par 0 ) Dans la réalité il a 5 éléments physique mais dans VB le dernier élément de mon tableau est monTableau((nombre_max 5) - 1 4 )
Merci pour ta réponse julien, ce qui me rassure c'est qu'à priori mon code fonctionne bien chez toi... mais pourquoi me sort-il cette erreur d'index a partir de la lecture du second élément du tableau ?
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 20 oct. 2008 à 10:09
Salut,
NON non , dans une déclaration
Dim montableau(nombre_max) As Integer ou nombre_max vaut 5 ton tableau possède 6 éléments Dim montableau(0 TO nombre_max) As Integer
@+: Ju£i€n Pensez: Réponse acceptée
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 20 oct. 2008 à 11:24
Salut,
Ah bah la si nombre_max n'est pas une constante je me retrouve bien avec la meme erreur
Il faut que tu redimensionnes ton tableau
Public Sub Read()
Dim SR As StreamReader = File.OpenText("C:\monfichier.txt")
nombre_max = SR.ReadLine()
Array.Resize(montableau, nombre_max)
For i = 0 To (nombre_max - 1)
monTableau(i) = SR.ReadLine()
Next
SR.Close()
End Sub<hr />, ----
[../code.aspx?ID=41455 By Renfield]