1. #1
    Membre à l'essai
    Homme Profil pro
    Support interfaçage
    Inscrit en
    juin 2017
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Support interfaçage
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2017
    Messages : 40
    Points : 21
    Points
    21

    Par défaut Ajout d'un suffixe à tout un ensemble de fichier d'un répertoire

    Bonjour à tous,

    n'étant un expert vbs, j'aurai souhaité pouvoir ajouter un suffixe constant à chaque fin de ligne d'un fichier. Cela , j'y arrive.
    Mais je voudrai aller plus loin en faisant cela pour un répertoire donnée ( qui pourra être mis en dur dans le script) ainsi que tous les fichiers qui seront de types .txt

    Il faudrait que les anciens fichiers soient effacés, et que les nouveaux soient dans un répertoire donné.

    Pour résumer :

    1- j'ai 15 fichiers .txt dans le répertoire c:\TEMP\INPUT (défini dans le VBS qui ne changera jamais)
    2- j'ajoute par le vbs ci- dessous un suffixe (défini dans le VBS qui ne changera jamais)
    3- Déplacer les nouveaux fichiers dans le répertoire c:\TEMP\OUTPUT (défini dans le VBS qui ne changera jamais)
    4- effacer les fichiers tous les fichiers *.txt du c:\TEMP\ÌNPUT


    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
    20
    21
    22
    const  ficlu    = "c:\lgo\fichier_original.txt"
      const  ficecrit = "c:\lgo\fichier_sortie.txt"
      const  carac    = "ajout test suffixe" '       caractère à mettre en bout de ligne
     
     Set        oFso = CreateObject("Scripting.FileSystemObject")
         if not ofso.fileexists(ficlu) then _
                msgbox "fichier non trouvé",, ficlu : wscript.quit
     
    Const ForReading    = 1
    const ForWriting    = 2
    Const TristateTrue  = -1     ' Unicode
     
       Set fs   = oFso.OpenTextFile(ficecrit,ForWriting,true)
     
                     fic= oFSO.GetFile(ficlu).path
      Set fl = oFso.OpenTextFile(fic,ForReading, TristateTrue)
     
      while Not fl.AtEndOfStream
         lig = fl.readline
                fs.writeline (lig & carac)
      Wend
      fl.Close  : fs.close
    D'avance, merci de toute votre aide au combien précieuse

  2. #2
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    juillet 2009
    Messages
    2 070
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2009
    Messages : 2 070
    Points : 4 727
    Points
    4 727

    Par défaut

    Pour traiter tous les fichiers, essaie avec ce
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
      Option Explicit
     
      'Const  ficlu    = "c:\lgo\fichier_original.txt"
      'Const  ficecrit = "c:\lgo\fichier_sortie.txt"
      Const  chars    = " =>ajout test suffixe" '       caractère à mettre en bout de ligne
      Const ForReading = 1, ForWriting = 2, TristateTrue  = -1     ' Unicode
      Const DossierSource ="C:\TEMP\INPUT", DossierCible = "C:\TEMP\OUTPUT\"
      Dim lig, fic, oFSO, fs, oFolder, oFich, fl
     
        Set oFso = CreateObject("Scripting.FileSystemObject")
     
        Set oFolder = oFSO.GetFolder(DossierSource)
     
        If oFolder.Files.Count = 0 Then 
            MsgBox "Aucun fichier trouvé dans " & DossierSource
            Wscript.Quit
        End If
        For Each oFich In oFolder.Files 
          fic = oFSO.GetFile(oFich).Path
          If LCase(oFSO.GetExtensionName(fic)) = "txt" Then
              Set fl = oFso.OpenTextFile(fic,ForReading, TristateTrue)
              Set fs = oFso.OpenTextFile(DossierCible & oFich.Name, ForWriting, True)
              While Not fl.AtEndOfStream
                 lig = fl.readline
                 fs.writeline (Trim(lig) & chars)
              Wend
              fl.Close  : fs.close
              oFSO.DeleteFile(oFSO.GetFile(fic)), True
          End If 
        Next
        MsgBox "Terminé"
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA)
    Vous pouvez consulter mes contributions
    Consultez les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr ICI

  3. #3
    Membre à l'essai
    Homme Profil pro
    Support interfaçage
    Inscrit en
    juin 2017
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Support interfaçage
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2017
    Messages : 40
    Points : 21
    Points
    21

    Par défaut

    Merci beaucoup pour la proposition.

    Par contre, j'ai testé plusieurs fois avec différents répertoire,et le script vbs me génère les fichiers un répertoire au dessus du répertoire de sortie....

    test 1 : répertoire d'entrée c:\TEMP\IN *** répertoire de sortie c:\TEMP\out *** les fichiers sont générés dans c:\TEMP
    test 2 : répertoire d'entrée c:\TEMP\IN *** répertoire de sortie c:\TEMP\OUT\OUT1\OUT2\OUT3 *** les fichiers sont générés dans c:\TEMP\OUT\OUT1\OUT2

    étrange

  4. #4
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    juillet 2009
    Messages
    2 070
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2009
    Messages : 2 070
    Points : 4 727
    Points
    4 727

    Par défaut

    Alors là c'est vraiment bizarre comme comportement du script !!!!!!!!!!!

    Pourtant, pour moi cela marche très bien !
    Essaie alors avec le script modifié comme dans ce
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
      Option Explicit
     
      'Const  ficlu    = "c:\lgo\fichier_original.txt"
      'Const  ficecrit = "c:\lgo\fichier_sortie.txt"
      Const  chars    = " =>ajout test suffixe" '       caractère à mettre en bout de ligne
      Const ForReading = 1, ForWriting = 2, TristateTrue  = -1     ' Unicode
      Const DossierSource ="C:\TEMP\INPUT\", DossierCible = "C:\TEMP\OUTPUT\"
      Dim LigneLue, sFileName, oFSO, Fichier_De_Sortie, oFolder, oFich, Fichier_A_Lire
      Set oFso = CreateObject("Scripting.FileSystemObject")
     
      ' Appel de Traite_Fichiers
      Call Traite_Fichiers(DossierSource, DossierCible, chars)
      ' Pour informer que le traitement est terminé
      MsgBox "Terminé" 
    '=================================================  
    Sub Traite_Fichiers(SrcFolder, DestFolder, StrToAdd)  
        If Not oFSO.FolderExists(DestFolder) Then oFSO.CreateFolder(DestFolder)
     
        Set oFolder = oFSO.GetFolder(SrcFolder)
        If oFolder.Files.Count = 0 Then 
            MsgBox "Aucun fichier à traiter dans : " & SrcFolder
            Wscript.Quit
        End If
        For Each oFich In oFolder.Files 
          sFileName = oFSO.GetFile(oFich.Path) 
          If LCase(oFSO.GetExtensionName(sFileName)) = "txt" Then
              Set Fichier_A_Lire = oFso.OpenTextFile(sFileName,ForReading, TristateTrue)
              Set Fichier_De_Sortie = oFso.OpenTextFile(DestFolder & oFich.Name, ForWriting, True)
              While Not Fichier_A_Lire.AtEndOfStream
                 LigneLue = Fichier_A_Lire.ReadLine
                 Fichier_De_Sortie.WriteLine RTrim(LigneLue) & StrToAdd
              Wend
              Fichier_A_Lire.Close  : Fichier_De_Sortie.Close
              oFSO.DeleteFile(oFSO.GetFile(sFileName)), True
          End If 
        Next
    End Sub
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA)
    Vous pouvez consulter mes contributions
    Consultez les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr ICI

  5. #5
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 520
    Points : 9 718
    Points
    9 718

    Par défaut

    Salut


    Citation Envoyé par PeterMac62
    test 1 : répertoire d'entrée c:\TEMP\IN *** répertoire de sortie c:\TEMP\out *** les fichiers sont générés dans c:\TEMP
    test 2 : répertoire d'entrée c:\TEMP\IN *** répertoire de sortie c:\TEMP\OUT\OUT1\OUT2\OUT3 *** les fichiers sont générés dans c:\TEMP\OUT\OUT1\OUT2
    Const DossierSource ="C:\TEMP\INPUT", DossierCible = "C:\TEMP\OUTPUT\", personnellement je n'ai jamais vue de constantes s'incrémenter.

    Pour moi, PeterMac62 n'a pas sut adapter ton code l_autodidacte.

    Reste à savoir s'il parvient à le faire avec le dernier posté.
    ProgElecT
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.

  6. #6
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    juillet 2009
    Messages
    2 070
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2009
    Messages : 2 070
    Points : 4 727
    Points
    4 727

    Par défaut

    Si après les remarques de ProgElecT (Salut) et ce
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
      Option Explicit
     
     
      Const  chars    = " =>ajout test suffixe" '       caractères à mettre en bout de ligne
      Const ForReading = 1, ForWriting = 2, TristateTrue  = -1     ' Unicode
     
      Dim LigneLue, sFileName, oFSO, Fichier_De_Sortie, oFolder, oFich, Fichier_A_Lire, DossierSrc, DossierCible
     
      DossierSrc = "C:\TEMP\INPUT"
      DossierCible = "C:\TEMP\OUTPUT"
      Set oFso = CreateObject("Scripting.FileSystemObject")
     
      ' Appel de Traite_Fichiers
      Call Traite_Fichiers(DossierSrc, DossierCible, chars)
      ' Pour informer que le traitement est terminé
      MsgBox "Terminé"
     
    '=================================================  
    Sub Traite_Fichiers(SrcFolder, DestFolder, StrToAdd)  
        If Not oFSO.FolderExists(DestFolder) Then CreerDossiers(DestFolder)
        DestFolder = AddDirSep(DestFolder)
        Set oFolder = oFSO.GetFolder(SrcFolder)
        If oFolder.Files.Count = 0 Then 
            MsgBox "Aucun fichier à traiter dans : " & SrcFolder
            Wscript.Quit
        End If
        For Each oFich In oFolder.Files 
          sFileName = oFich.Path
          If LCase(oFSO.GetExtensionName(sFileName)) = "txt" Then
              Set Fichier_A_Lire = oFso.OpenTextFile(sFileName,ForReading, TristateTrue)
              Set Fichier_De_Sortie = oFso.OpenTextFile((DestFolder) & oFich.Name, ForWriting, True)
              While Not Fichier_A_Lire.AtEndOfStream
                 LigneLue = Fichier_A_Lire.ReadLine
                 Fichier_De_Sortie.WriteLine RTrim(LigneLue) & StrToAdd
              Wend
              Fichier_A_Lire.Close  : Fichier_De_Sortie.Close
              oFSO.DeleteFile(oFSO.GetFile(sFileName)), True
          End If 
        Next
    End Sub
    '=============================
    Function CreerDossiers(sFolderName)
        ' Crée un ou plusieurs sous-dossiers
        Dim TB, Ind, NewFolder, oFold
        If Right(sFolderName, 1) ="\" Then sFolderName = Left(sFolderName, Len(sFolderName) - 1)
        TB = Split(sFolderName, "\")
        NewFolder = TB(0) & "\"
     
        If UBound(TB) >= 1 Then
           For Ind = 1 To UBound(TB)
              NewFolder = NewFolder & TB(Ind) & "\"
              If Not oFSO.FolderExists(NewFolder) Then _
              oFSO.CreateFolder(NewFolder)
           Next
        Else
           If Not oFSO.FolderExists(sFolderName) Then 
               Set oFold = oFSO.CreateFolder(sFolderName)
               NewFolder = oFold.Path 
           End If
        End If
        If oFSo.FolderExists(sFolderName) Then NewFolder = sFolderName
        CreerDossiers = NewFolder
    End Function
    '=============================
    Function AddDirSep(strIN)
      ' Ajoute le caractère \ à la fin du nom du sous-dossier
        If Right(strIN, 1) <> "\" Then 
            AddDirSep = strIN & "\"
        Else
            AddDirSep = strIN
        End if
    End Function
    tu as toujours un problème avec le script, il faut revoir ta saisie et la façon dont tu as adapté le code.
    Pour moi, tout est OK que ce soit avec le 1er, le 2nd ou ce 3ème code.

    Avec ce code, tu n'as plus qu'à renseigner les 2 variables : DossierSRC et DossierCible avec les chemins corrects avec ou sans le caractère \ à la fin , et tout ira bien(enfin je l'espère pour toi).
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA)
    Vous pouvez consulter mes contributions
    Consultez les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr ICI

  7. #7
    Membre à l'essai
    Homme Profil pro
    Support interfaçage
    Inscrit en
    juin 2017
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Support interfaçage
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2017
    Messages : 40
    Points : 21
    Points
    21

    Par défaut

    Bonjour et merci à tous.

    Le dernier script fonctionne parfaitement

    En tout cas, cela est parfaitement fonctionnel, donc MERCI à tous....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DOM] Ajouter une ligne sans tout reecrire
    Par RhO dans le forum XML
    Réponses: 0
    Dernier message: 18/08/2009, 11h33
  2. [XL-2007] modification de format (numerique=>texte) et ajouté un 0 devant tout les numeros
    Par dodo28 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/04/2009, 22h14
  3. [2.0] : Ajouter un item en tout début d'une DropDownList
    Par stephane.net dans le forum ASP.NET
    Réponses: 2
    Dernier message: 16/11/2006, 16h50
  4. sélection un ensembles de fichiers dans un répertoire
    Par da_latifa dans le forum Delphi
    Réponses: 1
    Dernier message: 13/06/2006, 20h00

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