Page 1 sur 2
Packer et compression de structures ?
Publié : sam. 29/mai/2004 9:53
par comtois
pour sauvegarder mes structures je fais un truc comme ça
Code : Tout sélectionner
If EnregistreFichier
If CreatePack(Chemin$)
AddPackMemory(@Camera, SizeOf(Camera) ,7)
AddPackMemory(@Light, SizeOf(Light) ,7)
AddPackMemory(@Material, SizeOf(Material) ,7)
AddPackMemory(@ImageMove, SizeOf(ImageMove) ,7)
AddPackMemory(@Wave, SizeOf(Wave) ,7)
EndIf
EndIf
Jusque là ,je pense que c'est correct ?
Par contre ,comment je récupère mes billes maintenant ??
j'ai essayé des trucs comme
On ne rigole pas dans le fond
Bref je sèche , j'ai cherché dans codeArchiv je n'ai rien vu , ça ne parle que de fichiers .
Publié : sam. 29/mai/2004 10:52
par Chris
Si tu sauvegarde dans un fichier sur le disque, il faut certainement charger le fichier dans un buffer, (AllocateMemory(Taille du fichier)), pour que le UnpackMemory fonctionne.
UnpackMemory(*BufferCompressé, *BufferDestination)
Mais j'ai pas trop compris la question, il me semble
Chris

Publié : sam. 29/mai/2004 11:05
par comtois
Je me disais bien que je n'étais pas très clair , alors je vais essayer de le dire autrement .
Je vais prendre un exemple concret.
J'ai une structure Light
Code : Tout sélectionner
Structure Light
Color.l
SpecularColor.l
x.f
y.f
Z.f
EndStructure
Light.light
Je voudrais faire un fichier compressé de cette structure.
Code : Tout sélectionner
If CreatePack(Chemin$)
AddPackMemory(@Light, SizeOf(Light) ,7)
EndIf
Déjà ça ,est-ce correct ? , en tout cas ,ça ne plante pas
Et ensuite je voudrais pouvoir récupérer les données compressées dans ma structure light.
Et c'est là que je bloque.
Avec un fichier non compressé
on fait
Et pour le lire
Donc par analogie j'ai fait pareil avec AddMemorypack()
Mais ensuite pour récupérer , je ne sais pas .
Publié : sam. 29/mai/2004 12:02
par comtois
Bon j'ai trouvé ,je fais comme ça :
Publié : sam. 29/mai/2004 13:05
par Anonyme2
Sauf pour les chaînes car tu ne sauvegardera que l'adresse de la chaîne de ta structure, pas son contrenu, sizeof() renvoi la taille de la structure, quelque soit la longueur de la chaîne.
Publié : sam. 29/mai/2004 13:22
par comtois
Exact Denis , je n'y pensais plus , pourtant on me l'avait déjà dit
une piqûre de rappel de temps en temps , ça ne fait pas de mal

Publié : mer. 28/juil./2004 16:04
par gilles robert
J'ai un peu le même problème:
J'ai réussi à compresser une chaine que j'ai conservé sur mon disque dur.
Maintenant je desir décompresser ce dossier et le conserver sous un autre nom.
Pouvez-vous m'aider?
Merci,
Gilles
Publié : mer. 28/juil./2004 20:17
par comtois
Et comment as-tu fait pour ta chaine ? on peut voir le code ?
car comme Denis le disait , la méthode décrite ici fonctionne , sauf pour les chaines !
Denis a écrit :Sauf pour les chaînes car tu ne sauvegardera que l'adresse de la chaîne de ta structure, pas son contrenu, sizeof() renvoi la taille de la structure, quelque soit la longueur de la chaîne.
Petit rappel :
http://purebasic.hmt-forum.com/viewtopic.php?t=265
Publié : mer. 28/juil./2004 20:51
par Flype
probablement comme çà
Code : Tout sélectionner
Chemin$ ="c:\pack.pck"
Alpha$ ="abcedfghijklmnopqrstuvwxyz"
Numeric$="0123456789"
If CreatePack(Chemin$)
Debug AddPackMemory(Alpha$,Len(Alpha$),7)
Debug AddPackMemory(Numeric$,Len(Numeric$),7)
ClosePack()
EndIf
If OpenPack(Chemin$)
mem=NextPackFile()
Debug PeekS(mem)
mem=NextPackFile()
Debug PeekS(mem)
EndIf
Publié : mer. 28/juil./2004 21:20
par comtois
ah oui , ça me parait pas mal , sauf que si Gilles a fait comme ça , je ne vois pas où est son problème

Publié : mer. 28/juil./2004 21:41
par Flype
en gros le probleme est le suivant :
si on sauvegarde cette structure
ca marchera pas (sauf le pointeur)
Structure Test
Valeur.s
EndStructure
alors qu'une structure comme ca sera enregistrée
Structure Test
Valeur.b[256]
EndStructure
Publié : mer. 28/juil./2004 21:52
par comtois
oui pour moi c'est très clair , Attendons de voir si ça convient à Gilles
Sinon merci pour le truc avec les chaines de caractères , ça pourra me servir un jour .
Publié : ven. 30/juil./2004 14:04
par gilles robert
Merci pour votre attention, hélas je n'ai pas eu l'opportunité de répondre plus tôt.
Voici mon code simplifié car il fait partie d'un programme plus complexe.
En fait il s'agit d'un dossier existant déjà sur mon disque dur.
Code : Tout sélectionner
Dossier$="C:\dossier.aaa" ; nom du dossier comprimé
CreatePack(Dossier$)
art$="a_comprimer.txt" ; nom du dossier à comprimer
AddPackFile(art$,6)
ClosePack()
et la je n'arrive pas à récuperer le dossier.
Il existe bien (contrôlé avec explorer) est également fortrement comprimé mais j'ai éssayé avec:
Mais en fait 'adr' n'est qu'une adresse.
Voila les explications.
Merci à tous,
Gilles
Publié : ven. 30/juil./2004 14:21
par Anonyme2
J'ai posté du code sur la compression en expliquant ce qui ne va pas.
Je pense que tu y trouveras ce que tu cherche.
Fred n'ayant jamais répondu, je ne sais pas si les problèmes que j'ai signalés ont été corrigés.
Publié : ven. 30/juil./2004 14:23
par Anonyme2