Aide pr code VBscript

jeanjeandada Messages postés 152 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 20 novembre 2011 - 12 mai 2009 à 19:08
jeanjeandada Messages postés 152 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 20 novembre 2011 - 18 mai 2009 à 18:08
Bonjour,

Connaitriez-vous le code pour en VBscript pour :
1)ouvrir un fichier .txt dans tel répertoire
2) Effectuer la fonction "remplacer" pour remplacer un caractére par un autre
3) Fermer le txt en le sauvegardant.

(PS : Le code du 1 je devrait facilement le trouver)
Merci bcp

9 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 mai 2009 à 20:37
Salut
Jamais fait de Script, mais la structure reste la même.
Ouvrir un fichier --> recherche "vbscript ouvrir fichier" dans la recherche des codes en excluant .Net
A mon avis, tu ne pourras pas modifier le contenu d'un fichier.
Il faut :
Ouvrir en lecture ton fichier d'origine,
Ouvrir un nouveau fichier de destination en écriture,
Lire chaque ligne du fichier d'origine
Le tripatouiller le texte comme tu veux
Enregistrer le nouveau texte dans le nouveau fichier
Continuer à lire les autres lignes et les modifier comme tu veux
Fermer les deux fichiers
Détruire l'original
Renommer le nouveau avec le nom de l'ancien

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
dareman Messages postés 39 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 10 janvier 2011
13 mai 2009 à 09:25
bonour,
voici un site qui poura t'aider moi il m'a bien dépanné :
http://www.bellamyjc.org/fr/vbscript.html

sinon pour ce qui est du code que tu recherche j'ai fait quasiment la même chose il y a 2 semaines en voici un extrait:

'___________________________________________________________________________pour le chemin local du fichier
Set objShell = WScript.CreateObject("WScript.Shell")
Set objExecObject = objShell.Exec("cmd /c chdir") ' affiche le chemin pour accéder au répertoire courant
path = Replace(objExecObject.StdOut.Read(260), vbCrLf, vbNullString) & "" ' replace permet de remplacer vbCrLf (retour chariot et saut de ligne)
' par vbNullString (""), objExecObject.StdOut.Read(260) permet de récupérer le résultat de la commande dos
'_________________________________________________________________________________________________________________________________________________        
        Set fso = CreateObject("Scripting.FileSystemObject" ) ' creation d'un objet pour appellé la méthode de vérification de présence d'un fichier
        IF  fso.FileExists(NomFichier) then ' test si le fichier est présent sinon relance l'exportation
                Set MyObject = CreateObject("Scripting.FileSystemObject" ) ' déclaration d'un objet pour manipuler un fichier
                Set MyFile = MyObject.GetFile(Path  & NomFichier ) ' ouverture du fichier avec NomFichier défini et initialisé comme 1 variable
'contenant le nom du fichier
                ' je crée la référence du fichier
                Set MyoutObject = CreateObject("Scripting.FileSystemObject")
                ' je crée le fichier .txt dans le répertoire windows.
                Set MyoutFile = MyoutObject.CreateTextFile("exportcsvde2.txt" ,false, true) ' probléme lors du rajout de: & cstr(Date)
                ' false pour l'overwrite (débordement), true pour l'unicode
                Set OpenFile = MyFile.OpenAsTextStream(1,-1)
                'Recherche des occurences de pwdlastset
                if OpenFile.AtEndOfStream = False then
'____________________________________________________________________________________________________________________________________intialisation                 
                 ' lecture de la premiére ligne ne doit pas etre traiter (car ne comporte que les titres)
                 lign1 = OpenFile.ReadLine        
                 MyoutFile.WriteLine(lign1) 'inscrit bien sur une ligne aucun probléme de débordement sur la ligne du dessous ^^                    
                lign2 = lign1
                nb = 0
                do while lign2<>""  ' permet de trouver le nombre de champs présent dans l'entete
                    lign2=extraitListeD(lign2,strSeparateur)
                    nb=nb+1
                loop
                j=1
                k = 1
                while j<= nb
                    if (Mid(lign1,k,1) = strSeparateur) then ' on réinitialise la chaine temp et on saute la ,
                        chaine2 = ""
                        k = k + 1
                    end if
                    while (Mid(lign1,k,1) <> strSeparateur and Mid(lign1,k,1) <> "") ' stock car par car jusqu'a la prochaine ,
                            chaine2 = chaine2 & Mid(lign1,k,1)        
                            k = k + 1                            
                    wend
                    strPosition(j) = chaine2 ' on rempli un tableau temporaire a partir de la ligne d'entete
                    j = j+1
                wend
        
                for i=1 to nb
                if (strPosition(i) = DN) then
                numeroChampDn = i ' on stock la position du champ dn
                elseif (strPosition(i)=pwd) then
                numeroChampPwdLastSet = i 'on stock la position du champ de pwdlasset
                elseif (strPosition(i)=mana) then
                numeroChampManager = i ' on stock la position du champ manager
                end if
                next    
                End if 'avance bien d'une position dans le fichier en lecture
