Objet requis + nom de fichier ?

Résolu
pyb54 Messages postés 33 Date d'inscription mercredi 2 juillet 2008 Statut Membre Dernière intervention 15 février 2010 - 19 juin 2009 à 09:38
pyb54 Messages postés 33 Date d'inscription mercredi 2 juillet 2008 Statut Membre Dernière intervention 15 février 2010 - 24 juin 2009 à 09:13
Bonjour à tous, voila j'ai un problème avec un code en vbscript, censé copier le contenu de plusieurs fichiers situés dans un même dossier dans un nouveau fichier texte. l'ennui c'est que lorsque je lance mon script j'ai un problème à la ligne : Do Until ParcourtFichier.AtEndOfStream 

 sachant que parcourtfichier contient le nom du fichier actuellement ciblé (avec une msgbox avant il me donne le nom du fichier), seulement il me produit une erreur "Objet requis : + le nom du fichier ciblé "

je sèche carrément la, si quelqu'un peut éclairer ma lanterne ;)

code :

Dim objFSO, oFSO, sFile, DossierOrigine, objFichier, objfile, ParcourtFichier


Const ForReading = 1
Const ForWriting = 2
Set objDictionary = CreateObject("Scripting.Dictionary")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set oFSO = CreateObject("Scripting.FileSystemObject")
set DossierOrigine = oFSO.GetFolder("C:\Documents and Settings\test")
set sFile = DossierOrigine.files


For Each objFichier in sFile
 ParcourtFichier = objFichier.name
 Do Until ParcourtFichier.AtEndOfStream
  strName = sFile.ReadLine
  If Not objDictionary.Exists(strName) Then
   objDictionary.Add strName, strName
  End If
 Loop
 sFile.Close
 Set objFSO = Nothing
 Set ParcourtFichier = Nothing
Next

5 réponses

cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
20 juin 2009 à 09:24
 Bonjour,

En plus de la remarque de Mayzz (bonjour), il est inutile de tester l'existence de la clé du dictionnaire.
arrDicoKeys est superflu dans cet exemple !

Option Explicit
Const ForReading = 1
Const ForWriting = 2
Dim objFso, objDico
Dim strPath, MyFileTxt

strPath = "D:\test"
MyFileTxt = "d:\RESULTAT.txt"

Set objFso = CreateObject("Scripting.FileSystemObject")
Set objDico = CreateObject("Scripting.Dictionary")

Call CreateDictionary(objFso.GetFolder(strPath))
Call CreateTextResult(objDico, MyFileTxt)

Set objFso = Nothing
Set objDico = Nothing
WScript.Quit

Sub CreateDictionary(argFolder)
    Dim objFile
    For Each objFile In argFolder.Files
        objDico.Add objFile, objFso.OpenTextFile(objFile, ForReading).ReadAll
    Next
End Sub

Sub CreateTextResult(argDico, argFile)
    Dim arrDicoItems, arrDicoKeys, objTextResult, i
    Set objTextResult = objFso.OpenTextFile(argFile, ForWriting, True)

    arrDicoKeys = argDico.Keys
    arrDicoItems = argDico.Items

    For i = 0 To argDico.Count -1
        objTextResult.Write "Contenu du fichier " & arrDicoKeys(i) & vbcrlf
        objTextResult.Write arrDicoItems(i) & vbcrlf
    Next
    objTextResult.Close
    Set objTextResult = Nothing
End Sub

jean-marc
3
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
19 juin 2009 à 11:46
 Bonjour,

Erreur dans l'utilisation du stream:
Set ObjTextStream = Fso.OpenTextFile(Path & Fichier_Entree1, 1)
Do While Not ObjTextStream.AtEndOfStream
...
Loop

Exemple en passant par un tableau

Option Explicit
Dim Path
Path = "D:\test"
Const MyFileAppend = "D:\RESULTAT.txt"
MsgBox ShowFolderList(Path),vbInformation,_
       "Fichiers mis en append dans " & MyFileAppend
 
