Autor Tema: Leer archivo de texto  (Leído 7244 veces)

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

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Leer archivo de texto
« en: Noviembre 10, 2012, 01:59:29 am »
Buenas, me he trabado con esto ojala me puedan dar una mano.

Tengo un archivo de texto que tiene (o tendrá) direcciones webs, tendrá una en cada linea, osea esta separado por enters. ¿Como podria leerlo?. El archivo de ejemplo lo tengo aquí (esos enlaces son de ejemplo).

Leo ese archivo y lo que quiero es guardar cada dirección en una variable diferente (será en un array). Pero, ¿como pregunto por el enter (no el compañero Enter del foro)? o como leo la "siguiente linea"?. En adelante tendré en este archivo mas lineas o menos lineas con direcciones web y necesito tenerlas por separado en mi aplicativo.


Pensaba en preguntar carácter a carácter hasta llegar al chr(13) y al llegar alli capturar ese tramo de caracteres que seria la dirección web, luego continuaría con la siguiente, pero no me funciono porque no logro leer el chr(13).

Cuando el usuario introduzca direcciones web SIEMPRE las escribirá directamente en el archivo y le meterán un enter al final.

¿Cual seria la mejor forma de operar esto?

Gracias
« última modificación: Noviembre 10, 2012, 02:12:07 am por YAcosta »
Me encuentras en YAcosta.com

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Leer archivo de texto
« Respuesta #1 en: Noviembre 10, 2012, 08:10:25 am »
EN lugar de usar un for así, usa los metodos que te da visual basic para leer linea por linea

Manejo de Archivos en visual basic - Recursos vb (fijate el punto 7)

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Leer archivo de texto
« Respuesta #2 en: Noviembre 10, 2012, 09:55:45 am »



Código: (VB) [Seleccionar]
Private Sub Command1_Click()

    Dim P1, P2 As String
    Dim tmp As ListItem
    On Error GoTo Erreur
   
    Open "c:\a.txt" For Input As #1
   
    While Not EOF(1)
       
        Input #1, P1, P2 ', P3 ', P4
        Set tmp = ListView1.ListItems.Add(, , P1)
        tmp.ListSubItems.Add , , P2
    Wend
    Close #1
   
Erreur:          If Err.Number = 32755 Then Beep: Exit Sub


End Sub
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

cristian_19a

  • Kilobyte
  • **
  • Mensajes: 80
  • Reputación: +28/-3
    • Ver Perfil
Re:Leer archivo de texto
« Respuesta #3 en: Noviembre 10, 2012, 12:17:02 pm »
Hola Yacosta  según entiendo quieres capturar el ENTER en la cadena, te paso un ejemplo:
Código: (VB) [Seleccionar]
Dim xDat As String
 Dim xTamDat, CI, CJ As Long
 
 xDat = "www.facebook.com" & vbCr & "www.google.com" & vbCr & "www.youtube.com" & vbCr & "www.poreltube.net" & vbCr
 xTamDat = Len(xDat)
 CJ = 0
 For CI = 1 To xTamDat Step 1
    If Asc(Mid(xDat, CI, 1)) = 13 Then
      MsgBox Mid(xDat, CJ+1, (CI - CJ))
      CJ = CI
    End If
 Next CI
 CJ = 0
 CI = 0

Gracias
« última modificación: Noviembre 10, 2012, 12:32:30 pm por cristian_19a »

xkiz ™

  • Moderador Global
  • Gigabyte
  • *****
  • Mensajes: 283
  • Reputación: +30/-11
    • Ver Perfil
    • xkiz ™
Re:Leer archivo de texto
« Respuesta #4 en: Noviembre 10, 2012, 12:59:27 pm »
gente pequeño consejo, si estan desarrollando una aplicacion y testiando F5, no usen MsgBox, por que si hay algun error de loop u otro error, se les puede colgar Visual Basic y si no guardaron, van a perder lo que no guardaron, usen Debug.Print....

o pueden usar OutputDebugString con el TheBug the cobein....
« última modificación: Noviembre 10, 2012, 01:01:56 pm por xkiz ™ »

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Leer archivo de texto
« Respuesta #5 en: Noviembre 10, 2012, 01:00:41 pm »
Muchas Gracias a todos por sus tiempos y responder.

Tengo el problema final siguiente (Algo que me falta precisar mejor):

raul338
Los ejemplos de la web que me indicas son para archivos locales, el problema que tengo es que no descargaré el archivo de la ruta que mostré (www.belzusarri.com/rutas.txt) primero por un tema de seguridad (cuestión personal) porque este archivo va a estar cambiando constantemente, ese archivo lo estoy leyendo desde el servidor con una función que publicó hace tiempo xkiz ™. Lo que si tengo en el aplicativo es el contenido de ese archivo que lo puedo cargar en una variable.

E N T E R
Lo mismo que con Raul, el archivo no lo tratare localmente sino desde un servidor.

cristian_19a
Esta me parecía que chuntaba amigo, pero se pasa de largo la evaluación, osea no se detiene en = 13. Igual creo que por aqui es.

¿Como construirán el archivo?
Abrirán el archivo www.belzusarri.com/rutas.txt (en realidad sera otra ruta) y en el pegaran una dirección web al final de la ultima linea y meterán un enter. La siguiente vez pegaran otra dirección web y meterán otro enter. Probablemente una de las lineas sera cambiada por otra dirección web y esta vez no meterán enter porque sino quedaría un espacio vacío entre una dirección y otra.
De ese escenario es que necesito leer el archivo sin descargarlo y quiero capturar cada linea en una variable. ¿Entonces como leo cada linea?.
Si no se logra ni modo bajare el archivo a alguna ruta local escondida, pero creo que esto no le va a gustar a mi cliente por un tema de seguridad exagerada que el tiene.


Por siacaso, el codigo que estoy usando para leer el archivo es este de aqui
http://leandroascierto.com/foro/index.php?topic=1260.msg6896#msg6896

y quiero leer el archivo que esta en: www.belzusarri.com/rutas.txt
« última modificación: Noviembre 10, 2012, 01:05:30 pm por YAcosta »
Me encuentras en YAcosta.com

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Leer archivo de texto
« Respuesta #6 en: Noviembre 10, 2012, 01:15:16 pm »
Ahh en ese casó, no queda otra que uses un Split, ya sea por vbCrLf o vbCr o vbLf (depende si esta hecho en linux o windows)

Hacerlo a mano, es algo lento a veces

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Leer archivo de texto
« Respuesta #7 en: Noviembre 10, 2012, 01:53:48 pm »
Yban no se si estoy equivocado pero yo guarde este enlance http://www.belzusarri.com/rutas.txt pero no tiene ni un ENTER.



como ves estan todo juntos. o no se si el explorador guardo asi.
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

cristian_19a

  • Kilobyte
  • **
  • Mensajes: 80
  • Reputación: +28/-3
    • Ver Perfil
Re:Leer archivo de texto
« Respuesta #8 en: Noviembre 10, 2012, 01:59:03 pm »
Bueno arriba dices que deseabas leer el Enter por eso te mostre ese ejemplo.

he chekeado el contenido del texto rutas.txt y veo que tiene otro carácter de salto de linea, te paso el código
tomando que estas usando el código para leer el archivo de texto alojado en un hosting, entonces debes agregar esto después del msgbox sBuffer :
Código: (VB) [Seleccionar]
sBuffer = Replace(sBuffer, " ", "") 'los espacios lo borramos para que tenga menos caracteres la cadena

 Dim xTamDat, CI, CJ As Long
 
 xTamDat = Len(sBuffer)
 
 CJ = 0
 For CI = 1 To xTamDat Step 1
    If Asc(Mid(sBuffer, CI, 1)) = 10 Then
      MsgBox Mid(sBuffer, CJ + 1, (CI - CJ))
      CJ = CI
    End If
 Next CI
 MsgBox Mid(sBuffer, CJ + 1, (xTamDat - CJ))
 CJ = 0
 CI = 0
Claro xkiz se debe de usar el debug.print pero para ese ejemplo sencillo no lo uso como funciona perfecto

cristian_19a

  • Kilobyte
  • **
  • Mensajes: 80
  • Reputación: +28/-3
    • Ver Perfil
Re:Leer archivo de texto
« Respuesta #9 en: Noviembre 10, 2012, 02:02:23 pm »
Mejor les dejo todo el código  Ok
Código: (VB) [Seleccionar]
Option Explicit
Const scUserAgent = "API-Guide test program"
Const INTERNET_OPEN_TYPE_DIRECT = 1
Const INTERNET_OPEN_TYPE_PROXY = 3
Const INTERNET_FLAG_RELOAD = &H80000000
Const sURL = "http://www.belzusarri.com/rutas.txt"
Private Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetCloseHandle Lib "wininet" (ByVal hInet As Long) As Integer
Private Declare Function InternetReadFile Lib "wininet" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetOpenUrl Lib "wininet" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
Private Sub Form_Load()
    'KPD-Team 1999
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
 
    Dim hOpen As Long, hFile As Long, sBuffer As String, Ret As Long
    'Create a buffer for the file we're going to download
    sBuffer = Space(1000)
    'Create an internet connection
    hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
    'Open the url
    hFile = InternetOpenUrl(hOpen, sURL, vbNullString, ByVal 0&, INTERNET_FLAG_RELOAD, ByVal 0&)
    'Read the first 1000 bytes of the file
    InternetReadFile hFile, sBuffer, 1000, Ret
    'clean up
    InternetCloseHandle hFile
    InternetCloseHandle hOpen
    'Show our file
   
    'MsgBox sBuffer
   
 sBuffer = Replace(sBuffer, " ", "") 'los espacios lo borramos para que tenga menos caracteres la cadena

 Dim xTamDat, CI, CJ As Long
 
 xTamDat = Len(sBuffer)
 
 CJ = 0
 For CI = 1 To xTamDat Step 1
    If Asc(Mid(sBuffer, CI, 1)) = 10 Then
      MsgBox Mid(sBuffer, CJ + 1, (CI - CJ))
      CJ = CI
    End If
 Next CI
 MsgBox Mid(sBuffer, CJ + 1, (xTamDat - CJ))
 CJ = 0
 CI = 0
End Sub

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Leer archivo de texto
« Respuesta #10 en: Noviembre 10, 2012, 02:04:25 pm »
Abranlo en un navegador, vean que si tiene saltos de linea. Hazle un split por vbCr ó vbLf ó Chr(10) ó Chr(13) ... Y ya tienes tu array

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Leer archivo de texto
« Respuesta #11 en: Noviembre 10, 2012, 02:41:36 pm »
Bueno arriba dices que deseabas leer el Enter por eso te mostre ese ejemplo.
......

Muchas gracias a todos, y gracias cristian_19a que tu código funciono perfecto, efectivamente indique mal al decir enter porque yo daba enter y en realidad es un salto de linea. Osea debía comparar con 10.

Muchas gracias, el problema quedo resuelto.

Saludos
Me encuentras en YAcosta.com

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Leer archivo de texto
« Respuesta #12 en: Noviembre 10, 2012, 03:02:53 pm »
Ya esta, ya lo implementé y funciona perfecto, como máximo habrá en el archivo de texto no mas de 30 direcciones web ya que muchas de ellas se reemplazaran.

Gracias amigos
Me encuentras en YAcosta.com