web-dev-qa-db-ja.com

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メソッドを1回だけ呼び出すだけで、読み取りおよび書き込み用にファイルを開くことができますか。

私はVBScriptを初めて使用します。私はCの概念にしか精通していません。 VBScriptを実際に使い始めるためのリンクはありますか?

オブジェクトとプロパティの概念について十分な知識が必要だと思います。

22
Maddy

一時ファイルを作成し、名前を元のファイルに戻すことができます。

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 
22
ghostdog74

FileSystemObjectオブジェクトの詳細については、 http://msdn.Microsoft.com/en-us/library/aa242706(v = vs.60).aspx をご覧ください。優れたVBScriptを使用するには、以下をお勧めします。

  • Option Explicit。変数のタイプミスの検出に役立ちます。
  • Functionおよび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")
12
Stephen Quan

2つのテキストストリームを開くことができます。1つは読み取り用です

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

および追加用

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

FilestreamINはファイルの先頭から読み取ることができ、filestreamOUTはファイルの末尾に書き込むことができます。

6
Tester101

そう思わないでください...あなたは読むために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

この回答が役に立たない場合は申し訳ありませんが、初めて回答を書いて、これがあなたにとってより良い方法だと思っただけです

2
Spy

何をしようとしているかに関係なく、ファイルの読み取りと書き込みを同時に行う必要はありません。また、より多くのメモリを使用するため、常に回避する必要があります。 .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 
1
Tester101

以下は、これを実行する簡単なコードです。

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

これはテキストファイルを作成するためのものです

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
YourHelper