Voici le pseudocode pour ce que j'espère faire:
Open text File
Find "XXXXX" and Replace with "YYYY"
Save text File As
Close text file
C'est ce que j'ai jusqu'ici
Private Sub CommandButton1_Click()
Dim sBuf As String
Dim sTemp As String
Dim iFileNum As Integer
Dim sFileName As String
' Edit as needed
sFileName = "C:\filelocation"
iFileNum = FreeFile
Open sFileName For Input As iFileNum
Do Until EOF(iFileNum)
Line Input #iFileNum, sBuf
sTemp = sTemp & sBuf & vbCrLf
Loop
Close iFileNum
sTemp = Replace(sTemp, "DIM A", "1.75")
sTemp = Replace(sTemp, "DIM B", "2.00")
sTemp = Replace(sTemp, "DIM C", "3.00")
sTemp = Replace(sTemp, "DIM D", "4.00")
'Save txt file as (if possible)
iFileNum = FreeFile
Open sFileName For Output As iFileNum
Print #iFileNum, sTemp
Close iFileNum
'Close Userform
Unload UserForm1
End Sub
Mais au lieu de remplacer le fichier texte original, je souhaite "enregistrer sous" dans un nouveau fichier.
Il suffit d'ajouter cette ligne
sFileName = "C:\someotherfilelocation"
juste avant cette ligne
Open sFileName For Output As iFileNum
L'idée est d'ouvrir et d'écrire dans un fichier différent que celui que vous avez lu précédemment (C:\filelocation
).
Si vous voulez avoir du style et afficher une vraie boîte de dialogue "Enregistrer sous", vous pouvez le faire à la place:
sFileName = Application.GetSaveAsFilename()
Pourquoi impliquer le Bloc-notes?
Sub ReplaceStringInFile()
Dim sBuf As String
Dim sTemp As String
Dim iFileNum As Integer
Dim sFileName As String
' Edit as needed
sFileName = "C:\Temp\test.txt"
iFileNum = FreeFile
Open sFileName For Input As iFileNum
Do Until EOF(iFileNum)
Line Input #iFileNum, sBuf
sTemp = sTemp & sBuf & vbCrLf
Loop
Close iFileNum
sTemp = Replace(sTemp, "THIS", "THAT")
iFileNum = FreeFile
Open sFileName For Output As iFileNum
Print #iFileNum, sTemp
Close iFileNum
End Sub
Je suppose que je suis trop tard ...
A rencontré le même problème aujourd'hui; voici ma solution en utilisant FileSystemObject
:
Dim objFSO
Const ForReading = 1
Const ForWriting = 2
Dim objTS 'define a TextStream object
Dim strContents As String
Dim fileSpec As String
fileSpec = "C:\Temp\test.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTS = objFSO.OpenTextFile(fileSpec, ForReading)
strContents = objTS.ReadAll
strContents = Replace(strContents, "XXXXX", "YYYY")
objTS.Close
Set objTS = objFSO.OpenTextFile(fileSpec, ForWriting)
objTS.Write strContents
objTS.Close
J'ai eu le même problème et suis venu sur ce site.
la solution pour simplement définir un autre "nom de fichier" dans le
... pour la sortie en tant que ... la commande était très simple et utile.
en plus (au-delà de la boîte de dialogue Application.GetSaveAsFilename ())
il est très simple de définir un ** nouveau nom de fichier ** en utilisant simplement
le replace command, afin que vous puissiez changer le nom de fichier/extension
par exemple. (à partir du premier post)
sFileName = "C:\filelocation"
iFileNum = FreeFile
Open sFileName For Input As iFileNum
content = (...edit the content)
Close iFileNum
viens de définir:
newFilename = replace (sFilename, ".txt", ".csv") pour changer l'extension
ou
newFilename = replace (sFilename, ".", "_edit.") pour un nom de fichier différent
et juste comme avant
iFileNum = FreeFile
Open newFileName For Output As iFileNum
Print #iFileNum, content
Close iFileNum
J'ai surfé pendant plus d'une heure pour savoir comment renommer un fichier txt,
avec beaucoup de solutions différentes, mais ça pourrait être tellement facile :)