Ecriture et lecture de fichier (binary)

Signaler
Messages postés
12
Date d'inscription
mercredi 25 janvier 2006
Statut
Membre
Dernière intervention
23 juin 2006
-
Messages postés
256
Date d'inscription
jeudi 17 avril 2003
Statut
Membre
Dernière intervention
20 février 2008
-
Bonjour, je developpe un editeur de niveau 3D pour un jeu sous visual basic 6, jai besoin de sauvegarder les données de cette facon dans le fichier (exemple) :

arbre 123,456,452
ou alors:
arbre 123 456 452

je veus recuperer ces valeur l'une apres l'autre !

jai essayer avec une ecriture en binaire comme ceci :

open "fichier" for binary as #free
Put #Free, , arbre & vbtab & xposi & vbtab & yposi & vbtab & zposi & vbcrlf
close #free

le resultat dans le fichier est le suivant : arbre 123 456 452

Mon probleme c'est que je n'arrive pas a recuperer les données que se soit avec la commande " open "fichier" for binary read as #free " pour lui la variable recuperer est vide !
exemple :
Open "fichier" For Binary As #Free


Dim essai As String


Get #Free, 1, essai
Dim ll As String
ll = MsgBox(essai, vbOKOnly)
close #free
le message box est vide , jai remplacer le 1 dans la ligne get #free par autre chose voire rien, et cela ne donne toujour rien ! Pourqouiiiiiiiiiiii ?

6 réponses

Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
7
Le problème, c'est que dans ce mode, get remplit la variable passée en
paramètre jusqu'à la fin de la zone mémoire allouée à cette variable.
(donc si c'est un byte il prend un octet, si c'est un single, il en
prend 4 etc...)

Mais le type String en vb n'a pas de taille prédéfinie (enfin je
pense), mais tu peux le faire en ajoutant *n derrière la déclaration de
la variable :



dim essai as string *len(str(arbre & vbtab & xposi & vbtab & yposi & vbtab & zposi & vbcrlf))



Voila.



Julien.
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
27
Pour une lecture dans un fichier binaire, il vaudrait mieux utiliser une string de longueur fixe !! Mais tu peux le faire avec un ficheir texte ...

open "fichier" for output as #free
Print #Free, arbre & vbtab & xposi & vbtab & yposi & vbtab & zposi
close #free

Et pour la lecture
Dim Ligne As String, Infos() as string
Open "fichier" For Input As #Free
Line Input #Free, Ligne
close #free
Infos = Split(Ligne,vbTab)
Dim i as long
For i = 0 to uBound(Infos)
MsgBox Infos(i)
Next
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
7
Heu y'a peut-être pas besoin d'utiliser str(), à toi de voir...
Messages postés
12
Date d'inscription
mercredi 25 janvier 2006
Statut
Membre
Dernière intervention
23 juin 2006

yea merci d'avoir repondu si vite, je vait essayer vos methode merci beaucoup !!!!!
Messages postés
12
Date d'inscription
mercredi 25 janvier 2006
Statut
Membre
Dernière intervention
23 juin 2006

purer vous etes des genie sa marche !!!!!!!!!! merci a tous les 2 ! jai utiliser la methode de crenaud76 ! je vais pouvoir enfin faire mon editeur de niveau 3D !!! et dire que j'en est passer des heures a chercher, et qu'il suffisait simplement de demander..... ( quel c... je sui) !

merci encore et peut etre a bientot !!!
Messages postés
256
Date d'inscription
jeudi 17 avril 2003
Statut
Membre
Dernière intervention
20 février 2008
1
une autre solution est d'attribuer un numéro à tes objets (ex : arbre = 1, mur = 2, ...) et de stocker juste le nombre
A+.
Thomas.