2009-07-17 64 views
19

¿Cómo podemos leer y escribir algunas cadenas en un archivo de texto usando VBScript? Quiero decir que tengo un archivo de texto que ya está presente por lo que cuando se utiliza el código de abajo: -Lee y escribe en un archivo usando VBScript

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

Esto abre el archivo sólo para lectura, pero soy incapaz de escribir nada y cuando utilizo 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 de que podamos abrir el archivo para leer y escribir simplemente llamando al método OpenTextFile una sola vez?

Soy realmente nuevo en VBScript. Solo 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.

Respuesta

4

no lo creo ... sólo se puede utilizar para la lectura openTextFile (1), escritura (2), o de agregar (8). Referencia here.

Si se va using VB6 instead de VBScript, que podría hacer:

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

Uso del modo Random. Por ejemplo:

Open "C:\New\maddy.txt" For Random As #1 
+0

estoy realmente nuevo a vbscripting.I sólo estoy familiarizado con mis conceptos C. ¿Alguien puede sugerirme cualquier enlace para obtener realmente mi vbscripting comenzó. Supongo que necesito tener un buen conocimiento sobre los conceptos de objetos y propiedades ... ¿Alguna sugerencia? –

+0

Aquí hay un buen tutorial de W3Schools: http://www.w3schools.com/Vbscript/vbscript_intro.asp –

+0

pianoman, muchas gracias ... ya había revisado el enlace y solo le cuento las operaciones básicas. Quiero profundizar un poco más como el uso de objetos, clases. Realmente soy nuevo en estos términos como tal. –

20

Se puede crear un archivo temporal, a continuación, cambiar el nombre de nuevo 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 

uso es casi lo 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 
6

Usted puede abrir dos textos corridos, uno para leer

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

y otra para anexar

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

El filestreamIN puede leer desde el principio del archivo y el filestreamOUT puede escribir en el final del archivo.

1

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 

Manipular la matriz en cualquier forma que elija, y luego escribir la matriz de nuevo al 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 
+0

esa es una de las formas, siempre que el tamaño del archivo no sea enorme. – ghostdog74

+0

Casi un trazador de líneas, es decir, podría haber sido "file = Split (CreateObject (...). OpenTextFile (..., 1) .ReadAll(), vbCrLf)" :) –

11

Conoce más sobre el objeto FileSystemObject en http://msdn.microsoft.com/en-us/library/aa242706(v=vs.60).aspx. Para una buena VBScript, recomiendo:

  • Option Explicit para ayudar a detectar errores tipográficos en las variables.
  • Función y Sub para mejorar readilbity y reutilización
  • Const nombres para que las constantes conocidas se dan

Aquí hay algo de 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") 
+1

Ambas funciones necesitan la "f.Close "método para que los archivos no permanezcan abiertos. – Rich

+0

'.ReadAll' parece tener un límite de tamaño de archivo que otros métodos no tienen. O al menos mi secuencia de comandos se bloquea en archivos de más de 1 GB ... –

1

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.

2

Puedes 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 mejor 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 

siento si esta respuesta tampoco útil, primera vez que escribo una respuesta y sólo pensé que esto podría ser una manera más agradable para usted

0

a continuación se muestra un código sencillo de 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 
+0

¡Bienvenido a Stack Overflow! Tenga cuidado al vincular su propio contenido en diferentes sitios, no desea ser un [spammer] (http://stackoverflow.com/help/promotion). Debería incluir la mayoría del contenido aquí, y usar el enlace solo como referencia. – NathanOliver

0

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 
Cuestiones relacionadas