Page 1 sur 1

[R] Problèmes avec un boucle (je pense)

Posté : mer. 12 août 2015 13:57
par yoyox
Bonjour,

je rencontre actuellement un problèmes sur mon script suite à une boucle
► Afficher le texte
Le script fonctionne parfaitement jusqu'à la ligne en vert, la message box n’apparaît pas, aucune erreur de la part de scite

En revanche si je lance le script après l'avoir compilé, voici ce qui apparait

Error: Subscript used on non-accessible variable.

En gros voici ce que contient le fichier In.txt :
► Afficher le texte
c'est qu'une petite partie du texte (5 ligne), chaque paragraphe affiché sont en une seul ligne dans mon fichier

auriez vous une astuce pour trouver l'erreur ?

J'ai essayé chaque variable et tout à un résultat même $T, ca ne vient donc pas du code mais plutôt d'une erreur de codage de ma part non visible

Re: [..] Problèmes avec un boucle (je pense)

Posté : mer. 12 août 2015 14:35
par mikell
Merci de mettre une balise spoiler sur les longs codes/textes

J'ai eu un souci en testant sur le texte tel que posté, _FileReadToArray retourne des lignes vides dans l'array, et If $Search[7] => error
En utilisant un regex à la place

Code : Tout sélectionner

$In = StringRegExp(FileRead(@ScriptDir & "\In.txt"), '\V+', 3)
et en mettant For $i = 0 to... dans les boucles là ça va bien

Re: [..] Problèmes avec un boucle (je pense)

Posté : jeu. 13 août 2015 07:58
par yoyox
Mikell m'a aidé à comprendre

Le problème venait de cette partie

Code : Tout sélectionner

For $i=0 To Ubound($Out) - 1
   $Search = _StringBetween($Out[$i], "\Device\HarddiskVolume5", "   ID du handle")[0]
   $Search = StringRegExp($Search, '(\.[^."]+)$', 3)
   $Search = _ArrayToString($Search)
   If $Search <> ".tmp" Then
      $T += 1
   EndIf
ceci plus précisément : \Device\HarddiskVolume5

Dnas mon texte il n'y avait pas que HarddiskVolume5, il y a aussi des HarddiskVolume3 ce qui faisait planter mon _StringBetween

Voici la correction fournie par mikell :

Code : Tout sélectionner

; Local $debug2
For $i=0 To Ubound($Out) - 1
   $tmp = _StringBetween($Out[$i], "\Device\HarddiskVolume", "ID du handle")
        ; If not IsArray($tmp) Then Msgbox(0,"debug", $Out[$i])  ; error checking
        ; $Search = $tmp[0]
   $Search = StringRegExpReplace($tmp[0], '.*(\.\w+)\h*', "$1")
; $debug2 &= $Search & @crlf
   If $Search <> ".tmp" Then
      $T += 1
   EndIf
Next
; filewrite("debug2.txt", debug2)