Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Un replace 'dinamico' que no funciona...

Estas en el tema de Un replace 'dinamico' que no funciona... en el foro de Visual Basic clásico en Foros del Web. Hola! Estoy haciendo una pequeña aplicación de aficionado, en la que tengo que eliminar de una cadena (en realidad del campo Apellido) determinados caracteres: espacios ...
  #1 (permalink)  
Antiguo 11/06/2012, 08:19
 
Fecha de Ingreso: julio-2007
Mensajes: 16
Antigüedad: 17 años, 4 meses
Puntos: 2
Pregunta Un replace 'dinamico' que no funciona...

Hola!

Estoy haciendo una pequeña aplicación de aficionado, en la que tengo que eliminar de una cadena (en realidad del campo Apellido) determinados caracteres: espacios vacíos, guión, apostrofos... etc. Son caracteres a quitar para generar un 'NombreUsuario' limpio de esos caracateres extraños.

Lo he hecho, claro, con un Replace, y funciona normalmente... Pero al darle una pensada, quería hacer que los cacracteres a eliminar los pueda tomar de una variable, que controlo desde la base de datos. Para ello, genero un "Scripting.Dictionary" (esto lo aprendí en este foro... y lo uso bastante en otras aplicaciones).

Lo hice primero poniendo en ese campo (que luego se convierte en variable) el codigo Crh$(32) (por ejemplo: ese es el espacio vacio...). lo hago así:

Código:
'================PRIMERO CARGAMOS TODAS LAS VARIABLES QUE GESTIONAN LA APLICACIÓN =========
codigo_aplicacion = 5

Set variables1 = CreateObject("ADODB.Recordset")
Set variables1 = db.Execute("Select * from aplicacion_web where codigo=" & codigo_aplicacion & "")
Set variables = CreateObject("Scripting.Dictionary")

Do While Not variables1.EOF
    strclave = variables1("clave")
    strvalor = variables1("valor")
    variables.Add strclave, strvalor
    variables1.movenext
 Loop

strClavesArray = variables.Keys
  strValoresArray = variables.Items
  
Dim caracteres() As String


caracteres = Split(variables.Item("chrEliminar"), ",")
MsgBox (variables.Item("chrEliminar"))

'Esto está aquí para comprobar que se han cargado...
For i = 0 To UBound(caracteres())
MsgBox (caracteres(i))
Next
'==========================================================================================
La variable se llama 'chrEliminar' y contiene los distintos Chr$() separados por ",".

Luego para poder hacer el replace de forma 'dinámica', lo hago así:


Código:
Set rsdatos2 = CreateObject("ADODB.Recordset")
Set rsdatos2 = db.Execute(todaselect, 1, 1)

el_apell1 = rsdatos2("apell1")
el_apell2 = rsdatos2("apell2")
el_nombre = rsdatos2("nombre")
'Este lo pongo para probar 'a manini...:
el_nombre_limpio = Replace(el_nombre, Chr$(32), "")

cuantos = UBound(caracteres())
For i = 0 To cuantos

que_buscar = caracteres(i)
'MsgBox (que_buscar)
el_apell1 = Replace(el_apell1, que_buscar, "")
el_apell2 = Replace(el_apell2, que_buscar, "")
el_nombre = Replace(el_nombre, que_buscar, "")
Next


MsgBox (el_apell1)
MsgBox (el_nombre)
MsgBox (el_nombre_limpio)

... Pues no funciona... tanto el_apell1, como el_apell2 y el_nombre no aplica el replace. Sin embargo el_nombre_limpio que he generado 'a manini'... si que funciona

La variable "que_buscar" la he generado para poderle aplicar funciones de conversión previas, del tipo de cstr(), pero nada...

En cada una de las iteraciones del Do While muestro con un Msgbox el valor, y lo saca bien : Chr$(32), por ejemplo, y aparentemente sin comillas ni caracteres previos extraños...

seguro que es algo fácil... pero se me escapa


Gracias por contestar!!!

Fernando
  #2 (permalink)  
Antiguo 12/06/2012, 09:17
 
Fecha de Ingreso: julio-2007
Mensajes: 16
Antigüedad: 17 años, 4 meses
Puntos: 2
Respuesta: Un replace 'dinamico' que no funciona... [SOLUCIÓN INTERMEDIA]

Aunque sigo a la espera de que alguien me ayude a averiguar el porqué...
... me contesto a mí mismo, por si alguien tiene en algún momento la misma incidencia:

Como no se porqué no funciona bien el código (debe ser algo relativo al vartype del array frente al vartype que exige 'Chr()'), le he addo un poco la vuelta para evitar el problema... bueno, dar un rodeo también es una forma de solucionar el problema (aunqe no es la mejor: como buen zaragozano, seguiré buscando la otra respuesta...).

Lo que he hecho es almacenar en la base de datos no "chr(32)", sino el valor numerico a secas: "32".

Luego lo cargo en mi variable igual que estaba:

Código:
Dim caracteres() As String
caracteres = Split(variables.Item("chrEliminar"), ",")
el valor de caracteres() es = (32,42,95) etc...

... y al hacer el replace cargo ese número como el parámetro del chr():
Código:
cuantos = UBound(caracteres())
For i = 0 To cuantos

el_apell1 = Replace(el_apell1, Chr(caracteres(i)), "")
el_apell2 = Replace(el_apell2, Chr(caracteres(i)), "")
el_nombre = Replace(el_nombre, Chr(caracteres(i)), "")

Next
... es una pequeña huída... pero funciona...

Saludos!

Etiquetas: replace, scripting.dictionary, vb6
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:12.