Remplacer une valeur dans plusieurs fichiers

y -  
 y -
Bonjour à tous et meilleurs voeux 2013,

n'étant pas développeur je collecte des sources vbs un peu partout depuis le web pour tenter de faire un vb.. en vain.
je cherche à remplacer le mot RETURN de plusieurs fichier *.hprim par un vrai retour chariot depuis un même repertoire c:\temp

voici ce que j'ai deja trouvé ici et la sur internet mais cela ne fonctionne vraiment pas :)

merci de votre aide !
Bien à vous

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objRep = objFSO.GetFolder("C:\temp\toto")

For Each file In objRep
Set objFile = objFSO.OpenTextFile(file)
strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, "RETURN", "|" & vbcrlf & "")

Set objFile = objFSO.OpenTextFile("C:\temp\toto", ForWriting)
objFile.WriteLine strNewText
objFile.Close
Next
Set objFile = Nothing
End if
Next

5 réponses

  1. Heliotte Messages postés 1561 Statut Membre 92
     
    Bonsoir y,

    Quel est le langage de programmation utilisé : VB ou VBS ?
    0
    1. y
       
      VBS mais en fait je suis preneur de tout :) merci d'avoir lu ma demande.
      0
    2. heyquem Messages postés 808 Statut Membre 131
       
      salut

      Si tu es preneur de tout, tu devrais passer sur Python, tu t'en verrais moins
      0
    3. y
       
      ok je vais rechercher merci
      0
  2. Heliotte Messages postés 1561 Statut Membre 92
     
    Bonsoir y,

    Dans beaucoup de langage (pas tous!), le principe est le suivant:

    - Lire les données en les mémorisant soit dans une variable, soit dans un tableau de variables.
    - Effectuer les manipulations ad-hoc
    - Écrire les données données dans le fichier

    Voilà pour le principe.
    Perso, je travaille beaucoup en Visual Basic, et de plus en plus avec VB.Net.
    0
    1. y
       
      merci pour cette réponse de principe mais n'ayant pas les bases peux tu m'aider à l'élaboration ?
      le script ci dessous fonctionne très bien pour un fichier toto mais je n'arrive pas à intégrer un boucle pour plusieurs fichiers *.toto ?

      Merci

      Const ForReading = 1
      Const ForWriting = 2

      Set objFSO = CreateObject("Scripting.FileSystemObject" )
      Set objFile = objFSO.OpenTextFile("C:\temp\a.toto", ForReading)

      strText = objFile.ReadAll
      objFile.Close
      strNewText = Replace(strText, "RETURN", "|" & vbcrlf & "")

      Set objFile = objFSO.OpenTextFile("C:\temp\a.toto", ForWriting)
      objFile.WriteLine strNewText
      objFile.Close
      0
  3. Heliotte Messages postés 1561 Statut Membre 92
     
    En quel langage .. VB 6.0 ou VB.Net ?
    0
    1. y
       
      je crois VB 6.0 ..
      0
  4. Heliotte Messages postés 1561 Statut Membre 92
     
    Bonjour y,

    J'ai dû chercher un peu car mes souvenirs quelquefois me font défaut.
    ' Bouton, commande l'exécution de la procédure
    Private Sub cmd_Go_Click()
    	Dim tNomFichier(3) As String
    	'
    	tNomFichier(0) = "C:\temp\a.toto1.txt"
    	tNomFichier(1) = "C:\temp\a.toto2.txt"
    	tNomFichier(2) = "C:\temp\a.toto3.txt"
    	tNomFichier(3) = "C:\temp\a.toto4.txt"
    	For i=0 To Ubound(tNomFichier)
    		RemplacerValeurDansFichier(tNomFichier(i))
    	Next i
    End Sub
    ' Procédure de lecture, conversion et réécriture de fichier
    RemplacerValeurDansFichier(ByVal NomFichier As String)
    	Dim Ligne As String, Lignes As String
    	Dim NoFichier As Integer
    	'________________________________________
    	'¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
    	' lecture du fichier
    	NoFichier = FreeFile
    	Open Chemin & NomFichier For Input As #NoFichier
            Lignes = ""
            While Not (EOF(NoFichier))
    		Line Input #NoFichier, Ligne
    		Lignes = Lignes + Ligne
            Wend
    	Close #NoFichier
    	'tbx_Resultat est un TextBox qui affiche les étapes exécutées
    	tbx_Resultat.Text = "Fichier " & NomFichier & " lu." & VbCrLf
    	'________________________________________
    	'¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
    	' conversion de la chaîne
    	Lignes  = Replace(Lignes, "RETURN", "|" & vbcrlf & "") 
    	tbx_Resultat.Text = "Fichier " & NomFichier & " conversion terminée." & VbCrLf
    	'________________________________________
    	'¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
    	' écriture du fichier
    	NoFichier = FreeFile
    	Open Chemin & NomFichier For Output As #NoFichier
    		Print #NoFichier, Lignes2 
    	Close #NoFichier
    	tbx_Resultat.Text = "Fichier " & NomFichier & " écriture terminée." & VbCrLf & VbCrLf
    	'________________________________________
    	'¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
    End Sub


    Cela devrait t'aider .. excepter la conversion car la chaîne de caractère RETURN n'existe pas en VB .. à moins que cette chaîne de caractère soit en dur dans le texte.
    Voilà
    0
    1. y
       
      GRAND merci à toi je vais essayer immédiatement !
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. heyquem Messages postés 808 Statut Membre 131
     
    Hello

    Si tu donnes un peu plus de précisions sur ce que tu veux faire, je peux t'écrire un code en Python.

    "je cherche à remplacer le mot RETURN de plusieurs fichiers *.hprim par un vrai retour chariot depuis un même repertoire c:\temp"

    Le mot RETURN est-il inscrit en toutes lettres dans chaque fichier ?
    Qu'est ce que tu entends par "vrai retour chariot" ? Le caractère \n ?
    Et qu'entends tu par "depuis" un répertoire ? Tu veux dire que les fichiers sont DANS le répertoire c:\temp ?

    En Python, y en a pas pour 1/2 heure à faire un tel code.
    0
    1. y
       
      Bonjourn, oui c'est bien cela le mot RETURN est volontairement écrit en toutes lettres dans chaque fichier dont extension est .hprim. cette chaîne de caractère est à remplacer par un retour chariot \n 0D en hexadécimal. les fichiers sont stockés dans le répertoire c:\temp.
      Merci pour ton message et ton aide.
      0
    2. heyquem Messages postés 808 Statut Membre 131
       
      Je viens de voir ta réponse. Je vais faire ça en 1/4 h.

      Pendant ce temps, va sur la page suivante
      https://www.python.org/downloads/release/python-330/
      pour installer Python 3.3 sur ton ordinateur

      Je suis sur Windows et j'ai installé Windows x86 MSI Installer (3.3.0) (sig) , ça prend 10 minutes max.
      Si tu es sur un autre système d'exploitation, je ne sais pas s'il y a des complications supplémentaires.
      0
    3. y
       
      super !! merci !
      0
    4. heyquem Messages postés 808 Statut Membre 131
       
      from os import listdir
      
      path = 'c:\\temp'
      
      path = path.rstrip('\\') + '\\'
      
      
      #####################################################
      with open(path +'radada.hprim','w') as f:
          f.write('''dlkjgqdhkljb vgsdf
      dlfkqhgdjrkhgqsedjlrkgerg
      jlkqfg
      khgfujkqzef
      jkqhbsdjfqhbsr
      jkzhgefujqzhgefj
      bbbbbbbbbbbbbbbRETURNaaaaaaaaaaaaaaaaaaaaaaa
      lkdqbvgefhbfghbqj
      qfjlrhbjfbqhfbgh
      ggggggggggggggggggRETURNhhhhhhhhhhhhhhhh
      jjcbvbnbn
      dlfkqhelfkbjkebgqjkbfjfjhbqdf''')
      
      
      with open(path+'tumulu.hprim','w') as f:
          f.write('''Il songe. Il s'est assis rêveur sous un érable. 
      Entend-il murmurer la forêt vénérable ? 
      Regarde-t-il les fleurs ? regarde-t-il les cieux ? 
      Il songe.RETURNLa nature au front mystérieux 
      Fait tout ce qu'elle peut pour apaiser les hommes ; 
      Du coteau plein de vigne au verger plein de pommes 
      Les mouches viennent, vont, reviennent ;RETURN RETURNles oiseaux 
      Jettent leur petite ombre errante sur les eaux ; 
      Le moulin prend la source et l'arrête au passage ; 
      L'étang est un miroir où le frais paysage''')
      
      
      input('Vérifiez la présence du mot RETURN dans les fichiers créés,\n'
            'puis appuyez sur une touche quelconque pour continuer.\n   ')
      ################################################################
      
      gen_filenames = (filename for filename in listdir(path) if filename[-6:]=='.hprim')
      
      for fn in gen_filenames:
          print( fn )
          with open(path+fn,'r') as f:
              content = f.read()
      
          with open(path+'mod_'+fn,'w') as g:
              g.write(content.replace('RETURN','\n'))



      C'est le plus simple qui soit.
      Cependant ce genre de programme n'est utilisable pour faire un tel remplacement que si les fichiers n'ont pas des tailles excessives. En fait, les fichiers peuvent bien être énormes, du genre 40 GB, si la RAM arrive à encaisser le contenu du fichier lu, c'est à dire du contenu de l'objet content qui est créé dans la RAM
      Dis moi quelle est la taille attendue des fichiers STP


      Il y a d'autres façons de faire: ligne par ligne, ou in-place, ou par morceaux.
      Je suis allé au plus direct pour l'instant.

      La partie entre les deux lignes
      #######################
      #######################

      est à éliminer pour l'application de ce code en réel.
      C'est une partie que je me suis écrite pour procéder à des tests.
      J'ai été un peu long parce qu'en fait je suis passé à Python 3 récemment et que je ne suis pas encore bien habitué à quelques différences avec Python 2.

      Dans ce code j'ai donné un nom path+'mod_'+fn pour le fichier modifié. Il convient que tu fasses des essais pour éviter des effaçages intempestifs. Car si tu crées un nouveau fichier avec le même nom path+fn le fichier existant jusqu'alors est effacé.
      0
    5. y
       
      merci pour ton travail vraiment! la taille des fichiers est tres faible. je regarde avec attention tout cela et te tiens informé. merci beaucoup
      0