En un archivo de texto (txt) tengo
coche
moto
camion
avion
Lo que quiero es leer la linea que yo quiera de este modo
Open "C:\datos.txt" For Input As #1
'me posiciono en la segunda o tercera o la que sea linea
Line Input #1, linea
MsgBox linea
Close #1
He probado con seek, pero el parametro que se le pasa seria el numero de caracteres y no el numero de linea.
Creo que hace tiempo pregunte lo mismo pero no encuentro el post
Hola, yo usaria un archivos de acceso aleatorio en tu caso, pero si nesecitas hacerlo con archivos de texto te dejo un ejemplo, en caso que te sirva lo tenés que optimizar de acuerdo a tus necesidades.
Option Explicit
Private Sub Form_Load()
MsgBox LeerLinea(1)
MsgBox LeerLinea(4)
MsgBox LeerLinea(5)
MsgBox LeerLinea(45)
End Sub
Function LeerLinea(numeroLinea As Integer) As String
If Dir("C:\datos.txt") <> "" Then
Open "C:\datos.txt" For Input As #1
Dim i As Integer
For i = 1 To numeroLinea
If Not EOF(1) Then
Line Input #1, LeerLinea
Else
LeerLinea = "EOF"
End If
Next
Close #1
Else
LeerLinea = "no hay archivo"
End If
End Function
Cita de: Hasseds en 3 Abril 2010, 20:08 PM
Hola, yo usaria un archivos de acceso aleatorio en tu caso, pero si nesecitas hacerlo con archivos de texto te dejo un ejemplo, en caso que te sirva lo tenés que optimizar de acuerdo a tus necesidades.
Option Explicit
Private Sub Form_Load()
MsgBox LeerLinea(1)
MsgBox LeerLinea(4)
MsgBox LeerLinea(5)
MsgBox LeerLinea(45)
End Sub
Function LeerLinea(numeroLinea As Integer) As String
If Dir("C:\datos.txt") <> "" Then
Open "C:\datos.txt" For Input As #1
Dim i As Integer
For i = 1 To numeroLinea
If Not EOF(1) Then
Line Input #1, LeerLinea
Else
LeerLinea = "EOF"
End If
Next
Close #1
Else
LeerLinea = "no hay archivo"
End If
End Function
Gracias por tu respuesta.. pero yo buscaba si existia un comando parecido a seek para hacerlo. Igualmente gracias
Option Explicit
Sub main()
Dim StrFileData As String
GetLineFromFile "c:\liberar memoria ram.bas", 2, StrFileData
MsgBox StrFileData
GetLineFromFile "c:\liberar memoria ram.bas", 8, StrFileData
MsgBox StrFileData
GetLineFromFile "c:\liberar memoria ram.bas", 10, StrFileData
MsgBox StrFileData
End Sub
Public Function GetLineFromFile(StrFile As String, NumberFile As Long, ByRef StrLine As String) As Long
Dim i As Long
Dim StrByte As String * 1
Dim ff As Integer
If Dir(StrFile, vbArchive) <> "" Then
ff = FreeFile
Open StrFile For Input As #ff
Do
i = i + 1
If i < NumberFile Then
Line Input #ff, StrByte
Else
Line Input #ff, StrLine
End If
Loop Until i = NumberFile Or EOF(ff) = True
GetLineFromFile = Len(StrLine)
Close #ff
End If
End Function
Dulces Lunas!¡.
otra forma es hacer un Split() al contenido del archivo con vbNewLine y leer la posicion determinada del array....por ejemplo:
Private Function DevolverLinea(ByVal pArchivo As String, ByVal pLinea As Long) As String
Dim i As Integer
Dim vLinea As String
i = FreeFile
Open pArchivo For Input As #i
vLinea = Input$(LOF(i), #i)
Close #i
DevolverLinea = Split(vLinea, vbNewLine)(pLinea)
End Function
Private Sub Command1_Click()
MsgBox DevolverLinea("c:\hola.txt", 63)
End Sub
saludos.