Bonjour,
Pour écrire ou lire dans un fichier en accès direct en visual basic 6 il fallait écrire le code suivant :
Type Enrg ' Définition du format de l'enregistrement
Nom As String * 10
Prenom As String * 10
Age As integer
End Type
Dim Eng As Enrg
Open "Fichier.txt" For Random As #1 len(Eng)
Put # 1, 5,Eng ' Ecrit dans le 5è enregistrement
Get # 1,5,Eng ' Lit dans le 5è enregistrement
Close#1
Quel est le code équivalent en purebasic ?
Je suis un peu perdu
Merci de vos réponses
Fichier accès direct vb6 => purebasic
Re: Fichier accès direct vb6 => purebasic
Bonjour Altix,
Voici un code écrit par MLD et je pense qu'il ne m'en tiendra pas grief, vu qu'il l'avais déjà mis sur ce forum en 2009
Fait en bon usage.
Voici un code écrit par MLD et je pense qu'il ne m'en tiendra pas grief, vu qu'il l'avais déjà mis sur ce forum en 2009
Code : Tout sélectionner
;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
;¤¤¤ MLD le 10/12/2009 ¤¤¤
;¤¤¤ PB 4.40 ¤¤¤
;¤¤¤ fichiers a accés direct ¤¤¤
;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
;Principe
;Pour enregistrer: indiquer le numéro d'enregistrement, que c'est un enregistrement, la variable d'enregistrement
; et une variable string de cette façon "variable"
;Pour lire: indiquer le numéro d'enregistrement, que c'est une lecture, la variable d'enregistrement ,
;et une variable vide ""
;Pour obtenir le nombre d'enregistrement : Appelez le procédure avec un numéro d'enregistrement quelconque, et
; toutes les autres variables vide ""
Structure Personne
Nom.w
Prenom.w
Age.w
EndStructure
Global Dim Personne.Personne(1)
Personne(1) \Nom.w = 20
Personne(1) \Prenom.w = 10
Personne(1) \Age.w = 5
Global Nbenr.l
Procedure.s fichierAD(Numenr.w,es.s,varenr.s,var.s)
longlig.w = (Personne(1)\Nom.w + Personne(1)\Prenom.w + Personne(1)\Age.w);longeur d'un enr
Posdepling.w = ((Numenr.w * longlig.w)- longlig.w);position de départ des enr
PosNom.w = Posdepling.w
PosPrenom.w = Posdepling.w + Personne(1)\Nom.w ;+1
PosAge.w = Posdepling.w + (Personne(1)\Nom.w + Personne(1)\Prenom.w); + 1
OpenFile(1,"essai.fad")
If Lof(1) =0
WriteString(1,Space(longlig.w))
Nbenr.l = Lof(1)/longlig.w
Else
Nbenr.l = Lof(1)/longlig.w
EndIf
CloseFile(1)
Select es.s
Case "enrg"
If Numenr.w = (Nbenr.l +1);Prépare les champs pour un nouveau enrg
OpenFile(1,"essai.fad")
FileSeek(1,Lof(1))
WriteString(1,Space(longlig.w))
Nbenr.l = Lof(1)/longlig.w
EndIf
If Numenr <= Nbenr.l ; évite un plantage
OpenFile(1,"essai.fad")
Select varenr
Case "Nom"
FileSeek(1,PosNom.w)
enrnom$ = var + Space(Personne(1)\Nom.w - Len(var)) ; comble le champ avec des espaces
WriteString(1,enrnom$)
Case "Prenom"
FileSeek(1,PosPrenom.w )
enrPrenom$ = var + Space(Personne(1)\Prenom.w - Len(var)) ; comble le champ avec des espaces
WriteString(1,enrPrenom$)
Case "Age"
FileSeek(1,PosAge.w)
enrAge$ = var + Space(Personne(1)\Age.w - Len(var)) ; comble le champ avec des espaces
WriteString(1, enrAge$)
EndSelect
CloseFile(1)
EndIf
Case "lect"
If Numenr <= Nbenr.l ; évite un plantage
OpenFile(1,"essai.fad")
Select varenr
Case "Nom"
FileSeek(1,PosNom.w)
lect.s = Trim(Mid(ReadString(1),1, Personne(1)\Nom.w ))
Case "Prenom"
FileSeek(1,PosPrenom.w)
lect.s = Trim(Mid(ReadString(1),1, Personne(1)\Prenom.w ))
Case "Age"
FileSeek(1,PosAge.w)
lect.s = Trim(Mid(ReadString(1),1, Personne(1)\Age.w ))
CloseFile(1)
EndSelect
ProcedureReturn lect.s
EndIf
EndSelect
EndProcedure
For x=1 To 50
fichierAD(x,"enrg","Nom","Lye" +Str(x))
fichierAD(x,"enrg","Prenom","Michel"+Str(x))
fichierAD(x,"enrg","Age",Str(x))
Next
;Pour lire le fichier enlevez les ;
fichierAD(1,"","",""); on appel le fichier pour avoir le nombre d'enregistrement
maxenr.w = Nbenr.l
For y =1 To maxenr.w Step 2
Debug "Nom: " + fichierAD(y,"lect","Nom","")+ " " + "Prénom: " + fichierAD(y,"lect","Prenom","") + " " + "Age: " + fichierAD(y,"lect","Age","")
Next
End
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Fichier accès direct vb6 => purebasic
Bonjour, ce type de lecture d'un fichier en accès direct n'existe pas en PB, par défaut.
On peut ruser avec fileseek(), mais le plus simple est de travailler dans la mémoire vive, puis de sauvegarder tout le fichier sur le disque, si ton fichier n'est pas trop volumineux, ça fonctionnera très bien.
Sinon, il faudra utiliser les instructions liées à la gestion de database. (je ne les ai jamais essayé personnellement)
Je te propose une version en mémoire vive qui est la plus simple.
On peut ruser avec fileseek(), mais le plus simple est de travailler dans la mémoire vive, puis de sauvegarder tout le fichier sur le disque, si ton fichier n'est pas trop volumineux, ça fonctionnera très bien.
Sinon, il faudra utiliser les instructions liées à la gestion de database. (je ne les ai jamais essayé personnellement)
Je te propose une version en mémoire vive qui est la plus simple.
Code : Tout sélectionner
Structure Enrg
Nom.s
Prenom.s
Age.i
EndStructure
Dim Enrg.Enrg(10)
file$=GetHomeDirectory()+"test.txt"
;créer un fichier test.txt contenant 10 enregistrements
If CreateFile(0,file$)
For i=1 To 10
WriteStringN(0,"Pignon ")
WriteStringN(0,"Francois ")
WriteStringN(0,Str(36+i))
Next i
CloseFile(0)
Else
MessageRequester("Information","may not create the file!")
EndIf
;Au début du programme on charge ton fichier
;lit le contenu du fichier
Debug "contenu du fichier au début"
If ReadFile(0, file$) ;permet uniquement de lire le contenu du fichier
i=0
While Eof(0)=0
i+1
Enrg(i)\Nom=ReadString(0)
Enrg(i)\Prenom=ReadString(0)
Enrg(i)\age=Val(ReadString(0))
Debug Enrg(i)\Nom
Debug Enrg(i)\Prenom
Debug Enrg(i)\age
Wend
CloseFile(0)
Else
MessageRequester("Information","may not read the file!")
EndIf
Debug" "
;pendant l'exécution du programme, on fait les changements souhaités
;On change l'enregistrement 5 par exemple
Enrg(5)\Age=12
enrg(5)\Nom="Doe"
Enrg(5)\Prenom="John"
;à la fin du programme on sauvegarde le fichier
;enregistre les changement du fichier
Debug "Contenu du fichier après modification"
Debug " "
If OpenFile(0, file$) ;permet de lire ou d'écrire le contenu du fichier
For i=1 To 10
WriteStringN(0,Enrg(i)\Nom)
WriteStringN(0,Enrg(i)\Prenom)
WriteStringN(0,Str(Enrg(i)\Age))
;affiche le contenu du fichier
Debug Enrg(i)\Nom
Debug Enrg(i)\Prenom
Debug Enrg(i)\Age
Next i
CloseFile(0)
Else
MessageRequester("Information","may not read the file!")
EndIf
Dernière modification par Fig le mar. 04/févr./2014 10:57, modifié 2 fois.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Version de PB : 6.00LTS - 64 bits
Re: Fichier accès direct vb6 => purebasic
Pour fileseek, voir poste de Micoute qui a été plus rapide que moi... Tu as donc deux méthodes différentes.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Version de PB : 6.00LTS - 64 bits