** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Reemplazar caracter en string
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoReemplazar caracter en string

 Responder Responder
Autor
Mensaje
cpampasPT Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 20/Marzo/2010
Localización: Portugal
Estado: Sin conexión
Puntos: 414
Enlace directo a este mensaje Tema: Reemplazar caracter en string
    Enviado: 27/Octubre/2016 a las 16:31
hola

como hago para substituir todas las comas de esta string a excepcion en las que sean el simbolo decimal de un numero:


El total, son 43,44 euros

pasarlo a
 
El total, son 43.44 euros

intente hacer un bucle en cada uno de los caracteres de la string:

For a = 1 To t Step 1
   cha = Mid(Me.n, a, 1)
       If cha = "," Then
          If IsNumeric(Mid(Me.n, a - 1, 1)) = True Then
             Me.n = Replace(Mid(Me.n, a, 1), ",", ".") ' esto  devuelve el caracter "."
          End If
       End If
   Next
Arriba
Tikimore Ver desplegable
Moderador
Moderador


Unido: 02/Enero/2008
Localización: España
Estado: Sin conexión
Puntos: 1519
Enlace directo a este mensaje Enviado: 27/Octubre/2016 a las 18:48
Hola.
El formato siempre lo vas a tener igual?
Lo comento porque si siempre es igual, con dos decimales basta en tratar la cadena de tal manera que elimines los puntos y las comas y el resultado lo pases a numero y lo dividas entre 100.

Un saludo.
Arriba
cpampasPT Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 20/Marzo/2010
Localización: Portugal
Estado: Sin conexión
Puntos: 414
Enlace directo a este mensaje Enviado: 27/Octubre/2016 a las 21:19
hola
No, el formato difiere, en este caso la primera coma estaria correcta y no habria que moficicar, pero la segunda al ser parte de un numero la cambiaria para un punto. 
gracias
Arriba
VIMIPAS Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Enero/2006
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 5152
Enlace directo a este mensaje Enviado: 27/Octubre/2016 a las 23:44
Hola buenas noches.

Con esto último que acabas de decir, es posible decir:

Cuando llegue a una , (una coma) que esté precedida de un número y también que esa , (esa coma) tenga a continuación un número.

Prueba esto a ver que tal resultado tienes:

Private Sub SUSTITUIR_Click()
Dim I As Integer

For I = 1 To Len(Me.n)
    If Mid(Me.n, I, 1) = "," Then 'Si ahora hay números, estarán dentro de estos Asc que compruebo: 0123456789
'Estoy preguntando por el carácter anterior y por el caracter posterior a la coma que me ocupa
        If Asc(Mid(Me.n, I - 1, 1)) > 47 And Asc(Mid(Me.n, I - 1, 1)) < 58 And Asc(Mid(Me.n, I + 1, 1)) > 47 And Asc(Mid(Me.n, I + 1, 1)) < 58 Then
            Me.n = Left(Me.n, I - 1) & "." & Mid(Me.n, I + 1)
        End If
    End If
Next
End Sub

Y también puedes probar esto:

Private Sub sustituir2_Click()
Dim I As Integer

For I = 1 To Len(Me.n)
    If Mid(Me.n, I, 1) = "," Then 'Si ahora hay números, esta pregunta que hago ahora parece más lógica.
'Estoy preguntando por el carácter anterior y por el caracter posterior a la coma que me ocupa
        If IsNumeric(Val(Mid(Me.n, I - 1, 1))) And IsNumeric(Val(Mid(Me.n, I + 1, 1))) Then
            Me.n = Left(Me.n, I - 1) & "." & Mid(Me.n, I + 1)
        End If
    End If
Next

End Sub

Ya nos cuentas.
Saludos.


Editado por VIMIPAS - 28/Octubre/2016 a las 00:12
Gracias
Arriba
cpampasPT Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 20/Marzo/2010
Localización: Portugal
Estado: Sin conexión
Puntos: 414
Enlace directo a este mensaje Enviado: 28/Octubre/2016 a las 14:58
Hola Vimipas,
Gracias por tu ayuda, funciona a la perfeccion
Ahora me lo estudio, en particular, las funciones Replace, left y MID
Abrazo

Podeiss cerrar el hilo


Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: Prisión Brieva
Estado: Sin conexión
Puntos: 3220
Enlace directo a este mensaje Enviado: 28/Octubre/2016 a las 22:09
Solo dos detalles:
1 cuidado si la coma está en el primer o en el último carácter, dará error, conviene verificar antes.
 IsNumeric(Val(Mid(Me.n, I - 1, 1)))  siempre va a ser true, val lo transforma a número, hay que poner solo  IsNumeric(Mid(Me.n, I - 1, 1))

Un saludo.

Luis
Those are my principles, and if you don't like them... well, I have others. Groucho Marx
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable