[WD55-WD7] migration non réussie :-( gestion de l'adresse en mémoire d'un fichier HF.
4 réponses
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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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 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 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:
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
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" <el@netcourrier.com> a écrit dans le message news:
bitak6$1l0$1@news-reader1.wanadoo.fr...
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
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
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+
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+
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+