Professional Documents
Culture Documents
generando otro, si te fijas, utilizando el objeto FileSystemObject, el codigo queda de esta forma, solo tendras que colocar la ruta donde este tu archivo, de todos modos pruebalo, te coloco dos ejemplos y espero te sirva de ayuda:
Sub LeeryEscribir() Dim ArchivoSistema, Carpeta, ArchivosCarpeta, Archivo, AbrirArchivo, contador Dim Linea() Set ArchivoSistema = CreateObject("Scripting.FileSystemObject") Set Carpeta = ArchivoSistema.GetFolder("C:Documents and SettingsDaivinsonEscritorio") Set ArchivosCarpeta = Carpeta.Files
If Archivo.Name = "prueba.txt" Then 'Abrir el Archivo para la lectura correspondiente Set AbrirArchivo = Archivo.OpenAsTextStream(1) 'El archivo lo abro y guardo cada linea en un vector Do While AbrirArchivo.atendofline = False contador = contador + 1 ReDim Preserve Linea(contador) Linea(contador) = AbrirArchivo.ReadLine
Next 'Archivo Set CrearArchivo = ArchivoSistema.CreateTextFile("C:Documents and SettingsDaivinsonEscritoriootraprueba.txt", True) For i = 1 To contador CrearArchivo.Writeline Linea(i) Next i Set CrearArchivo = Nothing Set ArchivosCarpeta = Nothing Set Carpeta = Nothing Set ArchivoSistema = Nothing
End Sub
Dim Linea As String, Total As String Do Until EOF(1) Line Input #1, Linea Total = Total + Linea + vbCrLf Loop Close #1 End Sub
Texto planoCopiar cdigo fuenteImprimir Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles MyBase.Load
Try
Dim ContadorDeArchivos As System.Collections.ObjectModel.ReadOnlyCollection(Of String) 'le indicamos el path que queremos ContadorDeArchivos = My.Computer.FileSystem.GetFiles("C:\WINDOWS") 'nos devuelve la cantidad de archivos
Catch oExcep As Exception MsgBox("Descripcin del error : " & _ oExcep.Message, MsgBoxStyle.Critical, "Error") End Try
End Sub Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles MyBase.Load
Try
Dim ContadorDeArchivos As System.Collections.ObjectModel.ReadOnlyCollection(Of String) 'le indicamos el path que queremos ContadorDeArchivos = My.Computer.FileSystem.GetFiles("C:\WINDOWS") 'nos devuelve la cantidad de archivos
MsgBox("La Cantidad de Archivos es: " & CStr(ContadorDeArchivos.Count)) ' error Catch oExcep As Exception MsgBox("Descripcin del error : " & _ oExcep.Message, MsgBoxStyle.Critical, "Error") End Try
End Sub
--------------------------------------------------------------------------------
2 - Crear un archivo vaco ( mtodo Create - objeto System.IO.File ) Texto planoCopiar cdigo fuenteImprimir Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load
Try Dim Archivo As System.IO.FileStream ' crea un archivo vacio prueba.txt Archivo = System.IO.File.Create("c:\Prueba.txt") ' error Catch oe As Exception MsgBox(oe.Message, MsgBoxStyle.Critical) End Try End Sub Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load
Try Dim Archivo As System.IO.FileStream ' crea un archivo vacio prueba.txt Archivo = System.IO.File.Create("c:\Prueba.txt")
' error Catch oe As Exception MsgBox(oe.Message, MsgBoxStyle.Critical) End Try End Sub
--------------------------------------------------------------------------------
3 - Crear un archivo plano y aadirle texto ( mtodo WriteLine del objeto StreamWriter. Espacio de nombres System.IO ) Texto planoCopiar cdigo fuenteImprimir Option Explicit On
Imports System.IO
Dim Linea As String = "Lnea de texto " & vbNewLine & "Otra linea de texto" oSW.WriteLine(Linea)
oSW.Flush()
Imports System.IO
Dim Linea As String = "Lnea de texto " & vbNewLine & "Otra linea de texto" oSW.WriteLine(Linea) oSW.Flush()
--------------------------------------------------------------------------------
4 - My.Computer.FileSystem.GetFiles - Listar archivos Ejemplo que carga y lista en un control listbox, los archivos de una carpeta
Colocar un ListBox1
Texto planoCopiar cdigo fuenteImprimir Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load
Try ' lista todos los archivos dll del directorio windows _ ' SearchAllSubDirectories : incluye los Subdirectorios ' SearchTopLevelOnly : para buscar solo en el nivel actual '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' For Each Archivo As String In My.Computer.FileSystem.GetFiles( _ "c:\windows", _ FileIO.SearchOption.SearchAllSubDirectories, _ "*.dll")
End Try End Sub Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load
Try ' lista todos los archivos dll del directorio windows _ ' SearchAllSubDirectories : incluye los Subdirectorios ' SearchTopLevelOnly : para buscar solo en el nivel actual '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' For Each Archivo As String In My.Computer.FileSystem.GetFiles( _ "c:\windows", _ FileIO.SearchOption.SearchAllSubDirectories, _ "*.dll")
ListBox1.Items.Add(Archivo) Next ' errores Catch oe As Exception MsgBox(oe.Message, MsgBoxStyle.Critical) End Try End Sub
--------------------------------------------------------------------------------
5 - My.Computer.FileSystem.FindInFiles - Buscar dentro de un fichero Lo siguiente Busca en un directorio archivos que contengan una cadena de texto determinada
Texto planoCopiar cdigo fuenteImprimir Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load
Try
Dim Archivo As System.Collections.ObjectModel.ReadOnlyCollection(Of String) ' busca "Hola mundo" en un solo nivel ( SearchTopLevelOnly ) en el directorio c: Archivo = My.Computer.FileSystem.FindInFiles( _ "C:\", _ "Hola Mundo", _ True, _ FileIO.SearchOption.SearchTopLevelOnly) ' recorre la lista For Each name As String In Archivo ' Agrega ListBox1.Items.Add(name) Next
' error Catch oe As Exception MsgBox(oe.Message, MsgBoxStyle.Critical) End Try nd Sub Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load
Try
Dim Archivo As System.Collections.ObjectModel.ReadOnlyCollection(Of String) ' busca "Hola mundo" en un solo nivel ( SearchTopLevelOnly ) en el directorio c: Archivo = My.Computer.FileSystem.FindInFiles( _ "C:\", _ "Hola Mundo", _ True, _ FileIO.SearchOption.SearchTopLevelOnly) ' recorre la lista For Each name As String In Archivo ' Agrega ListBox1.Items.Add(name) Next ' error Catch oe As Exception MsgBox(oe.Message, MsgBoxStyle.Critical) End Try
End Sub
--------------------------------------------------------------------------------
6 - Comprobar si un directorio o archivo Existe Propiedad Exist del objeto Directory y el objeto File. (Espacio de nombres System.IO)
Imports System.IO
If File.Exists("c:\windows\explorer.exe") Then MsgBox("Existe", MsgBoxStyle.Information) Else MsgBox("No existe", MsgBoxStyle.Information) End If End Sub End Class Option Explicit On
Imports System.IO
' Directory If Directory.Exists("c:\windows") Then MsgBox("La carpeta existe", MsgBoxStyle.Information) Else MsgBox("No existe", MsgBoxStyle.Information) End If
If File.Exists("c:\windows\explorer.exe") Then MsgBox("Existe", MsgBoxStyle.Information) Else MsgBox("No existe", MsgBoxStyle.Information) End If End Sub End Class
--------------------------------------------------------------------------------
Public Class Form1 Private Sub Form1_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load ' ruta del archivo y el nuevo nombre Dim sPath As String = "c:\archivo.txt"
Try ' Renombrarlo con la funcin renameFile My.Computer.FileSystem.RenameFile(sPath, sNuevoNombre) MsgBox("Ok.", MsgBoxStyle.Information, "Renombrar archivo") ' errores Catch ex As Exception MsgBox(ex.Message.ToString, MsgBoxStyle.Critical) End Try End Sub
Public Class Form1 Private Sub Form1_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load ' ruta del archivo y el nuevo nombre Dim sPath As String = "c:\archivo.txt" Dim sNuevoNombre As String = "archivo_Renombrado.txt"
MsgBox("Ok.", MsgBoxStyle.Information, "Renombrar archivo") ' errores Catch ex As Exception MsgBox(ex.Message.ToString, MsgBoxStyle.Critical) End Try End Sub
End Class
--------------------------------------------------------------------------------
8 - Mover ( My.Computer.FileSystem.MoveFile )
Public Class Form1 Private Sub Form1_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load ' ruta del archivo origen y el nuevo path y nombre Dim sArchivoOrigen As String = "c:\archivo.txt"
Try ' Mover el fichero.si existe lo sobreescribe My.Computer.FileSystem.MoveFile(sArchivoOrigen, _ sRutaDestino, _ True) MsgBox("Ok.", MsgBoxStyle.Information, "Mover archivo") ' errores Catch ex As Exception MsgBox(ex.Message.ToString, MsgBoxStyle.Critical) End Try End Sub End Class Option Explicit On
Public Class Form1 Private Sub Form1_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load ' ruta del archivo origen y el nuevo path y nombre Dim sArchivoOrigen As String = "c:\archivo.txt" Dim sRutaDestino As String = "d:\archivo.txt"
My.Computer.FileSystem.MoveFile(sArchivoOrigen, _ sRutaDestino, _ True) MsgBox("Ok.", MsgBoxStyle.Information, "Mover archivo") ' errores Catch ex As Exception MsgBox(ex.Message.ToString, MsgBoxStyle.Critical) End Try End Sub End Class
--------------------------------------------------------------------------------
( My.Computer.FileSystem.DeleteDirectory )
Try ' Eliminar el archivo, mostrando el cuadro 'de dilogo de eliminar de windows para confirmar Dim sdir As String = "c:\Nueva carpeta" Dim Spath As String = "c:\archivo.txt"
Public Class Form1 Private Sub Form1_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load
Try ' Eliminar el archivo, mostrando el cuadro 'de dilogo de eliminar de windows para confirmar Dim sdir As String = "c:\Nueva carpeta" Dim Spath As String = "c:\archivo.txt"
' errores Catch ex As Exception MsgBox(ex.Message.ToString, MsgBoxStyle.Critical) End Try End Sub End Class
--------------------------------------------------------------------------------
Public Class Form1 Private Sub Form1_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load
Try ' crea el archivo en el directorio temp del usuario Dim sTempFile As String = My.Computer.FileSystem.GetTempFileName.ToString ' muestra la ruta MsgBox("Archivo creado en la direccin :" & _ vbNewLine & _ sTempFile, _ MsgBoxStyle.Information, "Ruta del temporal")
' errores Catch ex As Exception MsgBox(ex.Message.ToString, MsgBoxStyle.Critical) End Try End Sub End Class Option Explicit On
Public Class Form1 Private Sub Form1_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load
Try ' crea el archivo en el directorio temp del usuario Dim sTempFile As String = My.Computer.FileSystem.GetTempFileName.ToString
' muestra la ruta MsgBox("Archivo creado en la direccin :" & _ vbNewLine & _ sTempFile, _ MsgBoxStyle.Information, "Ruta del temporal")
' errores Catch ex As Exception MsgBox(ex.Message.ToString, MsgBoxStyle.Critical) End Try End Sub End Class
--------------------------------------------------------------------------------
11 - Leer todo el contenido de un archivo de texto en una solo operacin, y almacenarlo en una variable ( My.Computer.FileSystem.ReadAllText )
Private Sub Form1_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load
With My.Computer.FileSystem ' verifica si existe el path If .FileExists(SPath) Then ' lee todo el contenido sContent = .ReadAllText(SPath) MsgBox(sContent.ToString, MsgBoxStyle.Information, "Datos") Else MsgBox("ruta invlida", MsgBoxStyle.Critical, "error") End If End With ' errores Catch ex As Exception MsgBox(ex.Message.ToString, MsgBoxStyle.Critical) End Try End Sub End Class Option Explicit On
Public Class Form1 Private Sub Form1_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load
With My.Computer.FileSystem ' verifica si existe el path If .FileExists(SPath) Then ' lee todo el contenido sContent = .ReadAllText(SPath) MsgBox(sContent.ToString, MsgBoxStyle.Information, "Datos") Else MsgBox("ruta invlida", MsgBoxStyle.Critical, "error") End If End With ' errores Catch ex As Exception MsgBox(ex.Message.ToString, MsgBoxStyle.Critical) End Try End Sub End Class
--------------------------------------------------------------------------------
12 - Cargar directorios y archivos en un ListBox ( Mtodos GetFiles y GetDirectories) Colocar en un formulario dos controles ListBox
Imports System.IO
Private Sub Form1_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load
' Obtener todos los archivos .exe del directorio windows ( inclyendo subdirectorios ) For Each archivos As String In Directory.GetFiles("c:\windows", _ "*.exe", _ SearchOption.AllDirectories) ' extraer el nombre de la ruta archivos = archivos.Substring(archivos.LastIndexOf("\") + 1).ToString
' Obtener todos los directorios del directorio c: ( un solo nivel ) For Each archivos As String In Directory.GetDirectories("c:\", "*.*", SearchOption.TopDirectoryOnly) ' extraer el nombre de la carpeta de la ruta completa archivos = archivos.Substring(archivos.LastIndexOf("\") + 1).ToString ' Agregar el valor ListBox2.Items.Add(archivos.ToString) Next
Imports System.IO
Private Sub Form1_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load
' Obtener todos los archivos .exe del directorio windows ( inclyendo subdirectorios ) For Each archivos As String In Directory.GetFiles("c:\windows", _ "*.exe", _ SearchOption.AllDirectories) ' extraer el nombre de la ruta archivos = archivos.Substring(archivos.LastIndexOf("\") + 1).ToString ' Agregar el valor al listbox ListBox1.Items.Add(archivos.ToString) Next
' Obtener todos los directorios del directorio c: ( un solo nivel ) For Each archivos As String In Directory.GetDirectories("c:\", "*.*", SearchOption.TopDirectoryOnly) ' extraer el nombre de la carpeta de la ruta completa archivos = archivos.Substring(archivos.LastIndexOf("\") + 1).ToString ' Agregar el valor ListBox2.Items.Add(archivos.ToString) Next
--------------------------------------------------------------------------------
13 - Obtener propiedades Ejemplo que usa la clase FileInfo de system.IO para obtener algunas propiedades y datos de archivos ( el nombre , la fecha y la hora de modificacin en formato corto , el tamao en bytes y la extensin )
Imports System.IO
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' agregar columnas With ListView1 .Columns.Add("Nombre", 150)
.Columns.Add("Fecha y hora de modificacin", 150) .Columns.Add("Tamao - bytes ", 100) .Columns.Add("Extensin", 80)
.View = View.Details .GridLines = True End With Button1.Text = "Listar propiedades" TextBox1.Text = "c:\windows" End Sub
Private Sub Button1_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click
ListView1.Items.Clear() Try ' recorrer los ficheros en la coleccin For Each sFichero As String In Directory.GetFiles( _ TextBox1.Text, "*.*", _ SearchOption.TopDirectoryOnly)
' LastWriteTime - fecha de modificacin .SubItems.Add(Archivo.LastWriteTime.ToShortDateString & " " & _ Archivo.LastWriteTime.ToShortTimeString) ' Length - tamao en bytes .SubItems.Add(Archivo.Length.ToString)
End With
Hola
Si lo nico que quieres es cargar el archivo y reemplazar los ";" por tabuladores, te recomiendo esto:
Txt=Replace(Txt,";",vbTab)
Con eso, en "Txt" tendrs todo el contenido del archivo, pero con tabuladores en lugar de ";"
Saludos 09/03/2010
Usuario Hola. Gracias por tu ayuda... creo que con eso es suficiente.
Una preguntita.. si quisiera modificar una columna completa de datos (o eliminar), recuerda que el archivo de texto muestra el contenido de una serie de registros existentes; como haria? 09/03/2010
Experto Hola
En un archivo de texto plano, como el que obtienes de esta manera, la nica manera de borrar una lnea es reescribir todas las que estn por debajo de ella una lnea ms arriba. S que no es una solucin muy elegante, pero...
dim s as string
p=1
do while not TextStream.AtEndOfStream if p<>4 then s=s & TextStream.ReadLine() end if p=p+1
loop
Entonces en 's' tienes todas las lneas menos la 4, as que con guardar el contenido de la variable de nuevo en el TextStream, cerrndolo y abrindolo de nuevo para escritura, conseguiras el efecto deseado.
Si lo que quieres es manipular una base de datos almacenada en texto, hay un controlador ODBC para este tipo de informacin ("Microsoft Text Driver (*.txt,*.csv)"), aunque nunca lo he probado. Lo que s es que no permite SQL.
Saludos 09/03/2010 Experto Hola de nuevo Me equivoqu, s que permite SQL. Para conectarte con una base de datos de texto, tienes que poner slo el directorio donde estn los archivos de texto. Luego puedes hacer consultas, considerando los nombres de los archivos como tablas: conexion.Open "driver={Microsoft Text Driver (*.txt; *.csv)};dbq=c:\temp" recordset.Open "select * from libro1.csv", conexion Parece que funciona Saludos
Dim nombre As String = idArchivo & ".txt" Dim ruta As String = rutaArchivos & "\" & nombre Dim objSR As StreamReader Dim texto As String Dim linea As String
Try objSR = New StreamReader(ruta, System.Text.Encoding.Default) Catch ex As FileLoadException Throw New Exception("No se ha podido cargar el archivo " & ruta) Catch ex As FileNotFoundException Throw New Exception("No se ha podido encontrar el archivo " & ruta) Catch ex As Exception Throw New Exception("Error desconocido en " & ruta) End Try
linea = objSR.ReadLine
Do Until linea = "" If linea.IndexOf("cadena_a_buscar", 12, 12) <> 12 Then texto += linea & vbNewLine End If linea = objSR.ReadLine Loop
objSR.Close()
Imports System.IO
Dim sr As StreamReader = New StreamReader("C:\Prueba.txt") Dim texto As String Dim texto2 As String()
' Esta te la pone en un sola line todo el texto, incluyendo el salto de linea y retorno de ' carro texto = sr.ReadToEnd()
' Esta te pone cada linea en un elemento del arreglo texto2 = Split(texto, vbCrLf) RichTextBox1.Text = texto
suerte !!!
Module Module1
Sub Main() Dim objReader As New StreamReader("c:\test.txt") Dim sLine As String = "" Dim arrText As New ArrayList()
Do sLine = objReader.ReadLine() If Not sLine Is NothingThen arrText.Add(sLine) End If Loop Until sLine Is Nothing objReader.Close()
End Module
Primero d todo disculpa por mi tardia respuesta, pero ya sabes las vacaciones ;). Supongo q ya lo habrs resuelto pero ahi va lo q us en su tiempo:
' Obtengo todas las lneas contenidas en el archivo lineas() = Split(LeerArchivoTexto(nombreFichero), vbCrLf) ' Para borrar las lneas vacas, las cargo con un carcter especial For i = 0 To UBound(lineas) If Len(lineas(i)) = 0 Then lineas(i) = vbNullChar Next ' y luego utilizo la funcin Filter para borrar esas lneas. lineas() = Filter(lineas(), vbNullChar, False) ' Creo un array de cadena por cada lneas de texto y la almaceno en un elemento Variant ReDim valores(0 To UBound(lineas)) As Variant For i = 0 To UBound(lineas) valores(i) = Split(lineas(i), ";") Next ImportarCDRs = valores() End Function
Function LeerArchivoTexto(nombreFichero As String) As String Dim numlib As Integer, isOpen As Boolean On Error GoTo Manejador_Error ' Obtengo el siguiente nmero libre de archivo numlib = FreeFile() Open nombreFichero For Input As #numlib
' Se ha abierto el fichero sin problemas isOpen = True ' Leo todo el contenido en una nica operacin LeerArchivoTexto = Input(LOF(numlib), numlib) ' Cierro el archivo Manejador_Error: If isOpen Then Close #numlib If Err Then Err.Raise Err.Number, , Err.Description End Function