Чтение и запись в файл с использованием VBScript - PullRequest
22 голосов
/ 17 июля 2009

Как мы можем прочитать и записать некоторую строку в текстовый файл, используя 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 ]

22 голосов
/ 17 июля 2009

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

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 
12 голосов
/ 17 января 2012

Подробнее об объекте 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")
6 голосов
/ 17 июля 2009

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

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

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

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

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

5 голосов
/ 17 июля 2009

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

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

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

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

Open "C:\New\maddy.txt" For Random As #1
2 голосов
/ 04 сентября 2015

Вы можете поместить его в лист Excel, например, если оно того стоит для вас, если это необходимо для других целей, но хранение информации в листах 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

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

1 голос
/ 12 декабря 2014

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

1 голос
/ 17 июля 2009

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

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 
0 голосов
/ 13 августа 2016

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

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
0 голосов
/ 30 июня 2016

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...