examples - vbscript virus
Lee y escribe en un archivo usando VBScript (9)
¿Cómo podemos leer y escribir una cadena en un archivo de texto usando VBScript? Quiero decir que tengo un archivo de texto que ya está presente, así que cuando uso este código a continuación:
Set fso = CreateObject("Scripting.FileSystemObject" )
Set file = fso.OpenTextFile("C:/New/maddy.txt",1,1)
Esto abre el archivo solo para leer, pero no puedo escribir nada y cuando uso este código:
Set fso = CreateObject("Scripting.FileSystemObject" )
Set file = fso.OpenTextFile("C:/New/maddy.txt",2,1)
Solo puedo usar este archivo para escribir pero no puedo leer nada. ¿Existe alguna forma de que podamos abrir el archivo para leer y escribir simplemente llamando al método OpenTextFile
solo una vez?
Soy realmente nuevo en VBScript. Sólo estoy familiarizado con los conceptos de C. ¿Hay algún enlace para realmente comenzar con VBScript?
Supongo que necesito tener un buen conocimiento de los conceptos de objetos y propiedades.
A continuación hay un código simple para ejecutar esto:
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
Encuentre más sobre el objeto FileSystemObject en http://msdn.microsoft.com/en-us/library/aa242706(v=vs.60).aspx . Para un buen VBScript, recomiendo:
- Opción explícita para ayudar a detectar errores tipográficos en las variables.
- Función y Sub para mejorar la legibilidad y reutilización.
- Constantes para que las constantes conocidas tengan nombres.
Aquí hay un código para leer y escribir texto en un archivo de texto:
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")
Esto es para crear un archivo de texto.
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
Y esto para leer un archivo de texto.
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
Independientemente de lo que esté intentando hacer, no debería haber necesidad de leer y escribir en un archivo al mismo tiempo. También usaría más memoria que siempre debe evitarse. Yo sugeriría leer todo el archivo usando el método .ReadAll y luego lo cierro y hago lo que sea necesario para hacer con los datos (suponiendo que lea el contenido en una variable) y luego escriba en el mismo archivo y sobrescriba el archivo . Si le preocupa que algo salga mal cuando sobrescriba el archivo actual, siempre puede intentar escribirlo en un archivo diferente y generar un error si eso no funciona antes de intentar sobrescribir el original.
No lo creo ... solo puede usar openTextFile
para leer ( 1
), escribir ( 2
) o adjuntar ( 8
). Referencia here .
Si estuvieras usando VB6 en lugar de VBScript, podrías hacer:
Open "Filename" [For Mode] [AccessRestriction] [LockType] As #FileNumber
Usando el modo Random
. Por ejemplo:
Open "C:/New/maddy.txt" For Random As #1
Podría ponerlo en una hoja de Excel, idk si valdrá la pena para usted si es necesario para otras cosas, pero almacenar información en hojas de excel es mucho mejor porque puede leer y escribir fácilmente al mismo tiempo con el
''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
disculpe si esta respuesta no es útil, escriba por primera vez una respuesta y piense que esta podría ser la mejor manera para usted
Podrías abrir dos secuencias de texto, una para leer.
Set filestreamIn = CreateObject("Scripting.FileSystemObject").OpenTextFile("C:/Test.txt,1)
y uno para anexar
Set filestreamOUT = CreateObject("Scripting.FileSystemObject").OpenTextFile("C:/Test.txt,8,true)
FilestreamIN puede leer desde el principio del archivo, y filestreamOUT puede escribir al final del archivo.
Puede crear un archivo temporal, luego cambiarle el nombre al archivo original:
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
El uso es casi el mismo usando 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
También puede leer todo el archivo y almacenarlo en una matriz
Set filestreamIN = CreateObject("Scripting.FileSystemObject").OpenTextFile("C:/Test.txt",1)
file = Split(filestreamIN.ReadAll(), vbCrLf)
filestreamIN.Close()
Set filestreamIN = Nothing
Manipule la matriz de la forma que elija y luego vuelva a escribirla en el archivo.
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