jeanjeandada
Messages postés152Date d'inscriptionlundi 21 avril 2008StatutMembreDernière intervention20 novembre 2011
-
12 mai 2009 à 19:08
jeanjeandada
Messages postés152Date d'inscriptionlundi 21 avril 2008StatutMembreDernière intervention20 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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
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és152Date d'inscriptionlundi 21 avril 2008StatutMembreDernière intervention20 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 ?
dareman
Messages postés39Date d'inscriptionmercredi 15 avril 2009StatutMembreDernière intervention10 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
dareman
Messages postés39Date d'inscriptionmercredi 15 avril 2009StatutMembreDernière intervention10 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és152Date d'inscriptionlundi 21 avril 2008StatutMembreDernière intervention20 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 ?
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 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