Domingo 22 de Diciembre de 2024, 02:13
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
Visual Basic 6.0 e inferiores
(Moderador:
F_Tanori
) »
Leer De Un Txt!!!
« anterior
próximo »
Imprimir
Páginas: [
1
]
2
Autor
Tema: Leer De Un Txt!!! (Leído 6994 veces)
Gandalf_malaga7
Miembro MUY activo
Mensajes: 162
Leer De Un Txt!!!
«
en:
Martes 9 de Marzo de 2004, 13:40 »
0
Buenas!!!!!!!!!!!,
aquí os adjunto dos .txt porque necesito que me echeis una mano.Quiero crear un codigo que extraiga del archivo prueba1 la siguiente cadena: C8120CC, es decir que limpie todos los demás caracteres y me deje esa cadena en una variable o al principio de otro .txt.Igualmente del prueba2 me debe extraer la cadena CA7432CX,es decir le pase el .txt que le pase que se quede sólo con estas cadenas y elimine el resto (estas cadenas son mátriculas os lo comento por si os sirve de ayuda).Necesito esto porque despues compararé estas cadenas con las mátriculas de una base de datos.
Una ayudilla por favor que tengo que entregar esto ya mismo,
gracias a todos.
El mensaje contiene
1 archivo adjunto
. Debes
ingresar
o
registrarte
para poder verlo y descargarlo.
Tweet
...Gandalf El Gris,ese era mi nombre;soy Gandalf El Blanco y en los albores de la tempestad vuelvo a vosotros.
Brroz
Miembro de PLATA
Mensajes: 1058
Re: Leer De Un Txt!!!
«
Respuesta #1 en:
Martes 9 de Marzo de 2004, 15:13 »
0
Hola Gandalf_malaga7.
Aquí te adjunto un ejemplo de una función que puede servir para lo que quieres:
Código: Text
Private Function BuscarCadenaEnArchivo(ByVal FilePathFileName As String, ByVal Cadena As String, Optional ByVal Desde As Long, Optional ByVal CaseSens As Boolean) As Long
If Cadena = "" Then Exit Function
On Error GoTo Err_Buscar
Dim intCanal As Integer
intCanal = FreeFile
Open FilePathFileName For Binary As intCanal
Dim bytBufR() As Byte
ReDim bytBufR(LOF(intCanal) - Desde)
If Desde = 0 Then Desde = 1
Get #intCanal, Desde, bytBufR
On Error Resume Next
Dim lng1 As Long, int1 As Integer
Dim indEncontrado As Boolean, str1 As String
If CaseSens Then
For lng1 = 0 To UBound(bytBufR)
str1 = str1 & Chr(bytBufR(lng1))
If Right(str1, Len(Cadena)) = Cadena Then
BuscarCadenaEnArchivo = lng1 - Len(Cadena) + Desde + 1
Exit For
End If
Next lng1
Else
Cadena = UCase(Cadena)
For lng1 = 0 To UBound(bytBufR)
str1 = str1 & UCase(Chr(bytBufR(lng1)))
If Right(str1, Len(Cadena)) = Cadena Then
BuscarCadenaEnArchivo = lng1 - Len(Cadena) + Desde + 1
Exit For
End If
Next lng1
End If
Exit_Buscar:
On Error Resume Next
Close #intCanal
Exit Function
Err_Buscar:
MsgBox "(" & Err.Number & ") " & Err.Description _
, vbCritical, "Encontrar cadena"
Resume Exit_Buscar
End Function
Tan solo unas consideraciones:
La función recibe como parámetros el archivo en el que buscar, la cadena que hay que localizar (obligatorios), la posición a partir de la cual buscar y la opción de distinguir mayúsculas y minúsculas (opcionales). Devuelve un número que corresponde con la posición inicial de la cadena si se encuentra, o 0 en caso contrario.
Si el archivo en el que quieres buscar es muy grande, sería recomendable leer el archivo por partes, redimensionando la matriz bytBufR a un tamaño apropiado y realizando un ciclo con tantas instrucciones Get como fuesen necesarias para completar la longitud del fichero... esto queda para ti, que no se puede pedir todo hecho.
Habrás observado que los bucles se podrían resumir en uno sólo, integrando los if dentro del bucle... Esto último haría la búsqueda notablemente más lenta:
en muchas ocasiones prefiero escribir de más, incluso repitiendo fragmentos de código en sacrificio de un mejor rendimiento en la ejecución (evidentemente el bucle se ejecutará antes cuantas menos preguntas e instrucciones haya por el medio).
Eso es todo, espero que esto te sirva, mago malagueño.
Suerte.
Gandalf_malaga7
Miembro MUY activo
Mensajes: 162
Re: Leer De Un Txt!!!
«
Respuesta #2 en:
Martes 9 de Marzo de 2004, 15:51 »
0
Muchas gracias tío!!!!!!!!!,
me has dado una idea de como realizar la búsqueda.Mi programa lo que hace es lo siguiente:
1)Capturo una foto con texto
2)Reconozco las cadenas de caracteres en la foto las cuales se almacenan en un .txt (pero aparte de las cadenas se me meten caracteres erroneos y a lo mejor mi cadena tiene un espacio en medio o alguno de estos caracteres en medio).
3)comparo la cadena del .txt con un campo de una base de datos(para ver si pertenece a mi base o no).
Entonces con tu función he pensado que puedo realizar una busqueda por cada cadena de ese campo de mi base de datos.
Se pueden usar comodines en la búsqueda?
...Gandalf El Gris,ese era mi nombre;soy Gandalf El Blanco y en los albores de la tempestad vuelvo a vosotros.
Brroz
Miembro de PLATA
Mensajes: 1058
Re: Leer De Un Txt!!!
«
Respuesta #3 en:
Martes 9 de Marzo de 2004, 16:44 »
0
Hola Gandalf_malaga7.
Si examinas el código te darás cuenta que no está pensado para utilizar comodines, sin embargo, no sería muy complicado hacer las modificaciones necesarias para que funcionara de tal forma. Ánimo.
Abur.
Gandalf_malaga7
Miembro MUY activo
Mensajes: 162
Re: Leer De Un Txt!!!
«
Respuesta #4 en:
Miércoles 10 de Marzo de 2004, 19:42 »
0
Hola de nuevo!!!!!!!!!!!!!,
oye Brroz,muchas gracias
por la función que me mandaste pero no me dejan usarla,los datos que yo tengo que sacar de los .txt que os adjunto son matriculas,y una vez sacadas tengo que buscar si se encuentran en mi base de datos para ver si esos coches pueden acceder a mi recinto o no.Así que para usar tu función tendría que ir buscando todas las matriculas de mi base de datos en los .txt
y esto no resulta muy optimo informaticamente para mis jefes
.
Más bien necesito algo de busqueda de patrones ó simplemente una función que me vaya eliminando toda la 'mierda' de mi .txt (me refiero a cualquier caracter que no puede salir en una mátricula,es decir guiones,interrogaciones,espacios en blanco...),y me deje finalmente mi matricula,
a ver si me podeis ayudar,gracias!!!!!!!!!!!!!
...Gandalf El Gris,ese era mi nombre;soy Gandalf El Blanco y en los albores de la tempestad vuelvo a vosotros.
elmango80
Miembro MUY activo
Mensajes: 149
Nacionalidad:
Re: Leer De Un Txt!!!
«
Respuesta #5 en:
Jueves 11 de Marzo de 2004, 07:30 »
0
Hola Gandalf_malaga7!
Te aconsejo que una vez que tengas tu cadena obtenida del .txt en primer lugar la depures, osea saca todos los posibles caracteres que no puedan estar en una matricula (" - $ % @) y asi solo te quedas con las letras y los numeros, tambien puedes sacar todas la letras minusculas porque se supone que la matricula solo esta compuesta de numero y letras mayusculas, ya con esto te ahorras un trabajo, despues podrias hacer un patron de la placa, no se como sera haya pero aca en Venezuela las placas poseen tres letras despues dos numeros y por ultimo otra letra (ASD 32F) asi que busca ese patron dentro de la cadena que te queda...
P.D: Gracias por la informacion del programa que encontraste...
------------------
Citar
No soy bueno, tampoco soy malo sino todo lo contrario...
Brroz
Miembro de PLATA
Mensajes: 1058
Re: Leer De Un Txt!!!
«
Respuesta #6 en:
Jueves 11 de Marzo de 2004, 09:39 »
0
Hola Gandalf_malaga7.
Tal como lo cuentas, tus jefes tienen toda la razón... recorrer toda una tabla para buscar por cada registro en un archivo de texto, no es nada operativo (a no ser que tengas poquísimos registros y el archivo de texto sea pequeño, claro).
Lo que te apuntan de buscar un patrón para las matrículas y eliminar todo lo que no cuadre con ese patrón del archivo de texto, puede ser el camino, pero... ¿lo normal no sería que las matrículas aparecieran en determinadas posiciones del txt, o que incluso apareciese una sóla matrícula?¿El txt lo obtienes tú?
Por otro lado,si aparece más de una matrícula y si eliminas todos los carácteres y/o secuencias que pueden no aparecer en una matrícula, luego tendrás que identificar en lo que te quede las posibles matrículas, y se podrían dar casos como este:
PO3425ZA2332KM2344CC9999DCC2222AABC4355
(PO-3425-Z , A-2332-K , M-2344-C , C-9999-D , CC-2222-A , ABC4355)
Desde luego que no es un obstáculo insalvable, ni mucho menos, pero ve imaginando ya lo que tendría que hacer el proceso tras filtrar en el txt las posibles matrículas.
Todo esto te lo cuento sin haber descargado tus adjuntos, por lo que no sé si a lo mejor existe la posibilidad de que las matrículas aparezcan en determinadas posiciones fijas (en un campo de un registro, vaya) o que cierto/s carácter/es delimiten una matrícula. ¿Has examinado el txt para ver si se da alguna de estas posibilidades?
Suerte.
Chao.
Gandalf_malaga7
Miembro MUY activo
Mensajes: 162
Re: Leer De Un Txt!!!
«
Respuesta #7 en:
Jueves 11 de Marzo de 2004, 10:59 »
0
Hola a todos!!!!!!!!,
gracias Brroz y Elmango80:beer: por la ayuda,te explico Brroz:
si descargas mi adjunto verás que solo puede haber una mátricula por .txt,ya que yo le hago las fotos a los coches de uno en uno,y cada foto la someto a una OCR mediante una libreria que tengo,y esta OCR me genera mucha mierda y en una posición cualquiera la mátricula
.
A ver si me puedes ayudar
,me podrias pasar el codigo de un algoritmo que coja el .txt,lo recorra de principio a fin y elimine cualquier caracter excepto mayusculas y numeros(incluidos espacios en blanco) asi al final en mi .txt me quedara la matricula pegada al margen izquierdo y en la primera linea.Yo ya tengo hecho los algoritmos para una vez limpiado el .txt,leer la matricula y buscarla en mi base de datos.Solo me falta este y debido a mis carencias
en conocimiento de codigo no se como hacerlo,
espero vuestra respuesta,muchas gracias
!!!!!!!!!!!!!!!!!
...Gandalf El Gris,ese era mi nombre;soy Gandalf El Blanco y en los albores de la tempestad vuelvo a vosotros.
9tnix
Miembro MUY activo
Mensajes: 165
Nacionalidad:
Re: Leer De Un Txt!!!
«
Respuesta #8 en:
Jueves 11 de Marzo de 2004, 11:23 »
0
Salu2 Gandalf_malaga7
Hola amigo lo que puedes hacer es lo siguiente es solo una idea ojala y me alcance el tiempo te pongo el codigo del programa pero mientras va la sugerencia.
Lee cada uno de los archivos y lo abres con la instruccion Open
Luego extrae la cadena en una variable y empieza a hacer una busqueda utilizando el patron que ya lo tienes bueno usa la funcion Instr(<desde que caracterer de la cadena empieza la busqueda>,<Cadena donde se busca>, <cadena buscada> ), esta funcion te devuelve >0 cuando encontro lo que buscas sino devuelve <=0, una vez que encontraste todos los patrones en el primer archivo pues lo separas y lo guardas donde sea necesario y sigues adelante con los demas archivos hasta que termines.
Ejemplo de Instr
Dim strCadena As String
Dim strCadBuscar As String
Dim Pos as Integer
strCadena = "ASdkashdkaHola amigosasdi54654"
strCadenaBuscar = "Hola amigos"
'//Esto te devuelve la posicion en donde se encuentra la cadena en este caso 11
Pos = Instr(1,strCadena, strCadenaBuscar)
'//Aki sacamos la cadena Hola aamigo
msgbox Mid(strcadena, pos, len(strCadenaBuscar))
Espero que la info ayude
Un saludo zeekel ®
[KGT]
TP-Systems
our knowledge is our power!
Brroz
Miembro de PLATA
Mensajes: 1058
Re: Leer De Un Txt!!!
«
Respuesta #9 en:
Jueves 11 de Marzo de 2004, 11:51 »
0
Hola.
Necesitarás algo así:
Código: Text
Private Function ProcesarTxt(ByVal InputFile As String) As String
On Error GoTo Err_Procesar
Dim intCanal As Integer
intCanal = FreeFile
Open InputFile For Binary As intCanal
Dim bytBufR() As Byte
ReDim bytBufR(LOF(intCanal))
Get #intCanal, , bytBufR
Dim lng1 As Long
For lng1 = 0 To UBound(bytBufR)
If (bytBufR(lng1) < 91 And bytBufR(lng1) > 47) _
And (bytBufR(lng1) < 58 Or bytBufR(lng1) > 64) Then _
ProcesarTxt = ProcesarTxt & Chr(byBufR(lng1))
Next lng1
Exit_Procesar:
On Error Resume Next
Close #intCanal
Exit Function
Err_Procesar:
MsgBox "(" & Err.Number & ") " & Err.Description _
, vbCritical, "Procesar archivo txt"
Resume Exit_Procesar
End Function
Abur.
Gandalf_malaga7
Miembro MUY activo
Mensajes: 162
Re: Leer De Un Txt!!!
«
Respuesta #10 en:
Jueves 11 de Marzo de 2004, 12:45 »
0
Hey colegas,muchas gracias
,
Brroz,he provado tu función llamandola de la siguiente forma:
Private Sub Command1_Click()
ProcesarTxt "C:\Prueba3.txt"
End Sub
pero cuando abro el Prueba3.txt despues de ejcutarlo no esta modificado,esta igual que antes,que puede fallar?
el dia que funcione esto os invito a todos a la feria de Malaga,ole
!!!!!!!!!!!!!!!!!!
...Gandalf El Gris,ese era mi nombre;soy Gandalf El Blanco y en los albores de la tempestad vuelvo a vosotros.
Brroz
Miembro de PLATA
Mensajes: 1058
Re: Leer De Un Txt!!!
«
Respuesta #11 en:
Jueves 11 de Marzo de 2004, 14:57 »
0
Hola Gandalf_malaga7.
Fíjate que la función devuelve un string que debe contener la supuesta matrícula, o lo que queda del fichero después de filtrarlo...
Código: Text
Private Sub Command1_Click()
Dim str1 As String
str1 = ProcesarTxt("C:\Prueba3.txt")
MsgBox str1
Después de llamar a la función, 'str1' contendrá el valor devuelto por la misma.
Chao.
Gandalf_malaga7
Miembro MUY activo
Mensajes: 162
Re: Leer De Un Txt!!!
«
Respuesta #12 en:
Jueves 11 de Marzo de 2004, 16:55 »
0
Gracias tio,
ahora funciona perfect,ojala tuviera yo ese facilidad pa crear codigo
,
bueno esto es solo el principio ya os ire contando como va la aplicacion,
mil gracias
...Gandalf El Gris,ese era mi nombre;soy Gandalf El Blanco y en los albores de la tempestad vuelvo a vosotros.
elmango80
Miembro MUY activo
Mensajes: 149
Nacionalidad:
Re: Leer De Un Txt!!!
«
Respuesta #13 en:
Viernes 12 de Marzo de 2004, 06:25 »
0
Hola Gandalf_malaga7 y Brroz!
Por lo visto tu programa ya esta casi listo FELICITACIONES!!!!
Citar
No soy bueno, tampoco soy malo sino todo lo contrario...
9tnix
Miembro MUY activo
Mensajes: 165
Nacionalidad:
Re: Leer De Un Txt!!!
«
Respuesta #14 en:
Viernes 12 de Marzo de 2004, 15:47 »
0
Hola chicos
Genial Genial, todo sea por amor al soft y al desarrollo jejeje xDDD
FELICIDADES Gandalf_malaga7
un saludo Brroz
un saludo Gandalf_malaga7
un saludo elmango80
zeekel ®
[KGT]
TP-Systems
our knowledge is our power!
Gandalf_malaga7
Miembro MUY activo
Mensajes: 162
Re: Leer De Un Txt!!!
«
Respuesta #15 en:
Lunes 15 de Marzo de 2004, 12:01 »
0
Que pasa!!!!!!!
,
no me deis la enhorabuena todavía que el programa aún no está terminado,queda una pequeña parte.Primero muchas gracias Brroz porque el algoritmo del otro día me vino de #### madre
.A ver si me podeis echar una mano con una cosilla,es lo que me falta pa acabar:
Vamos a ver,mi OCR me generaba un .txt no?,este .txt contiene una mátriula(entera o a lo mejor 5 caracteres de 8) y mucha mierda,con el algoritmo que me pasó Brroz al final me queda por ejemplo lo siguiente: "FVM8432DZEZ",donde mi mátricula es M8432DZ y el resto no me sirve.El resultado podría ser por ejemplo también 8432C y que me faltara la primera y la última letra.Dicho esto ,yo tengo una base de datos done uno de los campos es matricula,y tendré unas 40 mátriculas.Necesito ver si la matricula que tengo en mi .txt(ya sabeis camuflada con otros caracteres inutiles) se encuentra en mi base de datos o no.No tengo ni idea de como hacer esto,
,si alguno puede aportarme alguna ó incluso el código de algún algoritmo,
,estaré eternamente agradecido, y por supuesto no hace falta decir que si alguien quiere conocer más acerca de lo que estoy desarrollando o que le pase código o lo que sea no tiene más que decirlo!!!!!!!!!,
Grracias y espero Que me hagais ver la luz
!!!!!!!!!!
...Gandalf El Gris,ese era mi nombre;soy Gandalf El Blanco y en los albores de la tempestad vuelvo a vosotros.
Brroz
Miembro de PLATA
Mensajes: 1058
Re: Leer De Un Txt!!!
«
Respuesta #16 en:
Lunes 15 de Marzo de 2004, 17:53 »
0
Hola Gandalf_malaga7.
Tal vez ya hayas resuelto tu problema, pero por si acaso, te cuento:
Con la cadena resultante de la función, yo establecería otro filtro, obteniendo una cadena formada sólo por números, luego con el resultado ejecutaría una selección de registros en tu bd con un SQL de este estilo:
Código: Text
Dim strSQL as string
strSQL = "SELECT * FROM TablaMatriculas WHERE CampoMatricula LIKE '%"
& LlamadaAFuncionSoloNumeros(ResultadoFnAnterior) & "%'".
Recorrería el recordset resultante, buscando la mejor coincidencia...
Podrías sofisticar más la última función para que por ejemplo buscase una cadena de números con una letra a izquierda y otra a derecha, o con tres letras a la izquierda de los cuatro números...
No sé si me habré explicado muy bien, pero tú pregunta, pregunta.
Abur.
Gandalf_malaga7
Miembro MUY activo
Mensajes: 162
Re: Leer De Un Txt!!!
«
Respuesta #17 en:
Lunes 15 de Marzo de 2004, 23:12 »
0
Que tal Brroz,me mola tu idea,lo único malo es que la mierda que se me genera en el .txt no son solo letras,también tengo casos en los que se me generan numeros erroneos 4FVM8432DZEZ6,por ejemplo,sería valido tambien para esto?,la función 'LlamadaAFunciónSoloNumeros' te refieres a la que me pasaste la pasada semana ¿no? pero solo dejando los números. No se la verdad es que estoy bastante saturado y no se me ocurre como hacer esto ahora mismo,
Un saludo.
...Gandalf El Gris,ese era mi nombre;soy Gandalf El Blanco y en los albores de la tempestad vuelvo a vosotros.
Brroz
Miembro de PLATA
Mensajes: 1058
Re: Leer De Un Txt!!!
«
Respuesta #18 en:
Martes 16 de Marzo de 2004, 11:34 »
0
Hola.
Con 'LlamadaAFunciónSoloNumeros' me refiero a una nueva función que realice un nuevo filtro sobre la anterior que te envié.
En este ejemplo, el método recibirá como entrada el resultado de la función
ProcesarTxt("C:\ruta\archivo.txt")
y una matriz por referencia que será modificada para que devuelva los elementos de grupos de 4 dígitos encontrados en la cadena. Fíjate:
Código: Text
Private Sub Command1_Click()
'Este es el código que usabamos hasta ahora
Dim str1 As String
str1 = ProcesarTxt("C:\Prueba3.txt")
'Aquí empieza el 2º filtro
Dim int4Numeros() As Integer
ExtraerGrupos4Numeros str1, int4Numeros
'Aquí muestro los valores que deberías buscar
'en la db usando like
On Error Resume Next
Dim int1 As Integer
For int1 = 1 To UBound(int4Numeros)
MsgBox int4Numeros(int1)
Next int1
End Sub
Private Sub ExtraerGrupos4Numeros( _
ByVal Txt As String, ByRef Numeros() As Integer)
Dim intIdx As Integer
Dim int1 As Integer, str1 As String
For int1 = 1 To Len(Txt) - 4
str1 = Mid(Txt, int1, 4)
If IsNumeric(str1) Then
intIdx = intIdx + 1
If intIdx > 1 Then
ReDim Preserve Numeros(intIdx)
Else
ReDim Numeros(1)
End If
Numeros(intIdx) = str1
End If
Next int1
End Sub
Recorre los elementos de la matriz que contiene los números, busca en la tabla de la bd las posibles correspondencias, recorre la selección intentando indentificar el valor del campo con la matricula completa en la cadena resultado de la función 'ProcesarTxt' (en el ejemplo str1). Es decir, algo así:
Código: Text
If Instr(1,str1,recordsetMatriculas.Fields("Matricula").value) > 0 Then _
MsgBox "Has encontrado la matrícula, enhorabuena tronco..."
Espero que me haya explicado bien...
Suerte.
Brroz
Miembro de PLATA
Mensajes: 1058
Re: Leer De Un Txt!!!
«
Respuesta #19 en:
Martes 16 de Marzo de 2004, 11:36 »
0
Hola.
Con 'LlamadaAFunciónSoloNumeros' me refiero a una nueva función que realice un nuevo filtro sobre la anterior que te envié.
En este ejemplo, el método recibirá como entrada el resultado de la función
ProcesarTxt("C:\ruta\archivo.txt")
y una matriz por referencia que será modificada para que devuelva los elementos de grupos de 4 dígitos encontrados en la cadena. Fíjate:
Código: Text
Private Sub Command1_Click()
'Este es el código que usabamos hasta ahora
Dim str1 As String
str1 = ProcesarTxt("C:\Prueba3.txt")
'Aquí empieza el 2º filtro
Dim int4Numeros() As Integer
ExtraerGrupos4Numeros str1, int4Numeros
'Aquí muestro los valores que deberías buscar
'en la db usando like
On Error Resume Next
Dim int1 As Integer
For int1 = 1 To UBound(int4Numeros)
MsgBox int4Numeros(int1)
Next int1
End Sub
Private Sub ExtraerGrupos4Numeros( _
ByVal Txt As String, ByRef Numeros() As Integer)
Dim intIdx As Integer
Dim int1 As Integer, str1 As String
For int1 = 1 To Len(Txt) - 4
str1 = Mid(Txt, int1, 4)
If IsNumeric(str1) Then
intIdx = intIdx + 1
If intIdx > 1 Then
ReDim Preserve Numeros(intIdx)
Else
ReDim Numeros(1)
End If
Numeros(intIdx) = str1
End If
Next int1
End Sub
Recorre los elementos de la matriz que contiene los números, busca en la tabla de la bd las posibles correspondencias, recorre la selección intentando indentificar el valor del campo con la matricula completa en la cadena resultado de la función 'ProcesarTxt' (en el ejemplo str1). Es decir, algo así:
Código: Text
If Instr(1,str1,recordsetMatriculas.Fields("Matricula").value) > 0 Then _
MsgBox "Has encontrado la matrícula, enhorabuena tronco..."
Espero que me haya explicado bien...
Suerte.
Gandalf_malaga7
Miembro MUY activo
Mensajes: 162
Re: Leer De Un Txt!!!
«
Respuesta #20 en:
Martes 16 de Marzo de 2004, 15:10 »
0
Gracias Brroz
,
me parece buena idea,es que no estaba seguro si tu algoritmo iba a probar todas las posibles cadenas de 4 números pero parece ser que sí,lo único es que si tuviera 2 coches con los mismos números en mi parking ( ya seria mala suerte pero ya sabemos que las leyes de Murphy tambien se aplican a la programación) tendria que buscar otra coincidencia y mostrar las 2 por pantalla para permitir el acceso o no de forma manual.Si lo hay una coincidencia no hay problema,se deja pasar el coche y punto.
Voy a intentar integrarlo y ya te cuento
,tambien estaría bien tener un algoritmo que paralelamente solo deje las letras del .txt,y que busque de la misma manera en la base de datos las coincidencias,y si las letras coinciden en la misma mátricula en la que coinciden los números ya es seguro nuestro coche,
sería posible hacer esto?
,
bueno un millón de gracias!!!!!!!!!!!!
...Gandalf El Gris,ese era mi nombre;soy Gandalf El Blanco y en los albores de la tempestad vuelvo a vosotros.
Brroz
Miembro de PLATA
Mensajes: 1058
Re: Leer De Un Txt!!!
«
Respuesta #21 en:
Martes 16 de Marzo de 2004, 15:28 »
0
Hola Gandalf_malaga7.
Lo que dices es posible, pero no necesario. Creo que no me expliqué suficientemente bien:
Si la búsqueda en la bd, selecciona dos registros, estás de enhorabuena, busca la matrícula completa que tendrás en cada registro en la cadena con las letras y los números, con toda probabilidad, sólo una coincidirá...
Siguiendo con los ejemplos, supon que str1 contiene la cadena de letras y números, rsMatriculas es el recordset con los registros que has seleccionado y el campo "Matricula" es el campo del recordset que contiene las matriculas en tu bd.
Código: Text
.
.
.
rs.Matriculas.MoveFirst
Do until rsMatriculas.EOF
If Instr(1,str1,rsMatriculas.Fields("Matricula").value)) > 0 Then Exit Do
rsMatriculas.MoveNext
Loop
If not rsMatriculas.EOF Then
MsgBox "La matrícula es " & rsMatriculas.Fields("Matricula").value
Else
MsgBox "La matrícula no se ha encontrado en la db"
End If
Espero que ahora haya quedado más claro.
Abur.
Gandalf_malaga7
Miembro MUY activo
Mensajes: 162
Re: Leer De Un Txt!!!
«
Respuesta #22 en:
Martes 16 de Marzo de 2004, 16:30 »
0
Creo que ya esta claro,perdona por la tardanza pero soy novato por algo,
vamos a ver,tu idea es,coger todas las combinaciones de 4 números que haya en el .txt y meterlas en una matriz.Se busca en la base de datos si coincide alguna de estas combinaciones con los números de las mátriculas que yo tengo guardadas,y una vez encontrada alguna coincidencia,se toma esta mátricula entera (con letras y todo) y con la función que teníamos BuscarCadenaEnArchivo buscamos la mátricula completa en el .txt y si este nos devuelve una posición,es que la ha encontrado y todo perfecto,y si nos devuelve un 0 es uqe no ha encontrado la mátricula perfecta,creo que es esto lo que me estas diciendo
,
un último favor,tengo las siguientes funciones:
1)Function BuscarCadenaEnArchivo(ByVal FilePathFileName As String, ByVal Cadena As String, Optional ByVal Desde As Long, Optional ByVal CaseSens As Boolean) As Long
2)Function ProcesarTxt(ByVal InputFile As String) As String
(modificada ya para que solo me devuelva la cadena con los números,sin letras)
si no es mucho pedir me podrias escribir en un mensaje como quedaría el programa completo
,es que tengo claro lo que hace pero no se bien como integrarlo y estoy deseando provarlo porque me parece muy buena idea.Las dos funciones de arriba no hace falta que las escribas,solo cuando las llamas.
Si estas muy liado
no te preocupes ya lo intentaré probar yo mas adelante,de todas formas muchas gracias Brroz me estas solucionando una buena papeleta,
un saludo
...Gandalf El Gris,ese era mi nombre;soy Gandalf El Blanco y en los albores de la tempestad vuelvo a vosotros.
Brroz
Miembro de PLATA
Mensajes: 1058
Re: Leer De Un Txt!!!
«
Respuesta #23 en:
Martes 16 de Marzo de 2004, 17:52 »
0
Hola Gandalf_malaga7.
De la primera función 'BuscarCadenaEnArchivo' olvídate, ya que al final quedamos en que no la íbamos a utilizar para nada.
Resumiendo, las funciones/métodos que harán falta serán:
1- ProcesarTxt
Tomando como parámetro de entrada un archivo de texto, devuelve un valor string que contiene números y letras mayúsculas hayados en ese archivo de texto.
2- ExtraerGrupos4Numeros
Toma como entrada el string devuelto de la función anterior, y establece una matriz cuyos elementos son los posibles grupos de cuatro números que se encontraron en el string de entrada.
Aparte de estos dos métodos, es necesario un cuerpo principal del programa que los llame, efectúe la consulta a la base de datos, etc. En los ejemplos el código para este método considerabamos que se encontraba alojado en el evento Click de un CommandButton. Podría quedar algo así:
Código: Text
Private Sub Command1_Click()
On Error Resume Next
Dim strOCR As String
strOCR = ProcesarTxt("C:\Prueba3.txt")
Dim int4Numeros() As Integer
ExtraerGrupos4Numeros strOCR, int4Numeros
'Aquí presupongo que tienes definidas la correspondiente
'conexión y comandos a la base de datos. Considero para
'el ejemplo que cmd1 es un objeto Command válido...
dim rsMatriculas As Recordset, strSQL As String
strSQL = "SELECT * FROM TablaMatriculas WHERE Matricula LIKE "
dim lng1 as long
For lng1 = 1 to ubound(int4Numeros)
cmd1.CommandText = strSQL & "'%" & int4Numeros(lng1) & "%'"
set rsMatriculas=cmd1.Execute()
If rs.RecordCount > 0 Then rs.Matriculas.MoveFirst
Do until rsMatriculas.EOF
If Instr(1,strOCR,rsMatriculas.Fields("Matricula").value)) > 0 Then Exit Do
rsMatriculas.MoveNext
Loop
If not rsMatriculas.EOF Then
MsgBox "La matrícula es " & rsMatriculas.Fields("Matricula").value
Exit For
End If
Next lng1
If not rsMatriculas is Nothing Then
If rsMatriculas.EOF Then _
MsgBox "La matrícula no se ha encontrado en la db"
Else
MsgBox "La matrícula no se ha encontrado en la db"
End If
.
.
.
End Sub
Bueno, creo que esto es todo, el resto (¡si es que queda resto!) intenta ponerlo tú de tu parte. Si tienes problemas con la conexión y consulta a la bd, en este mismo foro hay multitud de ejemplos que te pueden servir: utiliza la herramienta de búsqueda.
Chao.
Gandalf_malaga7
Miembro MUY activo
Mensajes: 162
Re: Leer De Un Txt!!!
«
Respuesta #24 en:
Martes 16 de Marzo de 2004, 20:37 »
0
Que tal Brroz,estoy aqui integrando el código que me has pasao y todo va bien exepto que creo que el objeto command (cmd1) es sólo utilizable en base de datos ADO y yo estoy usando una DAO
,quiere decir esto que no puedo usar el código que me has pasado?,me recomiendas que cambie mi base de datos y la haga en ADO?
Ya lo tengo casi...
...Gandalf El Gris,ese era mi nombre;soy Gandalf El Blanco y en los albores de la tempestad vuelvo a vosotros.
Imprimir
Páginas: [
1
]
2
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
Visual Basic 6.0 e inferiores
(Moderador:
F_Tanori
) »
Leer De Un Txt!!!