OVH Cloud OVH Cloud

[WD55-WD7] migration non réussie :-( gestion de l'adresse en mémoire d'un fichier HF.

4 réponses
Avatar
el
Bonjour,

Ci dessous un code en WD5.5 qui fonctionne. Par contre migré en 7.5 (204g),
il plante avec un message d'erreur vide (aucune trace!). Tout cela vient du
fait de récupérer l'adresse mémoire du premier élément du fichier (fort
utile si on connait toute la description du fichier, pour écrire directement
en mémoire avec un source C).

Si qqun a une idée je suis preneur :-)

elecoest

TousLesFichiers est une chaîne
TousLesChamps est une chaîne
NumeroFichier est un entier
CeFichier est une chaîne
NomFichier est une chaîne
NumeroIndex est un entier
PrefixeFichier est une chaîne
TousLesIndex est une chaîne
AdresseBuffer est une chaîne
CetIndex est une chaîne
CeNomIndex est une chaîne
IdxCompose est une chaîne
AdresseIndex est une chaîne

// Chargement de la liste des fichiers avec leurs champs et leurs index
TousLesFichiers = HListeFichier( )
NumeroFichier = 1
CeFichier = "#"
TANTQUE CeFichier <> EOT
CeFichier = ExtraitChaîne( TousLesFichiers, NumeroFichier, RC )
SI CeFichier <> EOT ALORS
NomFichier = ExtraitChaîne( CeFichier, 1 )
PrefixeFichier = ExtraitChaîne( CeFichier, 2 )
TousLesChamps = HListeRubrique( NomFichier )
TousLesIndex = HListeClé( NomFichier )
AdresseBuffer = NomFichier + "." + ExtraitChaîne( TousLesChamps, 1 )
NumeroFichier++
Trace("["+CeFichier+"][&"+
&{ AdresseBuffer }+"]["+TousLesChamps+"]["+TousLesIndex +"]")
NumeroIndex = 1
CetIndex = "#"
TANTQUE CetIndex <> EOT
CetIndex = ExtraitChaîne( TousLesIndex, NumeroIndex, RC )
CeNomIndex = ExtraitChaîne( CetIndex, 1, TAB )
IdxCompose = ExtraitChaîne( CetIndex, 4, TAB )
IF Position( IdxCompose, "+" ) <> 0 ALORS
AdresseIndex = PrefixeFichier + "." + CeNomIndex
Trace("["+NomFichier+"]["+CeNomIndex+"][&"+ &{ AdresseIndex }+"]")
FIN
NumeroIndex++
FIN
FIN
FIN

4 réponses

Avatar
farplus
Bonjour

si tu écris:
info(&Nomfichier.nomchamp) tu auras cette réponse:
<l'opérateur & n'est autorisé que sur les variables> donc...

par ailleurs même s'il n'y avait pas cette limitation, (au fait regarde côté
API) il faudrait qu'au moins un enregistrement du fichier intéressé soit
chargé en mémoire donc il faut incorporer:

SI CeFichier <> EOT ALORS
NomFichier = ExtraitChaîne( CeFichier, 1 )
PrefixeFichier = ExtraitChaîne( CeFichier, 2 )
TousLesChamps = HListeRubrique( NomFichier )
TousLesIndex = HListeClé( NomFichier )
AdresseBuffer = NomFichier + "." + ExtraitChaîne( TousLesChamps, 1 )
NumeroFichier++



hlitpremier(nomfichier)
si pas hendehors alors

Trace("["+CeFichier+"][&"+
&{ AdresseBuffer }+"]["+TousLesChamps+"]["+TousLesIndex +"]")



...
fin




Avatar
Manu
Pour le hlp+F5 en WD75, j'y avais pensé. Par contre comment expliques-tu le
bon fonctionnement en WD55. Le tout fonctionne parfaitement en WD55 !


"farplus" a écrit dans le message news:
3f52e6ab$0$6240$
Bonjour

si tu écris:
info(&Nomfichier.nomchamp) tu auras cette réponse:
<l'opérateur & n'est autorisé que sur les variables> donc...

par ailleurs même s'il n'y avait pas cette limitation, (au fait regarde


côté
API) il faudrait qu'au moins un enregistrement du fichier intéressé soit
chargé en mémoire donc il faut incorporer:

> SI CeFichier <> EOT ALORS
> NomFichier = ExtraitChaîne( CeFichier, 1 )
> PrefixeFichier = ExtraitChaîne( CeFichier, 2 )
> TousLesChamps = HListeRubrique( NomFichier )
> TousLesIndex = HListeClé( NomFichier )
> AdresseBuffer = NomFichier + "." + ExtraitChaîne( TousLesChamps, 1 )
> NumeroFichier++

hlitpremier(nomfichier)
si pas hendehors alors

> Trace("["+CeFichier+"][&"+
> &{ AdresseBuffer }+"]["+TousLesChamps+"]["+TousLesIndex +"]")

...
fin
>
>




Avatar
el
en jouant avec le type d'indirection j'ai un message dans que s'est-il passé
: "Dump de l'erreur de module inconnu."

:-(
"el" a écrit dans le message news:
bitak6$1l0$
Bonjour,

Ci dessous un code en WD5.5 qui fonctionne. Par contre migré en 7.5


(204g),
il plante avec un message d'erreur vide (aucune trace!). Tout cela vient


du
fait de récupérer l'adresse mémoire du premier élément du fichier (fort
utile si on connait toute la description du fichier, pour écrire


directement
en mémoire avec un source C).

Si qqun a une idée je suis preneur :-)

elecoest

TousLesFichiers est une chaîne
TousLesChamps est une chaîne
NumeroFichier est un entier
CeFichier est une chaîne
NomFichier est une chaîne
NumeroIndex est un entier
PrefixeFichier est une chaîne
TousLesIndex est une chaîne
AdresseBuffer est une chaîne
CetIndex est une chaîne
CeNomIndex est une chaîne
IdxCompose est une chaîne
AdresseIndex est une chaîne

// Chargement de la liste des fichiers avec leurs champs et leurs index
TousLesFichiers = HListeFichier( )
NumeroFichier = 1
CeFichier = "#"
TANTQUE CeFichier <> EOT
CeFichier = ExtraitChaîne( TousLesFichiers, NumeroFichier, RC )
SI CeFichier <> EOT ALORS
NomFichier = ExtraitChaîne( CeFichier, 1 )
PrefixeFichier = ExtraitChaîne( CeFichier, 2 )
TousLesChamps = HListeRubrique( NomFichier )
TousLesIndex = HListeClé( NomFichier )
AdresseBuffer = NomFichier + "." + ExtraitChaîne( TousLesChamps, 1 )
NumeroFichier++
Trace("["+CeFichier+"][&"+
&{ AdresseBuffer }+"]["+TousLesChamps+"]["+TousLesIndex +"]")
NumeroIndex = 1
CetIndex = "#"
TANTQUE CetIndex <> EOT
CetIndex = ExtraitChaîne( TousLesIndex, NumeroIndex, RC )
CeNomIndex = ExtraitChaîne( CetIndex, 1, TAB )
IdxCompose = ExtraitChaîne( CetIndex, 4, TAB )
IF Position( IdxCompose, "+" ) <> 0 ALORS
AdresseIndex = PrefixeFichier + "." + CeNomIndex
Trace("["+NomFichier+"]["+CeNomIndex+"][&"+ &{ AdresseIndex }+"]")
FIN
NumeroIndex++
FIN
FIN
FIN




Avatar
farplus
Bonsoir,
en effet en Wd55 ça fonctionne.
Cela vient probablement du fait que Wd5.5 chargeait les fichiers et les
variables dans une zone mémoire unique, tandisque maintenant elle sont
séparées (utilisation des objets, instanciation, duplification) et qu'elle
est invisible par l'utilisateur.
A+