PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV (earlier versions) → Sauvegarder un Tableau de grande taille
Sauvegarder un Tableau de grande taille
Started by yvan, Mar., 28 2004 2:35 PM - 7 replies
Posted on March, 28 2004 - 2:35 PM
Bonjour,
Soit un tableau simple de 10 000 par 1 000 réels(8)
Je désire le sauvegarde sur disque en "une seule écriture"
sans passer par une transformation en chaine ("serialize" en C++). Peut-être
dois-je créer un composant C et lui passer la matrice ? une autre idée ?
Merci de votre aide.
J'ai également expérimenté que la taille maximale d'un tableau simple était
de l'ordre de 130 000 000 éléments = matrice 10000x1000x13. A quoi cette
limite correspondt'elle ? je travaille en analyse statistique et des matrices
variance-covariance peuvent prendre rapidement des tailles conséquentes.
Merci de votre aide.
Posted on March, 29 2004 - 12:59 PM
Salut !

On 28-Mar-2004, "yvan" <yvan.pomes@pi.be> wrote:

Bonjour,
Soit un tableau simple de 10 000 par 1 000 réels(8)
Je désire le sauvegarde sur disque en "une seule écriture"
sans passer par une transformation en chaine ("serialize" en C++).
Peut-être
dois-je créer un composant C et lui passer la matrice ? une autre idée ?
Merci de votre aide.
J'ai également expérimenté que la taille maximale d'un tableau simple
était
de l'ordre de 130 000 000 éléments = matrice 10000x1000x13. A quoi cette
limite correspondt'elle ? je travaille en analyse statistique et des
matrices
variance-covariance peuvent prendre rapidement des tailles conséquentes.
Merci de votre aide.


As-tu essayé de faire un transfert() vers une chaine de la dimension
appropriée ?
et enregistrer cette chaine ?

J'ai pas essayé, mais cela pourrait bien être une piste ...

Bien à toi !


--
Marcel Berman
c/o Managing Business SPRL
Allée du Petit Paris, 11
B - 1410 - Waterloo
Tel : +32 2 351.60.64
Fax : +32 2 351.45.78
Gsm : +32 475.799.477
Posted on March, 29 2004 - 8:22 PM
Mon but est justement de ne pas passer par une chaine pour ne pas perdre de
précision dans les observations.
Est-ce que WD permet de sauver et récupérer une zone mémoire dans sa forme
binaire ?
Merci de votre aide
Yvan




Marcel.berman@managingbusiness.be wrote:

Salut !

On 28-Mar-2004, "yvan" <yvan.pomes@pi.be> wrote:

Bonjour,
Soit un tableau simple de 10 000 par 1 000 réels(8)
Je désire le sauvegarde sur disque en "une seule écriture"
sans passer par une transformation en chaine ("serialize" en C++).
Peut-être
dois-je créer un composant C et lui passer la matrice ? une autre idée

?
Merci de votre aide.
J'ai également expérimenté que la taille maximale d'un tableau simple
était
de l'ordre de 130 000 000 éléments = matrice 10000x1000x13. A quoi cette
limite correspondt'elle ? je travaille en analyse statistique et des
matrices
variance-covariance peuvent prendre rapidement des tailles conséquentes.
Merci de votre aide.

As-tu essayé de faire un transfert() vers une chaine de la dimension
appropriée ?
et enregistrer cette chaine ?

J'ai pas essayé, mais cela pourrait bien être une piste ...

Bien à toi !


--
Marcel Berman
c/o Managing Business SPRL
Allée du Petit Paris, 11
B - 1410 - Waterloo
Tel : +32 2 351.60.64
Fax : +32 2 351.45.78
Gsm : +32 475.799.477
Posted on March, 29 2004 - 11:08 PM
Salut !

Mon but est justement de ne pas passer par une chaine pour ne pas perdre de
précision dans les observations.
Est-ce que WD permet de sauver et récupérer une zone mémoire dans sa forme
binaire ?
Merci de votre aide
Yvan


La fonction transfert() devrait être reversible.
Comme cette fonction transfère le contenu de la mémoire à partir d'une
adresse mémoire (représentée par le pointeur de la première variable) vers
une autre adresse mémoire ( représentée par le pointeur de la seconde
variable),
si tu transfères un tableau dans une chaine, puis cette chaine dans un
tableau de même dimension, normalement, tu gardes la précision d'origine.
Je crois que tu devrais quand même tester cette solution.

Bien à toi ...


--
Marcel Berman
c/o Managing Business SPRL
Allée du Petit Paris, 11
B - 1410 - Waterloo
Tel : +32 2 351.60.64
Fax : +32 2 351.45.78
Gsm : +32 475.799.477
Posted on March, 30 2004 - 10:12 AM
Salut !


On 31-Mar-2004, "yvan" <yvan.pomes@pi.be> wrote:

Super
J'avais garni mon tableau avec des réels si petits qu'ils apparaissaient
sous forme de caractères blanc dans mon fichier. Je transfère en plus ma
matrice dans une rubrique "mémo" ce qui me permet de profiter des index de
HF. Merci beaucoup d'avoir prêté tant d'attention à mon problème.
Yvan


:-)
Une fois transféré dans une chaine, ton tableau se présente sous forme de
chaine dont chaque caractère représente un octet. La visualisation de ta
chaine ne correspond à rien du tout de compréhensible...
Seul le transfert de ta chaine vers un tableau de la bonne dimension peut te
permettre de retrouver les valeurs du tableau original.

Bien à toi !

--
Marcel Berman
c/o Managing Business SPRL
Allée du Petit Paris, 11
B - 1410 - Waterloo
Tel : +32 2 351.60.64
Fax : +32 2 351.45.78
Gsm : +32 475.799.477
Posted on March, 30 2004 - 11:36 AM
Super
J'avais garni mon tableau avec des réels si petits qu'ils apparaissaient
sous forme de caractères blanc dans mon fichier. Je transfère en plus ma
matrice dans une rubrique "mémo" ce qui me permet de profiter des index de
HF. Merci beaucoup d'avoir prêté tant d'attention à mon problème.
Yvan



Marcel.berman@managingbusiness.be wrote:

Salut !

On 30-Mar-2004, "yvan" <yvan.pomes@pi.be> wrote:

Merci beaucoup pour votre aide. Je ne caonnaissais pas Transfert(). Mais
j'ai
encore un souci au niveau des nombres réels car la syntaxe impose de
transférer
d'une "chaine de taille fixe" vers une autre "chaine de taille fixe".

J'ai
sauvegardé la chaine de destination dans un fichier mmo mais là je ne
retrouve
plus mes valeurs. A+
Yvan


