Membaca dan menulis ke dalam file menggunakan VBScript

Bagaimana kita bisa membaca dan menulis beberapa string ke dalam file teks menggunakan VBScript? Maksud saya, saya memiliki file teks yang sudah ada jadi ketika saya menggunakan kode di bawah ini: -

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

Ini membuka file hanya untuk membaca tetapi saya tidak dapat menulis apa pun dan ketika saya menggunakan kode ini: -

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

Saya hanya dapat menggunakan file ini untuk menulis tetapi tidak dapat membaca apa pun. Apakah ada cara dimana kita dapat membuka file untuk membaca dan menulis hanya dengan memanggil metode OpenTextFile sekali saja.

Saya benar-benar baru mengenal VBScript. Saya hanya akrab dengan konsep C. Apakah ada tautan untuk membantu saya memulai dengan VBScript?

Saya rasa saya perlu memiliki pengetahuan yang baik tentang konsep objek dan properti.


person Community    schedule 17.07.2009    source sumber


Jawaban (9)


Anda dapat membuat file sementara, lalu mengganti namanya kembali ke file asli:

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 

Penggunaannya hampir sama menggunakan 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 
person ghostdog74    schedule 17.07.2009
comment
Satu-satunya poin adalah Anda harus menggunakan objOutFile.WriteLine(Inp) untuk menampilkan baris yang sama. - person ib11; 30.04.2019

Temukan lebih lanjut tentang objek FileSystemObject di http://msdn.microsoft.com/en-us/library/aa242706(v=vs.60).aspx. Untuk VBScript yang bagus, saya merekomendasikan:

  • Opsi Eksplisit untuk membantu mendeteksi kesalahan ketik pada variabel.
  • Fungsi dan Sub untuk meningkatkan keterbacaan dan penggunaan kembali
  • Const sehingga konstanta yang terkenal diberi nama

Berikut beberapa kode untuk membaca dan menulis teks ke file teks:

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")
person Stephen Quan    schedule 16.01.2012
comment
Kedua fungsi tersebut memerlukan metode f.Close agar file tidak tetap terbuka. - person Rich; 28.02.2014
comment
.ReadAll tampaknya memiliki batas ukuran file yang tidak dimiliki metode lain. Atau setidaknya skrip saya mogok pada file yang berukuran lebih dari 1GB atau lebih... - person JOATMON; 11.11.2016
comment
Jangan gunakan ReadAll untuk file besar, melainkan gunakan objek TextStream untuk buffering baca/tulis. - person user692942; 21.04.2020

Anda dapat membuka dua aliran teks, satu untuk membaca

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

dan satu untuk ditambahkan

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

FilestreamIN dapat membaca dari awal file, dan filestreamOUT dapat menulis hingga akhir file.

person Tester101    schedule 17.07.2009

Jangan kira begitu...Anda hanya dapat menggunakan openTextFile untuk membaca (1), menulis (2), atau menambahkan (8). Referensi di sini.

Jika Anda menggunakan VB6 dan bukan VBScript, Anda dapat melakukan:

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

Menggunakan mode Random. Misalnya:

Open "C:\New\maddy.txt" For Random As #1
person Daniel F. Thornton    schedule 17.07.2009
comment
Saya benar-benar baru mengenal vbscripting. Saya hanya akrab dengan konsep C saya. Adakah yang bisa menyarankan saya tautan apa pun untuk memulai vbscripting saya. Saya kira saya perlu memiliki pengetahuan yang baik tentang konsep objek dan properti.. Ada saran?? - person ; 17.07.2009
comment
Berikut ini tutorial bagus dari W3Schools: w3schools.com/Vbscript/vbscript_intro.asp - person Daniel F. Thornton; 17.07.2009
comment
pianoman, Terima kasih banyak..Saya telah membaca tautannya dan hanya memberi tahu tentang operasi dasar. Saya ingin mendalami lebih dalam seperti penggunaan objek, kelas. Saya benar-benar baru dalam istilah-istilah ini. - person ; 17.07.2009
comment
Berikut penjelasan yang cukup detail mengenai istilah-istilah tersebut: 4guysfromrolla.com/webtech/092399-1. shtml - person Daniel F. Thornton; 17.07.2009

Anda bisa menaruhnya di lembar Excel, entah apakah itu akan bermanfaat bagi Anda jika diperlukan untuk hal lain tetapi menyimpan informasi di lembar Excel jauh lebih bagus karena Anda dapat dengan mudah membaca dan menulis pada saat yang bersamaan dengan

 '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

maaf jika jawaban ini tidak membantu, pertama kali menulis jawaban dan berpikir ini mungkin cara yang lebih baik untuk Anda

person Spy    schedule 04.09.2015

Anda juga dapat membaca seluruh file, dan menyimpannya dalam sebuah array

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

Memanipulasi array dengan cara apa pun yang Anda pilih, lalu menulis kembali array ke file.

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 
person Tester101    schedule 17.07.2009
comment
itu salah satu caranya, asalkan ukuran filenya tidak besar. - person ghostdog74; 18.07.2009
comment
Hampir satu baris, yaitu Anda bisa menggunakan file = Split(CreateObject(...).OpenTextFile(...,1).ReadAll(), vbCrLf) :) - person Stephen Quan; 17.01.2012

Terlepas dari apa yang Anda coba lakukan, tidak perlu membaca dan menulis ke file secara bersamaan. Itu juga akan menggunakan lebih banyak memori yang harus selalu dihindari. Saya sarankan membaca seluruh file menggunakan metode .ReadAll dan kemudian menutupnya dan melakukan apa pun yang perlu Anda lakukan dengan data (dengan asumsi Anda membaca konten ke dalam variabel) dan kemudian menulis ke file yang sama dan menimpa file tersebut . Jika Anda khawatir akan terjadi kesalahan saat menimpa file saat ini, Anda selalu dapat mencoba menulisnya ke file lain dan membuat kesalahan jika tidak berhasil sebelum mencoba menimpa file asli.

person Christopher J. Scharer    schedule 12.12.2014

Di bawah ini adalah beberapa kode sederhana untuk menjalankan ini:

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
person Pulkit Agarwal    schedule 30.06.2016
comment
Selamat datang di Stack Overflow! Harap berhati-hati saat menautkan ke konten Anda sendiri di situs lain, Anda tidak ingin menjadi spammer. Anda harus menyertakan sebagian besar konten di sini, dan menggunakan tautan hanya sebagai referensi. - person NathanOliver; 30.06.2016

Ini untuk membuat file teks

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

Dan ini untuk membaca file teks

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
person YourHelper    schedule 13.08.2016