Page 1 sur 1

[R] Suppression dans un array par _ArrayDelete

Posté : ven. 12 déc. 2008 13:37
par lutin44
Bonjour à tous, ca faisait un petit moment que je n'étais pas venu sur le forum, mais pour les besoins du boulot, je construis un script qui me pose un petit soucis.
En fait avec ce script je crée un map réseau dans lequel je scan tous les fichiers *.sms , ensuite je les envois dans un fichier texte pour les ressortir dans un array. Le truc c'est que parmis les fichiers ayant cette extansion certains ne m'interessent pas, et je voudrais les supprimer de l'array ce sont ceux portant le nom "template".
en fait mon script ne me les supprime pas tous, il m'en laisse :oops: , et là je ne vois pas ou je fais une erreur.
quelqu'un aurait-il une suggestion?

ci-joint le script et le fichier joint text2.txt

Merci par avance de vos réponses

Code : Tout sélectionner

#include <Constants.au3>
#Include <File.au3>
#Include <Array.au3>
dim $aArray
$srvmap=@LogonServer
DriveMapAdd ( "k:",$srvmap&"\smspkgp$")
msgbox(48,"chemin trouvé",@LogonServer,3)

$rechechem=run(@ComSpec&" /c "&"dir /B /S K:\SMSPKG\*.sms","",@SW_HIDE,$STDOUT_CHILD)
sleep(11000)
$chemtrouv = StdoutRead($rechechem)
msgbox(48,"chemin trouvé",$chemtrouv,3)
FileWrite("c:\temp\test2.txt",$chemtrouv)
$filelist=_FileReadToArray("c:\temp\test2.txt",$aArray)
_ArrayDisplay($aArray,"$filelist")

$arraysearch=_ArrayFindAll($aArray,"template","","",0,1)
_ArrayDisplay($arraysearch,"$arraysearch")
For $i = 1 To $arraysearch[0]
    _ArrayDelete($aArray, $arraysearch[$i])
Next
_ArrayDisplay($aArray,"$aArrayDelete")
FileDelete("c:\temp\test2.txt")
 
ps: le script en est encore qu'à l'essai donc il y a plein de msgbox, mais je les enlèverais après.
test2.txt
(2.03 Kio) Téléchargé 68 fois

Re: Suppression dans un array par _ArrayDelete

Posté : ven. 12 déc. 2008 18:47
par olaiv
Salut ,

Utiliser _ArrayDelete dans une boucle te redimensionne ton tableau à chaque fois et les index de lignes à supprimer comprises dans le résultat de ton _ArrayFindAll deviennent forcement fausse.

Avec un peu de bidouille j'arrive à ça mais il y a surement moyen de faire mieux.

Code : Tout sélectionner

#include <Constants.au3>
#Include <File.au3>
#Include <Array.au3>
dim $aArray
$srvmap=@LogonServer
DriveMapAdd ( "k:",$srvmap&"\smspkgp$")
msgbox(48,"chemin trouvé",@LogonServer,3)

$rechechem=run(@ComSpec&" /c "&"dir /B /S K:\SMSPKG\*.sms","",@SW_HIDE,$STDOUT_CHILD)
sleep(11000)
$chemtrouv = StdoutRead($rechechem)
msgbox(48,"chemin trouvé",$chemtrouv,3)
FileWrite("c:\temp\test2.txt",$chemtrouv)
$filelist=_FileReadToArray("c:\temp\test2.txt",$aArray)
_ArrayDisplay($aArray,"$filelist")

$arraysearch=_ArrayFindAll($aArray,"template","","",0,1)
_ArrayDisplay($arraysearch,"$arraysearch")

For $i = 1 To UBound($arraysearch)
    _ArrayDelete($aArray, $arraysearch[$i-1])
    If $i=UBound($arraysearch) Then ExitLoop
    $arraysearch[$i]-=$i
Next

_ArrayDisplay($aArray,"$filelist")



 

Re: Suppression dans un array par _ArrayDelete

Posté : ven. 12 déc. 2008 19:36
par Tlem
Pour supprimer des éléments d'un tableau sans être embêté par le re-dimensionnement, il vaut mieux commencer par la fin pour finir au début. ;)

Faites donc votre boucle en sans inverse :

Code : Tout sélectionner

For $i = 10 to 1 Step -1

Re: Suppression dans un array par _ArrayDelete

Posté : mar. 23 déc. 2008 11:08
par lutin44
Merci a tous les deux, ça y est avec votre aide j'ai pu terminer mon script :D et en faire profiter les collegues :mrgreen: , je clos le sujet, du coup.
Bonnes fêtes de fin d'années et à bientôt pour de nouvelles aventures :wink:

Salut