Bon, moi j'ai pas essayé, mais je crois que pour commencer tu devrais donner
à ta chaine une longueur compatible avec la taille de ton tableau ( vérifie
la longueur pour le type de variable utilisée et multiplie par le nombre
d'élément de ton tableau)
si ce sont des réels codés sur 8 octets et que tu en as mille, ta chaine
devrait avoir une longueur de 8000 caractères.
Pour tester tu pourrais essayer le code suivant :

local
cTableau est une chaine fixe sur 8000
tTableau1 est un tableau de 1000 réels
tTableau2 est un tableau de 1000 réels

// tu remplis ton tableau
...
// Tu transfère
transfert(&cTableau,&tTableau1,8000)
// Tu remplis l'autre tableau
transfert(&tTablleau2,&cTableau,8000)
// tu peux alors tester si chaque élément du tableau2 est bien égal à
l'élément correspondant du tableau1

Si je ne me trompe pas, je crois que cela devrait fonctionner.

Sinon ... fait une requète au Support gratuit, ils devraient pouvoir t'aider
!

Bien à toi



Marcel.berman@managingbusiness.be wrote:

Salut !

Mon but est justement de ne pas passer par une chaine pour ne pas perdre
de

précision dans les observations.
Est-ce que WD permet de sauver et récupérer une zone mémoire dans sa
forme
binaire ?
Merci de votre aide
Yvan

La fonction transfert() devrait être reversible.
Comme cette fonction transfère le contenu de la mémoire à partir d'une
adresse mémoire (représentée par le pointeur de la première variable)
vers
une autre adresse mémoire ( représentée par le pointeur de la seconde
variable),
si tu transfères un tableau dans une chaine, puis cette chaine dans un
tableau de même dimension, normalement, tu gardes la précision d'origine.
Je crois que tu devrais quand même tester cette solution.

Bien à toi ...



--
Marcel Berman
c/o Managing Business SPRL
Allée du Petit Paris, 11
B - 1410 - Waterloo
Tel : +32 2 351.60.64
Fax : +32 2 351.45.78
Gsm : +32 475.799.477
Posted on March, 30 2004 - 5:39 PM
Merci beaucoup pour votre aide. Je ne caonnaissais pas Transfert(). Mais j'ai
encore un souci au niveau des nombres réels car la syntaxe impose de transférer
d'une "chaine de taille fixe" vers une autre "chaine de taille fixe". J'ai
sauvegardé la chaine de destination dans un fichier mmo mais là je ne retrouve
plus mes valeurs. A+
Yvan


Marcel.berman@managingbusiness.be wrote:

Salut !

Mon but est justement de ne pas passer par une chaine pour ne pas perdre

de
précision dans les observations.
Est-ce que WD permet de sauver et récupérer une zone mémoire dans sa forme
binaire ?
Merci de votre aide
Yvan

La fonction transfert() devrait être reversible.
Comme cette fonction transfère le contenu de la mémoire à partir d'une
adresse mémoire (représentée par le pointeur de la première variable) vers
une autre adresse mémoire ( représentée par le pointeur de la seconde
variable),
si tu transfères un tableau dans une chaine, puis cette chaine dans un
tableau de même dimension, normalement, tu gardes la précision d'origine.
Je crois que tu devrais quand même tester cette solution.

Bien à toi ...


--
Marcel Berman
c/o Managing Business SPRL
Allée du Petit Paris, 11
B - 1410 - Waterloo
Tel : +32 2 351.60.64
Fax : +32 2 351.45.78
Gsm : +32 475.799.477
Posted on March, 31 2004 - 12:27 AM
Salut !

On 30-Mar-2004, "yvan" <yvan.pomes@pi.be> wrote:

Merci beaucoup pour votre aide. Je ne caonnaissais pas Transfert(). Mais
j'ai
encore un souci au niveau des nombres réels car la syntaxe impose de
transférer
d'une "chaine de taille fixe" vers une autre "chaine de taille fixe". J'ai
sauvegardé la chaine de destination dans un fichier mmo mais là je ne
retrouve
plus mes valeurs. A+
Yvan


Bon, moi j'ai pas essayé, mais je crois que pour commencer tu devrais donner
à ta chaine une longueur compatible avec la taille de ton tableau ( vérifie
la longueur pour le type de variable utilisée et multiplie par le nombre
d'élément de ton tableau)
si ce sont des réels codés sur 8 octets et que tu en as mille, ta chaine
devrait avoir une longueur de 8000 caractères.
Pour tester tu pourrais essayer le code suivant :

local
cTableau est une chaine fixe sur 8000
tTableau1 est un tableau de 1000 réels
tTableau2 est un tableau de 1000 réels

// tu remplis ton tableau
....
// Tu transfère
transfert(&cTableau,&tTableau1,8000)
// Tu remplis l'autre tableau
transfert(&tTablleau2,&cTableau,8000)
// tu peux alors tester si chaque élément du tableau2 est bien égal à
l'élément correspondant du tableau1

Si je ne me trompe pas, je crois que cela devrait fonctionner.

Sinon ... fait une requète au Support gratuit, ils devraient pouvoir t'aider
!

Bien à toi



Marcel.berman@managingbusiness.be wrote:

Salut !

Mon but est justement de ne pas passer par une chaine pour ne pas perdre
de

précision dans les observations.
Est-ce que WD permet de sauver et récupérer une zone mémoire dans sa
forme
binaire ?
Merci de votre aide
Yvan

La fonction transfert() devrait être reversible.
Comme cette fonction transfère le contenu de la mémoire à partir d'une
adresse mémoire (représentée par le pointeur de la première variable)
vers
une autre adresse mémoire ( représentée par le pointeur de la seconde
variable),
si tu transfères un tableau dans une chaine, puis cette chaine dans un
tableau de même dimension, normalement, tu gardes la précision d'origine.
Je crois que tu devrais quand même tester cette solution.

Bien à toi ...




--
Marcel Berman
c/o Managing Business SPRL
Allée du Petit Paris, 11
B - 1410 - Waterloo
Tel : +32 2 351.60.64
Fax : +32 2 351.45.78
Gsm : +32 475.799.477