Code marche pas need aide

Code marche pas need aide - VB/VBA/VBS - Programmation

Marsh Posté le 11-06-2010 à 10:59:58    

Bonjour,
 
je voudrais que mon programme aille dans c:\QUEUS\cro\rebut et que les fichier qu'il y a dans x il les regarde un par un et supprime les fichiers contenant les mot "na" .
 
 
 
 
Petit code préalable que j'ai fait mais sans succèes j'ai besoin que vous me le conpléter .
Merci d'avance j'espère que vous m'aiderez  
 
 
 

Code :
  1. Dim stRep 'c:\QUEUS\cro\rebut
  2. Dim oFSO,oFl
  3. Set oFSO = CreateObject("Scripting.FileSystemObject" )
  4. stRep = "C:\Tmp"
  5. If oFSO.FolderExists(stRep) Then
  6. For each oFl in  oFSO.GetFolder(stRep).Files
  7.    Wscript.Echo oFl.Name
  8. Next
  9. End If
  10. Const ForReading = 1, ForWriting = 2
  11.   Dim oFso, f
  12.   Set oFso = CreateObject("Scripting.FileSystemObject" )
  13.   Set f = oFso.OpenTextFile("c:\QUEUS\cro\rebut", ForReading)
  14.   Wscript.echo f.ReadAll
  15.   f.Close
  16. pos = InStr(0, "na" )    'renvoie 24
  17. pos = InStr(0,"na)   'renvoie 0
  18. File.Delete("c:\QUEUS\cro\rebut" )
  19. Console.WriteLine("Fichier c:\QUEUS\cro\rebut supprimé" )


 
Coordialement, .Toxyco.
 

Reply

Marsh Posté le 11-06-2010 à 10:59:58   

Reply

Marsh Posté le 11-06-2010 à 11:11:09    

C'est du VBS.
Ce code a l'air correct au point de vue de la syntaxe.
 
Pourquoi ça ne marche pas ? A quel endroit ? Où est le problème ?
 
Je devine qu'il faudrait tester si pos est 0 ou non, pour supprimer ou pas le fichier.
 
Si les fichiers contiennent des données binaires, cela ne marchera pas, car vous utilisez OpenTextFile, qui, comme son nom l'indique, ouvre des fichiers "textes", et pas des fichiers "binaires".

Reply

Marsh Posté le 11-06-2010 à 11:12:49    

Merci pour la reponse. J'ai pas mis en relation supprimer le fichier si la recherche est bonne .

Reply

Marsh Posté le 11-06-2010 à 11:17:15    

Beaucoup de code inutile dans son code :
- lignes 5 à 9 : pourquoi afficher le nom de chaque fichier rencontré dans le répertoire ?
- ligne 12 : pourquoi recréer un second objet FileSystemObject alors qu'il en existe déjà un ?
- lignes 16 et 17 : rien compris... elle est où la chaine dans laquelle les occurences de "na" doivent être recherchées ? et pourquoi 2 lignes (dont une avec une erreur, la 17 : il manque une guillemet fermante)
Et la condition de suppression en cas d'occurence trouvée, elle est où ? Le File.Delete se fait inconditionnellement...
 
Bref, ce code a un gros problème d'algo. Je te suggère de tout refaire sur papier, et de bien séparer les différentes étapes du traitement parce que là, c'est n'importe quoi.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 11-06-2010 à 11:21:32    

Je sait pas faire une suppression en cas d'occurence trouvée.

Reply

Marsh Posté le 11-06-2010 à 11:24:06    

J'ai fait les modification que tu ma dit il en manque quelque une mais je suis pas bon en bvs.  

Code :
  1. Dim stRep 'c:\QUEUS\cro\rebut
  2. Dim oFSO,oFl
  3. Set oFSO = CreateObject("Scripting.FileSystemObject" )
  4. stRep = "C:\Tmp"
  5. End If
  6. Const ForReading = 1, ForWriting = 2
  7.   Dim oFso, f
  8.   Set f = oFso.OpenTextFile("c:\QUEUS\cro\rebut", ForReading)
  9.   Wscript.echo f.ReadAll
  10.   f.Close
  11. pos = InStr(0, "na" )    'renvoie 24
  12. pos = InStr(0,"na" )   'renvoie 0
  13. File.Delete("c:\QUEUS\cro\rebut" )
  14. Console.WriteLine("Fichier c:\QUEUS\cro\rebut supprimé" )


 

Reply

Marsh Posté le 11-06-2010 à 11:32:28    

A quel moment dans ton code tu demandes de supprimer le fichier si celui ci contient les lettres "na" ? Ce n'est pas une question d'être bon en VBS ou pas, mais une question d'algo : à la ligne 13, tu effaces un fichier (rebut), dont on se demande ce qu'il vient faire là (a t'il les lettres "na" dans son nom ? non. Alors pourquoi l'effacer ?). Mais tu n'associes aucune condition à cet effacement.
Reprends tout depuis le début, et décompose les différentes tâches de ton traitement.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 11-06-2010 à 12:15:52    

C'est mieux ou pas ?  

Code :
  1. Dim stRep 'c:\QUEUS\cro\rebut
  2. Dim oFSO,oFl
  3. Set oFSO = CreateObject("Scripting.FileSystemObject" )
  4. stRep = "C:\QUEUS\cro\rebut"
  5. End If
  6. Const ForReading = 1, 
  7.   Dim oFso, f
  8.   Set f = oFso.OpenTextFile("c:\QUEUS\cro\rebut", ForReading)
  9.   Wscript.echo f.ReadAll
  10.   f.Close
  11. pos = InStr(0, "na" )    'renvoie 24
  12. pos = InStr(0,"na" )   'renvoie 0
  13. If UCase = "na" then AFile.Delete


Message édité par toxyco le 11-06-2010 à 12:16:24
Reply

Marsh Posté le 11-06-2010 à 12:18:11    

Tu fais n'importe quoi, tu ne déclares rien, tu marches à l'aveuglette... la ligne 13 ne ressemble à rien du tout


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 11-06-2010 à 12:20:01    

éclaire moi stp ....

Reply

Marsh Posté le 11-06-2010 à 12:20:01   

Reply

Marsh Posté le 11-06-2010 à 12:24:54    

- UCase est une fonction, et toi tu l'utilises comme variable : http://msdn.microsoft.com/en-us/li [...] S.85).aspx
- AFile, c'est quoi ? Tu ne déclares cette variable nulle part...
- Les lignes 11 et 12 sont identiques et totalement inutiles (le seul truc à garder c'est InStr, qui te permet effectivement de rechercher une occurence d'une chaine dans une autre, mais que tu emploies n'importe comment)
- et j'en passe....


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 11-06-2010 à 14:28:39    

Hello
 
Comme le dit Harkonnen, pose ton algorithme calmement.
 
Pas obligé de faire un truc super compliqué. Moi de ce que j'en ai compris, tu veux supprimer les fichiers qui se trouvent dans le dossier <rebut> si leur nom contient "na"
 
C'est tres simple a poser
 
Pour chaque fichier dans <rebut>
    Si "na" est dans le nom alors on supprime le fichier
    Fin si
Suivant
 
Donc ton script en VBS ne devrait pas faire 13 lignes mais 6/7 a tout casser.
Tu prends l'algo ennoncé juste avant, et tu le transcris en VBS. Et si tu as bien declaré tes variables ca roule tout seul.


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 11-06-2010 à 15:08:47    

oui mais pour faire sa faut que mon algo contienne  
 
aille dans rebut l'ouvre, le li et recherche dedans et apres suprime si na est dedans sa fait pas 6/7 ligne nn ?

Reply

Marsh Posté le 11-06-2010 à 15:16:42    

j'i fait sa qui marche il va chercher et ouvre le fichier.  

Code :
  1. Dim stRep
  2. stRep="c:\QUEUS\cro\rebut"
  3. Dim oFSO,oFl
  4. Set oFSO = CreateObject("Scripting.FileSystemObject" )   
  5. If oFSO.FolderExists(stRep) Then   
  6. For each oFl in  oFSO.GetFolder(stRep).Files
  7.    Wscript.Echo oFl.Name
  8. Set WshShell = WScript.CreateObject("WScript.Shell" )
  9. Next
  10. end if

Reply

Marsh Posté le 11-06-2010 à 15:49:37    

Déjà si tu ecrivais en français c'est clair que ca aiderait...
 

Citation :

il les regarde un par un et supprime les fichiers contenant les mot "na"

Moi j'avais compris dans le nom du fichier. Rien a voir avec ma remarque du dessus.
 
Declare tes variables sinon en vbs ca tournera pas, mais en gros ca donnerait ca

Code :
  1. Sub test()
  2.     RepertoireSource = "c:\QUEUS\cro\rebut" 'on defini le repertoire source
  3.     Set objFSO = CreateObject("Scripting.FileSystemObject" ) 'creation des objet FSO
  4.     Set objDossier = objFSO.GetFolder(RepertoireSource) 'On recupere le dossier
  5.     If (objDossier.Files.Count > 0) Then 's'il le dossier contient des fichiers
  6.         For Each objFichier In objDossier.Files 'pour chaque fichiers dans le dossier
  7.             Set Txt = objFSO.GetFile(objFichier.Path).OpenAsTextStream(1) 'on ouvre le fichier en lecture
  8.             If Txt.AtEndOfStream = False Then 's'il n'est pas vide (vu qu'on utilise ReadAll
  9.                 If InStr(1, Txt.ReadAll, "na" ) <> 0 Then 'Si le fichier contient "na"
  10.                     Set Txt = Nothing 'On enleve la reference sinon on peut pas supprimer le fichier vu qu'il est ouvert
  11.                     objFSO.deletefile objFichier.Path, True 'on supprime le fichier
  12.                 End If
  13.             End If
  14.         Next
  15.     End If
  16. End Sub

Message cité 2 fois
Message édité par SuppotDeSaTante le 11-06-2010 à 15:50:58

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 11-06-2010 à 15:55:55    

SuppotDeSaTante a écrit :

Déjà si tu ecrivais en français c'est clair que ca aiderait...

 
Citation :

il les regarde un par un et supprime les fichiers contenant les mot "na"

Moi j'avais compris dans le nom du fichier. Rien a voir avec ma remarque du dessus.

mais bondieu, j'avais compris la même chose [:mlc]


Message édité par Harkonnen le 11-06-2010 à 15:56:18

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 14-06-2010 à 12:03:03    

Merci de ton aide . j'ai essayer le code il ne supprime pas mais il marche bien et s'exécute .

Reply

Marsh Posté le 14-06-2010 à 14:59:03    

Poste ton code ;)


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 14-06-2010 à 15:26:23    

Code :
  1. Sub test()
  2.     RepertoireSource = "c:\QUEUS\cro\rebut"
  3.     Set objFSO = CreateObject("Scripting.FileSystemObject" )
  4.     Set objDossier = objFSO.GetFolder(RepertoireSource)
  5.     If (objDossier.Files.Count > 0) Then
  6.         For Each objFichier In objDossier.Files
  7.             Set Txt = objFSO.GetFile(objFichier.Path).OpenAsTextStream(1)
  8.               If Txt.AtEndOfStream = False Then
  9.                 If InStr(1, Txt.ReadAll, "na" ) <> 0 Then
  10.                     Set Txt = Nothing
  11.                     objFSO.deletefile objFichier.Path, True
  12.                 End If
  13.             End If
  14.         Next
  15.     End If
  16. End Sub
  17. wscript.echo "FIN"

Reply

Marsh Posté le 14-06-2010 à 16:31:54    

SuppotDeSaTante a écrit :

Declare tes variables sinon en vbs ca tournera pas, mais en gros ca donnerait ca


 
Je suis de bonne humeur et tu as l'air d'en chier :
Tu colles ca dans un fichier .vbs

Code :
  1. Dim RepertoireSource,objFSO,objDossier,Txt
  2.     RepertoireSource = "c:\QUEUS\cro\rebut"
  3.     Set objFSO = CreateObject("Scripting.FileSystemObject" )
  4.     Set objDossier = objFSO.GetFolder(RepertoireSource)
  5.     If (objDossier.Files.Count > 0) Then
  6.         For Each objFichier In objDossier.Files
  7.             Set Txt = objFSO.GetFile(objFichier.Path).OpenAsTextStream(1)
  8.               If Txt.AtEndOfStream = False Then
  9.                 If InStr(1, Txt.ReadAll, "na" ) <> 0 Then
  10.                     Set Txt = Nothing
  11.                     objFSO.deletefile objFichier.Path, True
  12.                 End If
  13.             End If
  14.         Next
  15.     End If
  16.     msgbox "Fin"


Message édité par SuppotDeSaTante le 14-06-2010 à 16:36:29

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 15-06-2010 à 09:02:55    

Merci beacoup .... = )

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed