Leer linea de un archivo de texto

Iniciado por SheKeL_C$, 3 Abril 2010, 18:06 PM

0 Miembros y 1 Visitante están viendo este tema.

SheKeL_C$

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

Hasseds

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




Sergio Desanti

SheKeL_C$

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

BlackZeroX


Código (vb) [Seleccionar]


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!¡.
The Dark Shadow is my passion.

seba123neo

#4
otra forma es hacer un Split() al contenido del archivo con vbNewLine y leer la posicion determinada del array....por ejemplo:

Código (vb) [Seleccionar]
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.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson