Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Open random avec 2 types de record

2 réponses
Avatar
TouTi
Bonjour

J'utilise dans mon programme deux types de record selon la version mais à
l'ouverture du fichier j'ai un problème

Dim Recloc As lokenr2
Open nomficloc For Random As #2 Len = Len(Recloc)

Get #2, 1, Recloc
versi = Recloc.Loctype

If versi <> "Version2" Then
Close #2

Dim Recloc As lokenr <<<< il ne veut pas me redéfinir le
record (ce qui est normal)

"*** comment palier ce défaut???? ***

Open nomficloc For Random As #2 Len = Len(Recloc)
End If

Get #2, 2, Recloc
total = Recloc.adres


Merci

--
TouTI

2 réponses

Avatar
jean-marc
"TouTi" <gelapplication[nospam]@tiscali.fr> wrote in message
news:440430f5$0$6647$
Bonjour

J'utilise dans mon programme deux types de record selon la version mais à
l'ouverture du fichier j'ai un problème

Dim Recloc As lokenr2
Open nomficloc For Random As #2 Len = Len(Recloc)

Get #2, 1, Recloc
versi = Recloc.Loctype

If versi <> "Version2" Then
Close #2

Dim Recloc As lokenr <<<< il ne veut pas me redéfinir le
record (ce qui est normal)

"*** comment palier ce défaut???? ***

Open nomficloc For Random As #2 Len = Len(Recloc)
End If

Get #2, 2, Recloc
total = Recloc.adres



Hello,

Il faut revoir la logique d'ouverture. Si tes records sont de
tailles différentes, tu ne peux absolument pas savoir à priori
à l'ouverture si tu dois lire des "lokenr" ou des "lokenr2",
et vice-versa. Tu ne peux pas en essayer un au pif. Tu ne peux
même pas en lire un pour récupérer la version, car tu présupposes
des choses sur la structure des record (ce qui est mal).

La façon saine de gérer ça, c'est d'avoir un fichier séparé
qui va lui contenir uniquement la version du fichier
correspondant.

Exemple:
tu as 2 fichiers:
lock1.dat ' un fichier avec des records de type "Version1"
lock2.dat ' un fichier avec des records de type "Version2"

pour chaque fichier, tu crées un fichier pour indiquer le type,
donc par exemple tu vas avoir
lock1.typ ' va contenir uniquement "Version1"
lock2.typ ' va contenir uniquement "Version2"

puis tu fais comme ça:

Dim Recloc2 As lokenr2
Dim Recloc1 As lokenr
Dim f as integer
Dim s as string
dim typFic as integer
dim lenRec as long

' le nom du fichier courant est dans nomficloc
' le nom du fichier de type est dans nomficlocTyp

f=freefile
open nomficlocTyp for input as #f
line input #f, s
close #f
if s="Version1" then
typFic = 1
lenRec = len(Recloc1)
else if s="Version2" then
typFic = 2
lenRec = len(Recloc2)
else
typeFic = -1 ' gérer l'erreur ici
endif

' puis lecture
f=freefile
Open nomficloc For Random As #f Len = lenRec
if typeFic=1 then
' faire ce qu'on a à faire, lire des recloc
else
' lire des recloc2
endif
close #f

Remarques:
- ne pas faire des open ... as #1 ou as #2
-> Toujours utiliser freefile, qui est fait pour ça.

--
Jean-marc
Avatar
TouTi
> Il faut revoir la logique d'ouverture. Si tes records sont de
tailles différentes, tu ne peux absolument pas savoir à priori
à l'ouverture si tu dois lire des "lokenr" ou des "lokenr2",
et vice-versa. Tu ne peux pas en essayer un au pif. Tu ne peux
même pas en lire un pour récupérer la version, car tu présupposes
des choses sur la structure des record (ce qui est mal).



Et oui.... jean marc

Malheureusement, la première version n'a pas d'indicateur et je ne peux que
"bidouiller" pour repérer le type de record...

Sans quoi j'ai trouvé une solution (qui semble tenir....) mais je retiens
ton explication pour les futures versions...

Merci

--
Guy