Page 1 sur 2

AddPackMemory Dim trop court

Publié : dim. 22/déc./2013 4:44
par Fortix
Salut, à tous :D
Je n'arrive pas à résoudre cette énigme
j'éssais donc de créer un tableau pour le décompresser ensuite.
mais mon souci est que je n'arrive pas à déterminer la Longueur du AddPackMemory(AdresseMemoire, Longueur [, NiveauCompression]), même en raisonnant simplement je n'arrive pas!

1er code: compression tableau

Code : Tout sélectionner

Dim Tableau(9,9)
  
For salarie=0 To 9-1
	For activitee=0 To 9-1
		Tableau(salarie,activitee)=Random(20);juste un exemple!!
	Next activitee
Next salarie
  
If CreatePack("c:\fiche_entreprise.pak")
    AddPackMemory(@Tableau(),9*9,9)
    ClosePack()
EndIf
2eme code: décompression tableau

Code : Tout sélectionner

Dim Tableau(9,9)

If OpenPack("c:\fiche_entreprise.pak")
	*Pointeur=NextPackFile()
	Taille=PackFileSize()
	
    CopyMemory(*Pointeur, @Tableau(), Taille)
    ClosePack()
EndIf
  
For salarie=0 To 9-1
	For activitee=0 To 9-1
		Debug Tableau(salarie,activitee)
	Next activitee
Next salarie
puis lors de la décompression via le 2eme code, il y a toujours au final plus de 9 lignes, je ne sais pas pourquoi d’ailleurs!!

alors si vous avez la solution pour débloquer la situation, j'en serais très ravis :D , merci d'avance

Re: AddPackMemory Dim trop court

Publié : dim. 22/déc./2013 9:55
par Backup
pour quoi faire 9-1 et pas ecrire 8 directement ?

evite de surcharger le For-next avec des calculs... c'est pas l'ideal :)

Re: AddPackMemory Dim trop court

Publié : dim. 22/déc./2013 17:05
par falsam
Je suis étonné que tes codes fonctionnent. Quelle version de PB ?

Re: AddPackMemory Dim trop court

Publié : dim. 22/déc./2013 18:31
par Fortix
:lol: oui pardon pour ce détail, j'utilise la version 4.61

je sais que 9-1=8 :lol: , mais je voulais être le plus claire possible et ainsi pour que vous puissiez faire directement le rapprochement
avec les tailles max de la Dim :D

Re: AddPackMemory Dim trop court

Publié : lun. 23/déc./2013 18:48
par Fig
L'opération est transparente et pas faite par le programme mais lors de la précompile de toute façon... :wink:

Re: AddPackMemory Dim trop court

Publié : lun. 23/déc./2013 19:43
par Fortix
revenons en si vous le voulez bien au vrai problème :lol:

par exemple si nous faisons une Dim(3,3) nous obtenons bien:

333
333
333

donc logiquement pour le paramètre "Longueur" du AddPackMemory(AdresseMemoire, Longueur [, NiveauCompression]) il faudra spécifier 9 car (3*3=9) qu'on multipliera par sizeof(long) car la Dim est en format "long"
donc au final sizeof(long)*9
.......y a t-il une erreur???

Re: AddPackMemory Dim trop court

Publié : lun. 23/déc./2013 20:37
par GallyHC
Bonjour,

Une simple question a la con pourquoi un tableau a 3 dimentions. Un simple "Dim(x)", nest pas plus simple?

Apres ton sizeof(x) fait par exemple 30 donc il a juste besoin de 30, je supose.... Alors faire 30 * 3 cela reviend a dire qu'il utilise 3 fois plus de memoire que ce qu'il a vraiment besoin? je me trompe peu être ou j'ai mal compris.

Enfin voila, Cordialement,
GallyHC

Re: AddPackMemory Dim trop court

Publié : lun. 23/déc./2013 21:12
par Fortix
un tel tableau est nécessaire pour ce que je veux faire, une valeur donné via 2 coordonnées du tableau :)

Re: AddPackMemory Dim trop court

Publié : sam. 28/déc./2013 18:48
par Fig
dim (3,3)

ca fait:

0,0,0,0
0,0,0,0
0,0,0,0
0,0,0,0

Parce qu'on a 4 dimensions définis... 0,1,2,3

