IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

accès a plusieurs fichiers depuis un objet Scripting.FileSystemObject et optimisation


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 7
    Par défaut accès a plusieurs fichiers depuis un objet Scripting.FileSystemObject et optimisation
    Bonjour,

    J'ai une question concernant l'utilisation d'un seul objet "Scripting.FileSystemObject" pour ouvrir plusieurs fichiers.


    Ma question est la suivante:
    Laquelle des deux méthode est la plus optimisée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
      Set fso1 = CreateObject("Scripting.FileSystemObject")
     
     
      Set fs1 = fso1.OpenTextFile(OutputFile1, ForWriting,True)
      Set fs2 = fso1.OpenTextFile(OutputFile2, ForWriting,True)
      Set fs3 = fso1.OpenTextFile(OutputFile3, ForWriting,True)
     
      fs1.Writeline "mon texte"
      fs2.WriteLine  "mon texte"
      fs3.WriteLine  "mon texte"
     
      Set fso1 = nothing
      Set fs3 = nothing
      Set fs2 = nothing
      Set fs1 = nothing
    ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
      Set fso1 = CreateObject("Scripting.FileSystemObject")
      Set fso2 = CreateObject("Scripting.FileSystemObject")
      Set fso3 = CreateObject("Scripting.FileSystemObject")
     
      Set fs1 = fso1.OpenTextFile(OutputFile1, ForWriting,True)
      Set fs2 = fso2.OpenTextFile(OutputFile2, ForWriting,True)
      Set fs3 = fso3.OpenTextFile(OutputFile3, ForWriting,True)
     
      fs1.Writeline "mon texte"
      fs2.WriteLine  "mon texte"
      fs3.WriteLine  "mon texte"
     
      Set fso1 = nothing
      Set fso2 = nothing
      Set fso3 = nothing
      Set fs3 = nothing
      Set fs2 = nothing
      Set fs1 = nothing
    En sachant que les fichiers de sortie peuvent être volumineux


    Merci

  2. #2
    Membre Expert
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Par défaut
    Bonjour,

    A priori, je dirai qu'il est inutile (voire pénalisant) de créer plusieurs instances de FileSystemObject.

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 63
    Par défaut
    Réponse: la 1re méthode.

    Aussi il est bon de terminer d'écrire avec fs1.Close.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 8
    Par défaut
    Bonsoir,

    Pour les paresseux, plutôt plusieurs instances:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For i=1 to 3
    CreateObject("Scripting.FileSystemObject").OpenTextFile("OutputFile" & i,2,True).WriteLine "mon texte"
    Next

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 63
    Par défaut
    Raymix, ton truc ne peux marcher que si la variable "i" fait partie du nom du fichier. En d'autres mots: Ton truc ne marche pas parcequ'entre guillemet doit se trouver le chemin d'accès du fichier et non une variable. Si tu veux utiliser des noms variables avec incrémentation tu dois faire un "Execute" et exécuter le code. Mais ça devient compliqué quand on est novice.

    A la limite on peut insèrer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Execute "oof = OutputFile" & i
    Et utiliser la variable "oof" (ObjOutputFile) dans la formule suivante qui ouvre et écrit dans le fichier.

    Autre erreur: A chaque tour du For...Next tu réinstancies le FileSystemObject. Ce qui est anti-performant. En fait il faut instancié le plus d'objet possible avant le For...Next.

  6. #6
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par Fredledingue Voir le message
    Raymix, ton truc ne peux marcher .....
    non il marche le truc à Raymix... mais bon c'est vrai c'est pas trop "le top" cette création d'un objet FSO à chaque tour de boucle FOR... de plus en décomposant le code en plusieurs ligne c'est plus facile à débugger ...

Discussions similaires

  1. Comment récupérer le nom d'un fichier depuis un objet FILE ?
    Par amohr3010 dans le forum Bibliothèque standard
    Réponses: 8
    Dernier message: 05/10/2009, 22h11
  2. Récuperation de chemin d'acces de plusieurs fichiers.
    Par AngeDéchu dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 13/04/2008, 12h22
  3. Réponses: 5
    Dernier message: 03/04/2007, 16h11
  4. Copier plusieurs fichiers depuis MS-ACCESS 2002
    Par Gias Service dans le forum Access
    Réponses: 3
    Dernier message: 21/03/2007, 23h28
  5. Réponses: 6
    Dernier message: 18/05/2006, 09h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo