Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

comment est gérée la mémoire dans les scripts vbs ?

1 réponse
Avatar
Jean-Claude
Bonjour,

j'ai un script vbs qui parcours plusieurs dizaines ou centaines de fichiers,
lit leur contenu à la recherche de chaînes de caractères dans certaines
configurations... exemple simplifié :

set f = fso.opentextfile(file, 1, true)
while not f.atendofstream and not found
line = f.readline
if instr(line, str) <> 0 then found = true end if
wend
f.close

J'ai l'impression (pas évident de débuger du vbs) qu'à partir d'un certain
moment, "line" ne contient pas le texte du fichier qu'on vient d'ouvrir,
mais un ancien texte d'un précédent fichier. Un peu comme si la mémoire
était saturée et que le script ne pouvait plus stocker de donnée lue.
Savez-vous comment la mémoire est gérée dans un vbs ? Faut-il désallouer une
variable après l'avoir utilisée, comment (avec le nothing ?), et cela
suffit-il vraiment à restituer la mémoire ?

Merci bien.
JC

1 réponse

Avatar
mdnews
Tue, 28 Sep 2010 23:23:00 +0200, "Jean-Claude"
>>

Bonjour,

j'ai un script vbs qui parcours plusieurs dizaines ou centaines de fichiers,
lit leur contenu à la recherche de chaînes de caractères dans certaines
configurations... exemple simplifié :

set f = fso.opentextfile(file, 1, true)
while not f.atendofstream and not found
line = f.readline
if instr(line, str) <> 0 then found = true end if
wend
f.close

J'ai l'impression (pas évident de débuger du vbs) qu'à partir d'un certain
moment, "line" ne contient pas le texte du fichier qu'on vient d'ouvrir,
mais un ancien texte d'un précédent fichier. Un peu comme si la mémoire
était saturée et que le script ne pouvait plus stocker de donnée lue.
Savez-vous comment la mémoire est gérée dans un vbs ? Faut-il désallouer une
variable après l'avoir utilisée, comment (avec le nothing ?), et cela
suffit-il vraiment à restituer la mémoire ?




J'utilise plus le VBA, mais je pense que la base est commune à VBS

En VBA le séparateur de ligne reconnu pour la lecture par ligne (line
input #) est CR ou CR+LF et pas LF seul (c'est idiot, car il faut
alors bricoler pour lire les fichiers texte unix)

Du coup, la lecture par ligne lit _tout_ le fichier (jq EOF) et
l'affecte à la variable destinée à recevoir une seule ligne.

Si la variable qui prend la ligne n'est pas dimensionnée pour, ça peut
faire des c*nneries. (pourtant le basic est plus 'blindé' que le C
côté dépassement d'espace mémoire)

Donc, dans le doute j'aurais plutôt tendance à (ré)initialiser avant.
...
while ...
line = ""
line = f.readline
wend