Remplacer une valeur dans plusieurs fichiers

Fermé
y - 2 janv. 2013 à 16:01
 y - 3 janv. 2013 à 16:16
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


A voir également:

5 réponses

Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
2 janv. 2013 à 16:29
Bonsoir y,

Quel est le langage de programmation utilisé : VB ou VBS ?
0
VBS mais en fait je suis preneur de tout :) merci d'avoir lu ma demande.
0
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 131
2 janv. 2013 à 23:46
salut

Si tu es preneur de tout, tu devrais passer sur Python, tu t'en verrais moins
0
ok je vais rechercher merci
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
2 janv. 2013 à 16:44
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
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
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
2 janv. 2013 à 20:40
En quel langage .. VB 6.0 ou VB.Net ?
0
je crois VB 6.0 ..
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
3 janv. 2013 à 12:19
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
GRAND merci à toi je vais essayer immédiatement !
0

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

Posez votre question
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 131
Modifié par heyquem le 3/01/2013 à 13:53
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
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
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 131
3 janv. 2013 à 14:54
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
super !! merci !
0
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 131
3 janv. 2013 à 15:45
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
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