Haaa les mouches... Image

Pour en revenir à ton soucis, déja, ça serait pas mal que tu mettes à jour ta version de PB... Par exemple en utilisant la 4.21 qui est la dernière version stable.
La taille de ton tableau devrait être (0 à 9 élements pour chaque dimensions) 10x10x4 si tu utilise pb x32 ou 10x10x8 sur x64.
Le mieux est de préciser comme ça tu n'es pas embété: dim Tableau.l(9,9) cad 4octets.

Re: AddPackMemory Dim trop court

Publié : sam. 28/déc./2013 19:59
par Fig

Code : Tout sélectionner

UseZipPacker()
Dim Tableau.l(9,9)
Dim efface_tab.l(9,9)

For salarie=0 To 9
   For activitee=0 To 9
      Tableau(salarie,activitee)=Random(20);juste un exemple!!
   Next activitee
 Next salarie
 
*buffer=@Tableau()
*output=AllocateMemory(10*10*4)
size=CompressMemory(*Buffer,10*10*4, *Output,10*10*4)
;maintenant qu'on connait la taille de la mémoire compressée, on redimensionne la mémoire allouée pour l'économiser.
*output=ReAllocateMemory(*output,size)

;efface le tableau
CopyArray(efface_tab(),Tableau())

UncompressMemory(*output,size,*buffer,10*10*4) 

For salarie=0 To 9
   For activitee=0 To 9
      Debug Tableau(salarie,activitee)
   Next activitee
Next salarie
Fonctionne avec PB 5.21. Compresse dans une zone mémoire ton tableau. Ensuite on réduit la zone mémoire, puis on la décompresse en la remettant dans le tableau...

C'est ça que tu voulais faire ?
La doc me dit que l'on ne peut pas utiliser ExaminePack avec un pack créé avec CreatePack (mais ça a peut être changé depuis ta version ??!)
ExaminePack()

Syntax

Result = ExaminePack(#Pack)
Description

Start to examine the pack content. NextPackEntry() has to be called to list the entries found in the pack file. The pack has to be previously opened with OpenPack(). Packs being created with CreatePack() can not be examined.

Re: AddPackMemory Dim trop court

Publié : sam. 28/déc./2013 20:09
par Fortix
oui merci @fig d'avoir débloqué la situation :D

concernant mon tableau 3,3,3,3,3.....= faute d'étourderie :lol:
je suis étonné que la dernière version stable soit 4.21, sa ne serait pas une faute d'étourderie également :wink: ?????

ah au fait, j'utilise la v32bit :D

Re: AddPackMemory Dim trop court

Publié : sam. 28/déc./2013 20:09
par Fig
Oui, 5.21 bien sûr :D

Re: AddPackMemory Dim trop court

Publié : dim. 29/déc./2013 13:38
par Fortix
merci @fig, j'ai adapté ton raisonnement à mon code et sa fonctionne très bien))

tu me conseil de télécharger la dernière version de pb, mais pour la petite histoire, le soucis est que pour moi c'est la "croix et la bannière" de me procurer les dernière car je dois constamment communiquer en privé avec @Fred (que je salut) pour trouver une solution à mon problème (à la longue sa soulllll) concernant mon compte utilisateur http://www.purebasic.com/securedownload ... anguage=FR
, car à l'époque j'avais crée mon compte avec une ancienne adresse mail du style "caramail" qui n'existe plus depuis près de 5 ans déjà, et que je suis incapable de me souvenir de cette adresse :x ;
je lui avais demandé (@Fred) s'il pouvais trouver une solution à mon problème, il m'avait répondu que non car il ne possède pas l'outil pour effectuer un changement sur mon compte (afin de modifier le mail par exemple), et c'est comme ça que petit à petit j'ai cessé de télécharger les dernières version et que je me retrouve avec une vieille bécane par rapport à vous tous :cry:

voilà voilà

Re: AddPackMemory Dim trop court

Publié : dim. 29/déc./2013 15:05
par Backup
pourquoi alors ne pas recreer un nouveau compte, en accord avec Fred
tu lui fourni en MP ton Login, ton nouvelle Email , et lui peux Valider ou pas le compte non ?

Re: AddPackMemory Dim trop court

Publié : dim. 29/déc./2013 16:05
par Fig
On va faire une pétition... :lol: