1

J'ai un truc qui me stupéfie. Mon but est d'accéder à un élément qui se situe dans un fichier.
J'ai pour celà une fonction qui demande l'index du fichier.
Elle va chercher l'élément dans le fichier et le renvoie. Le truc c'est que le fichier est très gros
Je demande par exemple l'élément n°200 et un bug est généré par l'accès au fichier:Il ne veux pas aller directement à la position indiquée. Expiquations:

Voici ma fonction:
(Il faut préciser que LenMonTypeDeVariable a pour valeur 9820 et qu'il y a un en-tête au fichier qui a pour longueur 150)
(Le fichier a été ouvert autre part dans le programme en Binary Lock Read Write

Function FonctionQuiOuvreLeFichier(Index as Integer) as MonTypeDeVariable
Dim Temp(0) As MonTypeDeVariable
Get #FilePtr , 150 + Index * (LenMonTypeDeVariable + 2) , Temp(0)
FonctionQuiOuvreLeFichier = Temp(0)
End Function

Il me génère une erreur overflow quand Index > 4

Par contre avec ça ça marchesadMais je ne peux pas mettre Compteur=150 + Index * (LenMonTypeDeVariable + 2) directement ça génère la même erreur

Function FonctionQuiOuvreLeFichier(Index as Integer) as MonTypeDeVariable
Dim Temp(0) As MonTypeDeVariable
Dim Compteur as Double
Compteur = LenMonTypeDeVariable + 2
Compteur = Compteur * Index
Compteur = Compteur + 150
Get #FilePtr , Compteur , Temp(0)
FonctionQuiOuvreLeFichier = Temp(0)
End Function

Quelqu'un peut me dire d'où ça vient?
Je ne sais pas comment fonctionne Windows à ce niveau là. Peut être est-ce parce que pour ces opérations windows utilise des Integer, mais c'est bizarre car c'est des Long qui sont utilisés d'habitude

Qu'une personne éclairée m'apporte la lumière sur ce mystère
Trampoline Powwwweeeeeerrrrrr!
Fier d'être Lyonnais

2

Tous les calculs en VB sont effectués en la taille de la première opérande (pas de la plus grande comme en C). Or, 150 est de type Integer, d'où ton débordement. Mets 150& à la place (ou alors mets le +150 à la fin, mais je te conseille de toujours mettre 150& si tu veux faire tes calculs sur un Long).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

3

D'accord. J'ai fait d'autres essais et je ne commprenais pas pourquoi en mettant
150 + Index * CLng(LenMonTypeDeVariable + 2)
ça marchait
Ca c'est une info dont il faut se souvenir
Trampoline Powwwweeeeeerrrrrr!
Fier d'être Lyonnais