web-dev-qa-db-fra.com

Lire et écrire dans un fichier à l'aide de VBScript

Comment lire et écrire une chaîne dans un fichier texte en utilisant VBScript? Je veux dire que j'ai un fichier texte qui est déjà présent, donc quand j'utilise ce code ci-dessous: -

Set fso = CreateObject("Scripting.FileSystemObject" )            
Set file = fso.OpenTextFile("C:\New\maddy.txt",1,1) 

Cela ouvre le fichier uniquement pour la lecture mais je ne peux rien écrire et quand j'utilise ce code: -

Set fso = CreateObject("Scripting.FileSystemObject" )            
Set file = fso.OpenTextFile("C:\New\maddy.txt",2,1)

Je peux simplement utiliser ce fichier pour écrire mais je ne peux rien lire. Existe-t-il de toute façon par lequel nous pouvons ouvrir le fichier pour la lecture et l'écriture en n'appelant la méthode OpenTextFile qu'une seule fois.

Je suis vraiment nouveau sur VBScript. Je ne connais que les concepts C. Existe-t-il un lien pour vraiment me lancer dans VBScript?

Je suppose que je dois avoir une bonne connaissance des concepts d'objets et de propriétés.

22
Maddy

Vous pouvez créer un fichier temporaire, puis le renommer en fichier d'origine:

Set objFS = CreateObject("Scripting.FileSystemObject")
strFile = "c:\test\file.txt"
strTemp = "c:\test\temp.txt"
Set objFile = objFS.GetFile(strFile)
Set objOutFile = objFS.CreateTextFile(strTemp,True)
Set ts = objFile.OpenAsTextStream(1,-2)
Do Until ts.AtEndOfStream
    strLine = ts.ReadLine
    ' do something with strLine 
    objOutFile.Write(strLine)
Loop
objOutFile.Close
ts.Close
objFS.DeleteFile(strFile)
objFS.MoveFile strTemp,strFile 

L'utilisation est presque la même en utilisant OpenTextFile:

Set objFS = CreateObject("Scripting.FileSystemObject")
strFile = "c:\test\file.txt"
strTemp = "c:\test\temp.txt"
Set objFile = objFS.OpenTextFile(strFile)
Set objOutFile = objFS.CreateTextFile(strTemp,True)    
Do Until objFile.AtEndOfStream
    strLine = objFile.ReadLine
    ' do something with strLine 
    objOutFile.Write(strLine & "kndfffffff")
Loop
objOutFile.Close
objFile.Close
objFS.DeleteFile(strFile)
objFS.MoveFile strTemp,strFile 
22
ghostdog74

En savoir plus sur l'objet FileSystemObject à http://msdn.Microsoft.com/en-us/library/aa242706 (v = vs.60) .aspx . Pour un bon VBScript, je recommande:

  • Option explicite pour aider à détecter les fautes de frappe dans les variables.
  • Fonction et Sub pour améliorer la lisibilité et la réutilisation
  • Const afin que les constantes bien connues reçoivent des noms

Voici du code pour lire et écrire du texte dans un fichier texte:

Option Explicit

Const fsoForReading = 1
Const fsoForWriting = 2

Function LoadStringFromFile(filename)
    Dim fso, f
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.OpenTextFile(filename, fsoForReading)
    LoadStringFromFile = f.ReadAll
    f.Close
End Function

Sub SaveStringToFile(filename, text)
    Dim fso, f
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.OpenTextFile(filename, fsoForWriting)
    f.Write text
    f.Close
End Sub

SaveStringToFile "f.txt", "Hello World" & vbCrLf
MsgBox LoadStringFromFile("f.txt")
12
Stephen Quan

Vous pouvez ouvrir deux flux de texte, un pour la lecture

Set filestreamIn = CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\Test.txt,1)

et un pour l'ajout

Set filestreamOUT = CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\Test.txt,8,true)

Le filestreamIN peut lire depuis le début du fichier et le filestreamOUT peut écrire à la fin du fichier.

6
Tester101

Ne le pensez pas ... vous ne pouvez utiliser que openTextFile pour lire (1), l'écriture (2) ou en ajoutant (8). Référence ici .

Si vous étiez en utilisant VB6 à la place de VBScript, vous pourriez faire:

Open "Filename" [For Mode] [AccessRestriction] [LockType] As #FileNumber

Utilisation du mode Random. Par exemple:

Open "C:\New\maddy.txt" For Random As #1
5
Daniel F. Thornton

Vous pouvez le mettre dans une feuille Excel, idk si cela en vaut la peine si vous en avez besoin pour d'autres choses, mais le stockage d'informations dans des feuilles Excel est beaucoup plus agréable car vous pouvez facilement lire et écrire en même temps avec le

 'this gives you an Excel app
 oExcel = CreateObject("Excel.Application")

 'this opens a work book of your choice, just set "Target" to a filepath
 oBook = oExcel.Workbooks.Open(Target)

 'how to read
 set readVar = oExcel.Cell(1,1).value
 'how to write
 oExcel.Cell(1,2).value = writeVar

 'Saves & Closes Book then ends Excel
 oBook.Save
 oBook.Close
 oExcel.Quit

désolé si cette réponse n'est pas utile, écrivez une première fois une réponse et pensez que cela pourrait être une meilleure façon pour vous

2
Spy

Indépendamment de ce que vous essayez de faire, il ne devrait pas être nécessaire de lire et d'écrire dans un fichier en même temps. Il utiliserait également plus de mémoire, ce qui devrait toujours être évité. Je suggère de lire le fichier entier en utilisant la méthode .ReadAll puis de le fermer et de faire tout ce que vous devez faire avec les données (en supposant que vous lisez le contenu dans une variable), puis d'écrire dans le même fichier et d'écraser le fichier . Si vous craignez que quelque chose ne tourne pas rond lors de l'écrasement du fichier actuel, vous pouvez toujours essayer de l'écrire dans un autre fichier et générer une erreur si cela ne fonctionne pas avant d'essayer de remplacer l'original.

1

Vous pouvez également lire l'intégralité du fichier et le stocker dans un tableau

Set filestreamIN = CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\Test.txt",1)
file = Split(filestreamIN.ReadAll(), vbCrLf)
filestreamIN.Close()
Set filestreamIN = Nothing

Manipulez le tableau comme vous le souhaitez, puis réécrivez le tableau dans le fichier.

Set filestreamOUT = CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\Test.txt",2,true)

for i = LBound(file) to UBound(file)
    filestreamOUT.WriteLine(file(i))
Next

filestreamOUT.Close()
Set filestreamOUT = Nothing 
1
Tester101

Voici un code simple pour exécuter ceci:

sLocation = "D:\Excel-Fso.xls"
sTxtLocation = "D:\Excel-Fso.txt"
Set ObjExl = CreateObject("Excel.Application")
Set ObjWrkBk = ObjExl.Workbooks.Open(sLocation)
Set ObjWrkSht = ObjWrkBk.workSheets("Sheet1")
ObjExl.Visible = True
Set FSO = CreateObject("Scripting.FileSystemObject")
Set FSOFile = FSO.CreateTextFile (sTxtLocation)
sRowCnt = ObjWrkSht.usedRange.Rows.Count
sColCnt = ObjWrkSht.usedRange.Columns.Count
For iLoop = 1 to sRowCnt
  For jLoop = 1 to sColCnt 
    FSOFile.Write(ObjExl.Cells(iLoop,jLoop).value) & vbtab 
  Next
Next

Set ObjWrkBk = Nothing
Set ObjWrkSht = Nothing
Set ObjExl = Nothing
Set FSO = Nothing
Set FSOFile = Nothing
0
Pulkit Agarwal

C'est pour créer un fichier texte

For i = 1 to 10
    createFile( i )
Next

Public Sub createFile(a)

    Dim fso,MyFile
    filePath = "C:\file_name" & a & ".txt"
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set MyFile = fso.CreateTextFile(filePath)
    MyFile.WriteLine("This is a separate file")
    MyFile.close

End Sub

Et ceci pour lire un fichier texte

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Set dict = CreateObject("Scripting.Dictionary")
Set file = fso.OpenTextFile ("test.txt", 1)
row = 0
Do Until file.AtEndOfStream
  line = file.Readline
  dict.Add row, line
  row = row + 1
Loop

file.Close

For Each line in dict.Items
  WScript.Echo line
  WScript.Sleep 1000
Next
0
YourHelper