'____________________________________________________________________________________________________

voila sa devrai te donner une idée de comment faire,  ce code permet de rechercher caractère par caractére dans un fichier du moin pour la premiére ligne aprés il te suffit de faire
Do While OpenFile.AtEndOfStream = False 
pour parcourir tout le fichier, et pour suprimer le fichier en lecture à la fin de ton script tu fait
   OpenFile.Close
    MyoutFile.Close
    MyFile.Delete
jeanjeandada Messages postés 152 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 20 novembre 2011
13 mai 2009 à 16:21
Slt OK super pour votre réponse. merci beaucoup!
Ce que je voudrais effectuer concrétement : remplacer tous les caractéres : "#" par "/"

dareman j'ai comprend en gros ce que tu voulais faire.
Tu utilise DOS juste pour récupérer le chemin de ton fichier de lecture ?
Qu'est ce que le pwdlastset ?

 1) J'ouvre mon fichier de lecture, je crée mon fichier d'écriture :     
                Set MyObject = CreateObject("Scripting.FileSystemObject" ) ' déclaration d'un objet pour manipuler un fichier
Dim MyDate
MyDate = Date 
                Set MyFile = MyObject.GetFile("C:\Documents and Settings\XX\Bureau\lecture_MyDate.txt")  ' ouverture du fichier lecture avec NomFichier défini et initialisé comme 1 variable
'contenant le nom du fichier
                ' je crée la référence du fichier
                Set MyoutObject = CreateObject("Scripting.FileSystemObject")
                ' je crée le fichier d'écriture .txt dans le répertoire windows.
                Set MyoutFile = MyoutObject.CreateTextFile("lecture_MyDate.txt" ,false, true) ' ca ne marche pas pour ouvrir un fichier un MyDate ?   ' false pour l'overwrite (débordement), true pour l'unicode
                Set OpenFile = MyFile.OpenAsTextStream(1,-1) 'pq -1 ?
2) (je suis un peu perdu maintenant) Tout d'abord pour info ma premiere ligne ne comporte pas de titre.
lign1 = OpenFile.ReadLine   'cela me permet de lire la ligne      
                 MyoutFile.WriteLine(lign1) 'permet d'écrireMais comment tu fais pour passer d'un fichier a un autre ???                    
                lign2 = lign1
                nb = 0
                do while lign2<>""  ' permet de trouver le nombre de champs présent dans l'entete
                    lign2=extraitListeD(lign2,strSeparateur)
                    nb=nb+1
                loop     'Cette partir permet de connaitre le nbre de ligne dans le fichier de lecture ???

                j=1
                k = 1
                while j<= nb
                    if (Mid(lign1,k,1) = strSeparateur) then ' on réinitialise la chaine temp et on saute la ,
                        chaine2 = ""
                        k = k + 1
                    end if
                    while (Mid(lign1,k,1) <> strSeparateur and Mid(lign1,k,1) <> "") ' stock car par car jusqu'a la prochaine ,
                            chaine2 = chaine2 & Mid(lign1,k,1)        
                            k = k + 1                            
                    wend
                    strPosition(j) = chaine2 ' on rempli un tableau temporaire a partir de la ligne d'entete
                    j = j+1
                wend   'Cette partie permet de lire les caractéres que tu souhaite de la variable : ligne1 ???
        

                for i=1 to nb
                if (strPosition(i) = DN) then
                numeroChampDn = i ' on stock la position du champ dn
                elseif (strPosition(i)=pwd) then
                numeroChampPwdLastSet = i 'on stock la position du champ de pwdlasset
                elseif (strPosition(i)=mana) then
                numeroChampManager = i ' on stock la position du champ manager
                end if
                next    
                End if 'avance bien d'une position dans le fichier en lecture

Est quand est ce que t'écris sur le fichier de lecture ?

Merci et A+ : )
jeanjeandada Messages postés 152 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 20 novembre 2011
13 mai 2009 à 16:22
"Est quand est ce que t'écris sur le fichier <strike>de lecture</strike> ?" plutot :
"Est quand est ce que t'écris sur le fichier d'écriture?"

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

Posez votre question
dareman Messages postés 39 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 10 janvier 2011
13 mai 2009 à 16:40
salu,
j'écri dans le fichier une premiére ligne sans la traitée en faite
MyoutFile.WriteLine(lign1)

aprés je t mis un exemple de parcour d'une ligne du fichier .txt caractère par caractère avec des test qui étaient propres a mon prog tu ne doit pas les prendre en compte ^^

en gros tu fait:
Do While OpenFile.AtEndOfStream = False
     ligneFichier=OpenFile.readLine()
