|
| Iniciado por jlamie, 30,jul. 2019 11:17 - 17 respuestas |
| |
| | | |
|
| |
| Publicado el 30,julio 2019 - 11:17 |
Bonjour,
Il est dit dans la doc qu'une chaine n'est limitée en longueur par la taille de la mémoire vive.
J'observe une limitation de mon côté. Je déclare 1 chaine de caractère que j'alimente via un += dans une boucle avec une autre chaine de caractère issue d'un fichier externe.
Rien de sorcier à ce niveau là. Sauf que ma chaine est invariablement tronquée au milieu d'une itération, et ce à une position qui n'est meme pas la fin de la chaine récupérée du fichier.
Ma mémoire vive n'est pas en cause, il me reste 4 Go de libre.
Avez vous rencontré ce souci et avez vous trouvé une solution ? Merci d'avance de votre aide.
didier |
| |
| |
| | | |
|
| | |
| |
| Publicado el 30,julio 2019 - 11:54 |
Je précise que Windev indique dans le débogueur que la variable a été tronquée à 200 Ko. Par contre rien sur la raison de ce tronquage, que je n'ai pas demandé bien entendu.

|
| |
| |
| | | |
|
| | |
| |
Miembro registrado 54 mensajes |
|
| Publicado el 30,julio 2019 - 12:22 |
Bonjour,
Vérifiez que la chaine n'est pas tronqué à partir du fichier externe, avant même qu'elle soit ajouter à votre variable dans la boucle. Le fichier à peut être des limitations. |
| |
| |
| | | |
|
| | |
| |
| Publicado el 30,julio 2019 - 12:32 |
Bonjour,
Merci pour votre contribution.
Mais ce n'est pas cela, la chaine dans le fichier est complète, et le tronquage se fait alors que même pas 10% du fichier a été lu.
Au niveau du fichier d'import, tout semble propre. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.361 mensajes |
|
| Publicado el 30,julio 2019 - 13:04 |
Bonjour, Cela ne proviendrait-il pas de caractères spéciaux du genre ETX, EOT etc...
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 2.321 mensajes |
|
| Publicado el 30,julio 2019 - 13:57 |
Bonjour,
Je vous suggère de faire un test dans un bouton avec une boucle infinie :
MaChaîne est une chaîne i est un entier BOUCLE i++ MaChaîne += "1234567890" Trace(i) FIN
-- Bon dev, Jean-Pierre |
| |
| |
| | | |
|
| | |
| |
| Publicado el 30,julio 2019 - 13:59 |
Bonjour,
Je ne pense pas que ça coupe à cause d'un caractère spécial, ça coupe au beau milieu d'une adresse mail, et bien avant l'arobase. En fait, ca coupe au niveau de l'underscore : cont_act@xxxxxxxxx.fr.
De plus le deboggeur indique avoir tronqué lui même, ce qui signifie bien que la variable fut plus longue avant... |
| |
| |
| | | |
|
| | |
| |
| Publicado el 30,julio 2019 - 14:10 |
Bonjour Jean-Pierre,
Merci pour votre réponse. J'ai réalisé votre test, mais je me suis permis d'y apporter une petite modif : je boucle 20000 fois, et je ne trace la variable qu'à la fin dans le debugger.
Le résultat est tronqué également, à la 18938 itération. Voyez plutôt.

|
| |
| |
| | | |
|
| | |
| |
| Publicado el 30,julio 2019 - 14:21 |
Tiens, même en Windev 23, je viens de faire l'essai. Ca tronque pas au même endroit, mais ca tronque, et ça le dit...
Rien n'est indiqué dans la doc sur cette histoire de tronquage que je ne demande pas...

|
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.361 mensajes |
|
| Publicado el 30,julio 2019 - 14:42 |
Un problème de pile d'appel saturée peut être.
Que donne la fonction ChaineConstruit ?
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 54 mensajes |
|
| Publicado el 30,julio 2019 - 14:56 |
Voroltinquo a écrit :
Un problème de pile d'appel saturée peut être.
Que donne la fonction ChaineConstruit ?
-- Il y a peut être plus simple, mais, ça tourne
Oui ça vient peut être des piles du pc, elles doivent être usés, essayez de les changer pour voir.
Plus sérieusement, je suis curieux de ce que ChaineConstruit() donne.Mensaje modificado, 30,julio 2019 - 14:57 |
| |
| |
| | | |
|
| | |
| |
| Publicado el 30,julio 2019 - 15:17 |
Franchement, je teste dans un projet tout neuf ou il n'y a que ces 12 lignes de codes, donc la pile d'appel est relativement pépère...
Voici le test avec un ChaineConstruit. Pas mieux. Mon test en WD23, mais c'est pareil en 24. Et pareil en compilé sur une autre machine.

|
| |
| |
| | | |
|
| | |
| |
| Publicado el 30,julio 2019 - 15:18 |
Voici le code, vous pouvez essayer de votre côté pour voir ? Merci pour votre aide.
MaChaîne, sMachainecomplete est une chaîne MaChaîne = "%1 [%TAB%] %2"
i est un entier = 20000 BOUCLE (i) i sMachainecomplete += RC + ChaîneConstruit(MaChaîne,i,"1234567890") FIN
STOP |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.361 mensajes |
|
| Publicado el 30,julio 2019 - 15:18 |
Snelhard a écrit :
Oui ça vient peut être des piles du pc, elles doivent être usés, essayez de les changer pour voir.
Je parlais de la call stack
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 54 mensajes |
|
| Publicado el 30,julio 2019 - 16:02 |
didier a écrit :
Voici le code, vous pouvez essayer de votre côté pour voir ? Merci pour votre aide.
MaChaîne, sMachainecomplete est une chaîne MaChaîne = "%1 [%TAB%] %2"
i est un entier = 20000 BOUCLE (i) i-- //MaChaîne += RC + i + TAB + "1234567890" sMachainecomplete += RC + ChaîneConstruit(MaChaîne,i,"1234567890") FIN
STOP
Je n'ai pas le message "Votre variable a été tronquée à 200ko" , mais à la ligne 18040 j'ai le <TA |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 32 mensajes |
|
| Publicado el 30,julio 2019 - 16:19 |
C'est juste dans le déboggeur qu'elle est tronquée (pour l'affichage). Si vous faites un info(taille(sMachainecomplete)) à la fin, est-ce qu'elle est cohérente ? |
| |
| |
| | | |
|
| | |
| |
| Publicado el 30,julio 2019 - 16:20 |
Snelhard a écrit :
> Je n'ai pas le message "Votre variable a été tronquée à 200ko" , mais à la ligne 18040 j'ai le <TA
Donc vous reproduisez mon problème... Même si le texte d'information n'est pas indiqué, le résultat est le même. La variable ne contient pas ce qu'elle devrait contenir. Sachant que dans notre cas, le numéro de ligne est un compte à rebours, la variable contient 1960 itérations de la boucle qui en comptait 20000 !
Depuis quand Windev se permet de tronquer le contenu d'une variable ???
C'est extrêmement problématique. |
| |
| |
| | | |
|
| | |
| |
| Publicado el 30,julio 2019 - 16:51 |
fbal a écrit :
C'est juste dans le déboggeur qu'elle est tronquée (pour l'affichage). Si vous faites un info(taille(sMachainecomplete)) à la fin, est-ce qu'elle est cohérente ?
Je ne sais pas dire si la taille est cohérente. Par contre en effet, si j'enregistre la chaine dans un fichier texte, elle est complète.
Je trouve complètement con de ne pas avertir que l'affichage est tronqué, et surtout de ne pas avoir la possibilité d'afficher nos variables en entier. Le deboggeur est fait pour debogger...
Merci de votre aide. Cela résout mon problème, car ma variable chaine contenait une erreur SQL dans la partie masquée.
didier |
| |
| |
| | | |
|
| | | | |
| | |
|