Function ShowFolderList(strPath)
   Dim objFso, objFile, strFilesInclus, imax
   Set objFso = CreateObject("Scripting.FileSystemObject")

   imax = 0
   For Each objFile in objFso.GetFolder(strPath).Files
       ReDim Preserve arrFiles(imax)
       arrFiles(imax) = objFile.Path
       imax = imax + 1
       strfilesInclus = strFilesInclus &vbCr& imax & _
                        vbTab & objFile.Name
   Next

   Call ReadFiles(arrFiles)
   ShowFolderList = strFilesInclus
   Set objFso = Nothing
End Function

Function ReadFiles(arrFiles)   Const ForReading 1,ForWriting 2
   Dim objFso, objTextResult, i
   Set objFso = CreateObject("Scripting.FileSystemObject")
   Set objTextResult = objFso.OpenTextFile(MyFileAppend, 2, True)

   'Lecture du Tableau de fichier
   For i = LBound(arrFiles) To UBound(arrFiles)
       Dim objTextFile, strLines
       'Ouverture en lecture du fichier issu du tableau
       Set objTextFile = objFso.OpenTextFile(arrFiles(i),ForReading)
       'Verif si fichier non vide
       If objFso.GetFile(arrFiles(i)).Size <> 0 Then
          strLines = objTextFile.ReadAll
          'Ecriture fichier result
          objTextResult.Write strLines & vbcrlf      
       End If  
       objTextFile.Close
       Set objTextFile = Nothing
   Next
   objTextResult.Close
   Set objTextResult = Nothing
   Set objFso = Nothing
End function

jean-marc
0
pyb54 Messages postés 33 Date d'inscription mercredi 2 juillet 2008 Statut Membre Dernière intervention 15 février 2010
19 juin 2009 à 12:33
Bonjour Jean marc, merci de me répondre^^ alors mon problème ( grâce à toi) à évolué ^^
en mieux évidemment, il me reste cependant un obstacle à franchir, j'ai maintenant l'erreur " fichier introuvable " alors que j'ai vérifié hein, le fichier est la, dans le bon dossier, avec le bon chemin et pourtant il le voit pas, voici le code actuel désormais :

Dim objFSO, oFSO, sFile, DossierOrigine, objFichier, objfile, ParcourtFichier, FSO


Const ForReading = 1
Const ForWriting = 2
Set objDictionary = CreateObject("Scripting.Dictionary")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set FSO = CreateObject("Scripting.FileSystemObject")
set DossierOrigine = oFSO.GetFolder("C:\Documents and Settings\test")
set sFile = DossierOrigine.files


For Each objFichier in sFile
 ParcourtFichier = objFichier.name
 Set ObjTextStream = Fso.OpenTextFile(DossierOrigine & ParcourtFichier, 1)
 Do While Not ObjTextStream.AtEndOfStream
  strName = ObjTextStream.ReadLine
  If Not objDictionary.Exists(strName) Then
   objDictionary.Add strName, strName
  End If
 Loop
 ObjTextStream.Close
 Set objFSO = Nothing
 Set ParcourtFichier = Nothing
Next
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
19 juin 2009 à 20:56
salut,

Je n'ai pas eu le temps de regarder ton script en détails, mais attention au "" pour les dossier le FSO les retournes au formats "X:\Dossier" et pour les lecteurs le chemin sera "X:"

Donc à la concaténation Chemin = Dossier & Fichier, bien vérifier que le \ est présent entre les deux. D'autre part, pas besoin de déclarer 3 fois un objet fso. tu peux n'avoir qu'à instancier une fois et t'en servir pour plusieurs fonctions ex:

Set FSO = CreateObject("Scripting.FileSystemObject")

set Dossier = FSO.GetFolder("chemin")
set Fichier = FSO.GetFile(Chemin)

If FSO.FileExists(chemin) then

end if

Set FSO = Nothing

@+ Mayzz.

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pyb54 Messages postés 33 Date d'inscription mercredi 2 juillet 2008 Statut Membre Dernière intervention 15 février 2010
24 juin 2009 à 09:13
Désoler de répondre que maintenant ! (tombé malade à la fête de la musique...)

Bref merci pour les conseil Mayzz, j'avoue que je ne savais pas si je devais à chaque fois recrée un objet Fso pour mon code, j'ai re vérifié les "" mais j'avais toujours le même problème puis j'ai testé le code de Jean-marc qui... fonctionne nikel

J'ai encore du chemin lol merci à vous, vraiment !!
0
Rejoignez-nous