Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: YAcosta 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í (http://www.belzusarri.com/rutas.txt) (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.
(http://i.snag.gy/oZQAQ.jpg)
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
-
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 (http://www.recursosvisualbasic.com.ar/htm/tutoriales/tutorial-basico7.htm#line-input) (fijate el punto 7)
-
(http://www.mediafire.com/conv/a3eaab13b6182a547d55b40901a23f06946ce17b7b589ac7a9f2279f6ac5f36a4g.jpg) (http://www.mediafire.com/view/?rjt56t48vsia961)
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
-
Hola Yacosta según entiendo quieres capturar el ENTER en la cadena, te paso un ejemplo:
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
-
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 (http://msdn.microsoft.com/es-es/library/windows/desktop/aa363362%28v=vs.85%29.aspx) con el TheBug the cobein....
-
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
-
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
-
Yban no se si estoy equivocado pero yo guarde este enlance http://www.belzusarri.com/rutas.txt (http://www.belzusarri.com/rutas.txt) pero no tiene ni un ENTER.
(http://www.mediafire.com/conv/838f7a19e3c395c9b5f02e7267578ea4ab1ee01a264176aeb688c280ac74c70d4g.jpg) (http://www.mediafire.com/view/?gk1g22oksvg9k72)
como ves estan todo juntos. o no se si el explorador guardo asi.
-
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 :
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
-
Mejor les dejo todo el código Ok
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
-
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
-
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
-
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