Packer et compression de structures ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Packer et compression de structures ?

Message 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

Code : Tout sélectionner

UnpackMemory(NextPackFile() ,@Camera) 
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 .
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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 :oops:

Chris :)
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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

Code : Tout sélectionner

WriteData(@Light, SizeOf(Light)) 
Et pour le lire

Code : Tout sélectionner

ReaData(@Light, SizeOf(Light))
Donc par analogie j'ai fait pareil avec AddMemorypack()
Mais ensuite pour récupérer , je ne sais pas .
Dernière modification par comtois le sam. 29/mai/2004 13:25, modifié 1 fois.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Bon j'ai trouvé ,je fais comme ça :

Code : Tout sélectionner

mem=NextPackFile()
CopyMemory(mem,@Light,PackFileSize())
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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 :)
gilles robert
Messages : 24
Inscription : jeu. 15/avr./2004 14:56

Message 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
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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
Image
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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 :)
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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
Image
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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 .
gilles robert
Messages : 24
Inscription : jeu. 15/avr./2004 14:56

Message 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:

Code : Tout sélectionner

OpenPack(Dossier$) 
adr=NextPackFile() 
Mais en fait 'adr' n'est qu'une adresse.

Voila les explications. :?:

Merci à tous,

Gilles
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Répondre