Lee y escribe en un archivo usando VBScript

¿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. ¿Hay alguna forma en que podamos abrir el archivo para lectura y escritura simplemente llamando al método OpenTextFile solo una vez?

Soy realmente nuevo en VBScript. Solo estoy familiarizado con los conceptos de C. ¿Hay algún enlace para realmente comenzar con VBScript?

Creo que necesito tener un buen conocimiento de los conceptos de objetos y propiedades.

Puede crear un archivo temporal y 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 

Obtenga más información 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 lectura y la reutilización
  • Const para que las constantes bien conocidas reciban 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") 

Podrías abrir dos textos corridos, uno para leer

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

y uno para agregar

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

El filestreamIN puede leer desde el comienzo del archivo, y filestreamOUT puede escribir al final del archivo.

No lo crea … solo puede usar openTextFile para leer ( 1 ), escribir ( 2 ) o agregar ( 8 ). Referencia aquí .

Si usabas 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ías ponerlo en una hoja de Excel, idk si valdrá la pena si es necesario para otras cosas, pero almacenar información en hojas de Excel es mucho más agradable porque puedes 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 

lo siento si esta respuesta no es útil, la primera vez que escribo una respuesta y simplemente pensé que esta podría ser una mejor manera para usted

También podría 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 escribir la matriz 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 

Independientemente de lo que intente 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 debería evitarse. Sugeriría leer todo el archivo usando el método .ReadAll y luego cerrarlo y hacer lo que sea necesario con los datos (suponiendo que lea los contenidos en una variable) y luego escribir en el mismo archivo y sobrescribir el archivo . Si le preocupa que algo salga mal al sobrescribir el archivo actual, siempre puede tratar de escribirlo en un archivo diferente y lanzar un error si eso no funciona antes de intentar sobreescribir el original.

A continuación se muestra 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 

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