bel84
Messages postés6Date d'inscriptionsamedi 12 janvier 2008StatutMembreDernière intervention17 février 2013
-
10 févr. 2013 à 16:17
Utilisateur anonyme -
14 févr. 2013 à 18:57
Bonjour,
Pour un petit programme de gestion d'associations, je tente de faire un trie sur les données d'un fichier texte. Pour cela, je veux remplir un tableau avec le contenu du fichier, trier celui-ci, puis ré-enregistrer les données dans le fichier.
Au moment du débogage, j'ai une erreur que je ne comprends pas malgré mes recherches dans les forums.
Je n'arrive pas à joindre une copie d'écran pour expliquer le problème, alors ci dessous une copie de mon code.
Function trie(ByVal fic)
Dim nb, enr, i As Integer
Dim TB(), Buffer As String
Dim B As Boolean
'on copie le fichier dans un tableau
Dim lignes() As String = File.ReadAllLines(fic)
nb = lignes.Length
enr = 0
FileOpen(1, fic, OpenMode.Input)
While Not enr >= nb
enr = enr + 1
TB(enr - 1) = LineInput(1)
End While
FileClose(1)
'on trie
Do
B = False
For i = 0 To nb - 1
If TB(i) < TB(i - 1) Then
B = True
Buffer TB(i) : TB(i) TB(i - 1) : TB(i - 1) = Buffer
End If
Next
Loop Until Not B
'On copie le tableau dans le fichier
FileOpen(1, fic, OpenMode.Output)
'Ecriture du texte dans le fichier
enr = -1
While Not enr >= nb
enr = enr + 1
Print(1, TB(enr))
End While
'Fermeture du fichier
FileClose(1)
End Function
La ligne en rouge provoque une erreur:
L'exeption NullExprerienceExeption n'a pas été gérée
La référence d'objet n'est pas définie à une instance d'un objet.
Je vous prie de bien vouloir reposter votre code, mais cette fois avec la coloration syntaxique (3ième icône en partant de la droite).
En attendant, une énorme erreur de syntaxe saute aux yeux
bel84
Messages postés6Date d'inscriptionsamedi 12 janvier 2008StatutMembreDernière intervention17 février 2013 14 févr. 2013 à 17:53
En réponse à Zermelo, je reposte donc:
Function trie(ByVal fic)
Dim nb, enr, i As Integer
Dim TB(), Buffer As String
Dim B As Boolean
'on copie le fichier dans un tableau
Dim lignes() As String = File.ReadAllLines(fic)
nb = lignes.Length
enr = 0
'LIGNE AJOUTEE POUR QUE CA MARCHE!
ReDim Preserve TB(nb)
FileOpen(1, fic, OpenMode.Input)
While Not enr >= nb
enr = enr + 1
TB(enr - 1) = LineInput(1)
End While
FileClose(1)
'on trie
Do
B = False
For i = 0 To nb - 1
If TB(i) < TB(i - 1) Then
B = True
Buffer TB(i) : TB(i) TB(i - 1) : TB(i - 1) = Buffer
End If
Next
Loop Until Not B
'On copie le tableau dans le fichier
FileOpen(1, fic, OpenMode.Output)
'Ecriture du texte dans le fichier
enr = -1
While Not enr >= nb
enr = enr + 1
Print(1, TB(enr))
End While
'Fermeture du fichier
FileClose(1)
End Function
et l'erreur n'est pas du tout le As....,
mais le redim.
J'ai ajouté la ligne :
ReDim Preserve TB(nb)
et tout marche
Merci Banana32.
Petite remarque :
1/ On se sert de l'instruction Preserve pour redimensionner un tableau dynamiquement tout en conservant toutes ou partie des données qu'il contient. Dans ton cas, son emploi est inutile.
2/ Comme l'a précisé Zermelo que je salue au passage, ta fonction ne retourne aucun résultat et n'est pas typée. L'emploi d'une simple Sub aura le même effet. Je te conseille d'activer Option Strict dans les propriétés de ton projet. Cette erreur sera alors mise en évidence.