j =1
lignePoubelle =ligneFichier
 do while ligneFichier<>""
     while j<= nb
            if (Mid(ligneFichier,j,1) = "#") then
                          Mid(lignePoubelle,j,1) = "/"    'pour remplacer ton caractére
                          j = j+1
                         else
                         Mid(lignePoubelle,j,1)  = (Mid(ligneFichier,j,1)
                         j=j+1
                         end if
                         wend
loop
MyoutFile.WriteLine(lignePoubelle)
loop

voila si je me suis pas planté se devrai marché
dareman Messages postés 39 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 10 janvier 2011
13 mai 2009 à 16:43
Tu utilise DOS juste pour récupérer le chemin de ton fichier de lecture ?   oui
Qu'est ce que le pwdlastset ?  c t un champ a récupérer dans mon application mais sa ne te concerna pas j'aurai du arre t le copier/coller avt ^^
c pour sa que je n'est pas mit le code en entier parcequ'&aprés sa se complique encore +
jeanjeandada Messages postés 152 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 20 novembre 2011
15 mai 2009 à 12:21
Salut,

ok Super
Mais qques trucs me perturbent encore. Ci dessous le code (est-il juste ??):

Set MyObject = CreateObject("Scripting.FileSystemObject" )
Dim MyDate
MyDate = Date
                Set MyFile = MyObject.GetFile("C:\Documents and Settings\jdh\Bureau\rapports DEWI\abla.txt") 
 
             
                Set MyoutObject = CreateObject("Scripting.FileSystemObject")
               
                Set MyoutFile = MyoutObject.CreateTextFile("lecture_MyDate.txt" ,false, true)
                Set OpenFile = MyFile.OpenAsTextStream(1,-1)

lign2 = OpenFile.ReadLine()'OpenFile permet bien d'ouvrir le fichier d'écriture ??        



        nb = 0
         do while lign2<>""  
               nb=nb+1
         loop

Do While OpenFile.AtEndOfStream = False
     ligneFichier=OpenFile.readLine()
j =1
lignePoubelle =ligneFichier
 do while ligneFichier<>""
     while j<= nb'la variable nb correspond au nbre de caractére sur la ligne.
            if (Mid(ligneFichier,j,1) = "#") then
                          Mid(lignePoubelle,j,1) = "/"   
                          j = j+1
                         else
                         Mid(lignePoubelle,j,1)  = (Mid(ligneFichier,j,1)
                         j=j+1
                         end if
                         wend
loop
MyoutFile.WriteLine(lignePoubelle)
loop

L'éxécution ne marche pas. Il me dit qu'il y a un probléme sur la ligne :
Mid(lignePoubelle,j,1)  = (Mid(ligneFichier,j,1)

A la fin le fichier de lecture n'est pas "détrui" ? On n'as pas paramatré le nom et le chemin du fichier d'écriture ?

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

- contrôle existence fichier et contrôle fichier non vide
- écriture du fichier, avec replace éventuel,  dans un tableau
- fermeture du fichier
- ré-écriture du fichier à partir du tableau

Option Explicit

FnWordChange "D:\Test.txt", "#", "/"

Function FnWordChange(sFileText, sWordsToRemove, sWordsToChange)
    Dim oFso, oFile, aLineFicTxt, i
    Set oFso = CreateObject("Scripting.FileSystemObject")
'   Controle existence fichier
    If oFso.FileExists(sFileText) Then
       Set oFile = oFso.GetFile(sFileText)
'      Controle fichier non vide
       If oFile.Size <> 0 Then
          Set oFile = oFso.OpenTextFile(sFileText, 1)
'         aLineFicTxt est un tableau contenant toutes les lignes du .txt
'         chaque sWordsToRemove de chaque ligne est remplacé par sWordsToChange
          aLineFicTxt = Split(Replace(oFile.ReadAll,sWordsToRemove , sWordsToChange),vbCrLf)
          oFile.Close

'         Ecriture du fichier
          Set oFile = oFso.CreateTextFile(sFileText, True)
          For i = LBound(aLineFicTxt) To UBound(aLineFicTxt)
              oFile.WriteLine aLineFicTxt(i)
          Next
          oFile.Close
       End If   
    Else
       WScript.Echo "Fchier " & sFileText & " inexistant"
    End If
    Set oFile = Nothing
    Set oFso = Nothing
End Function

jean-marc
jeanjeandada Messages postés 152 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 20 novembre 2011
18 mai 2009 à 18:08
OK super ton prog.
Juste une chose. je sais le faire en VBA mais pas en VBS :
Voilà le code VBA que j'ai essayé de mettre dans le prog. VBS

tableau_Projet = Array("ff1", "E79SGLC")
For Each projet In tableau_Projet



FnWordChange "C:\Documents and Settings\XX\Bureau\esaiT" & projet & ".txt", "#", "/"



Next


Bien sur cela ne marche pas en VBS et il me signale une erreur à la ligne en rouge
Merci
Rejoignez-nous