Чтение и запись в файл с помощью 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. Я знаком с понятиями C.
Есть ли какая-нибудь ссылка, чтобы действительно начать с VBScript?
Думаю, мне нужно хорошо знать понятия объектов и свойств.
Ответы
Ответ 1
Вы можете создать временный файл, а затем переименовать его в исходный файл:
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
Ответ 2
Узнайте больше о объекте 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")
Ответ 3
Вы можете открыть два текстовых потока, один для чтения
Set filestreamIn = CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\Test.txt,1)
и один для добавления
Set filestreamOUT = CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\Test.txt,8,true)
filestreamIN может считывать с начала файла, а файл filestreamOUT может записывать в конец файла.
Ответ 4
Не думайте так... вы можете использовать openTextFile
для чтения (1
), записи (2
) или добавления (8
). Ссылка здесь.
Если вы были вместо VB6 вместо VBScript, вы могли бы сделать:
Open "Filename" [For Mode] [AccessRestriction] [LockType] As #FileNumber
Использование режима Random
. Например:
Open "C:\New\maddy.txt" For Random As #1
Ответ 5
Вы можете поместить его в лист 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
Извините, если этот ответ не поможет, первый раз написание ответа и просто подумайте, что это может быть более приятным для вас.
Ответ 6
Вы также можете прочитать весь файл и сохранить его в массиве
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
Ответ 7
Независимо от того, что вы пытаетесь сделать, не должно быть необходимости одновременно читать и писать в файл. Он также будет использовать больше памяти, чего всегда следует избегать. Я бы предложил прочитать весь файл с помощью метода .ReadAll, а затем закрыть его и сделать все, что вам нужно сделать с данными (при условии, что вы прочитали содержимое в переменной), а затем сделать запись в тот же файл и перезаписать файл, Если вы беспокоитесь о том, что что-то пошло не так, когда переписываете текущий файл, вы всегда можете попытаться записать его в другой файл и выбросить ошибку, если это не работает, прежде чем пытаться переписать оригинал.
Ответ 8
Ниже приведен простой код для этого:
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
Ответ 9
Это для создания текстового файла
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