Чтение и запись в файл с использованием VBScript

Как мы можем прочитать и записать некоторую строку в текстовый файл, используя VBScript? Я имею в виду, что у меня есть текстовый файл, который уже присутствует, поэтому, когда я использую этот код ниже:-

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

Это открывает файл только для чтения, но я не могу ничего написать, и когда я использую этот код:-

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

Я могу просто использовать этот файл для записи, но не могу ничего прочитать. Есть ли способ, с помощью которого мы можем открыть файл для чтения и записи, просто вызвав OpenTextFile метод только один раз.

Я действительно новичок в VBScript. Я знаком только с понятиями Си. Есть ли какая-нибудь ссылка, чтобы действительно начать работать с VBScript?

Я думаю, мне нужно хорошо знать понятия объектов и свойств.

9 ответов

Вы можете создать временный файл, а затем переименовать его обратно в исходный файл:

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 

Использование почти то же самое с использованием 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 

Узнайте больше об объекте FileSystemObject по адресу http://msdn.microsoft.com/en-us/library/aa242706(v=vs.60).aspx. Для хорошего VBScript я рекомендую:

  • Опция Явный, чтобы помочь обнаружить опечатки в переменных.
  • Функция и Sub для улучшения готовности и повторного использования
  • Const, так что известные константы имеют имена

Вот некоторый код для чтения и записи текста в текстовый файл:

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")

Вы можете открыть два текстовых потока, один для чтения

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

и один для добавления

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

Файловый поток IN может считывать с начала файла, а filestreamOUT может записывать в конец файла.

Не думай так... ты можешь использовать только openTextFile для чтения (1), пишу (2) или добавление (8). Ссылка здесь.

Если бы вы использовали VB6 вместо VBScript, вы могли бы сделать:

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

С использованием Random Режим. Например:

Open "C:\New\maddy.txt" For Random As #1

Вы можете поместить его в лист Excel, idk, если оно того стоит для вас, если это необходимо для других целей, но хранение информации в листах Excel намного приятнее, потому что вы можете легко читать и писать одновременно с

 '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

извините, если этот ответ бесполезен, впервые пишу ответ и просто подумал, что это может быть лучше для вас

Независимо от того, что вы пытаетесь сделать, не должно быть необходимости одновременно выполнять чтение и запись в файл. Это также использовало бы больше памяти, чего всегда следует избегать. Я бы предложил прочитать весь файл с помощью метода.ReadAll, а затем закрыть его и сделать все, что вам нужно сделать с данными (при условии, что вы прочитали содержимое в переменную), а затем выполнить запись в тот же файл и перезаписать файл., Если вы беспокоитесь о том, чтобы что-то пошло не так при перезаписи текущего файла, вы всегда можете попробовать записать его в другой файл и выдать ошибку, если это не сработает, прежде чем пытаться перезаписать оригинал.

Вы также можете прочитать весь файл и сохранить его в массиве

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

Управляйте массивом любым способом, который вы выберете, а затем запишите массив обратно в файл.

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 

Ниже приведен простой код для выполнения этого:

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

Это для создания текстового файла

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

И это для чтения текстового файла

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
Другие вопросы по тегам