Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
"TouTi" <gelapplication[nospam]@tiscali.fr> wrote in message
news:440430f5$0$6647$8fcfb975@news.wanadoo.fr...
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.
"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
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
> 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...
> 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...