Sustituir por ASCII

Iniciado por Ertai, 14 Junio 2005, 15:43 PM

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

Ertai

Bueno, haber si tienen alguna idea.

Resulta que necesito alguna manera para hacer esto:

1.- Tengo un variable String con texto.
2.- He de buscar todo lo que no sea abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNROPQRSTUVWXYZ01234567890 y sustituirlo por su valor en ASCII entre corchetes (Ejemplo [234])

Alguna idea de como empezar?

Saludos,
Ertai
Si la felicidad se comprara, entonces el dinero sería noble.


void rotar_by_ref(int& a, int& b) {
   /* Quien dijo que no se podia sin una variable temporal? */
   *a = *a ^ *b;
   *b = *a ^ *b;
   *a = *a ^ *b;
}

Crack_X

Pueden haber varias formas de hacerlo pero ahora mismo se me ocurre lo siguiente:

- Leer letra por letra y comparar con un array que contiene el abecedario que deseas y luego un replace() por el valor ascii() de ese caracter.

Tambien puedes hacer:


if txt like ("[A-Z]") or txt like ("[a-z]") or txt like ("[0-9]") then
.... empezar a buscar en cada letra o por pequeños grupos.....
end if


Es solo un poco de creatividad  ;)
Shit loads of money spend to show us wrong from right. Say no to war


Yasser Has Things To Say
WarZone

....Gusto....

hay un post de slasher k. q explica como buscar en un string, y con eso, lo que encuentre, q haga la conversion ;D

saludos ;D
.:.~GuStO~.:.


Ertai

@ Crack_X

Yo también había pensado algo así, pero tenía miedo que fuera extremadamente lento el procedimiento. Lo probaré igualmente.
Por otra parte se podria hacer un Replace para cada valor ASCII, con un bucle, del palo KeyAscii(n) con el Replace.
Probaré y ya diré algo.

@ Gusto

Me podrías pasar ese post, porque he buscado y nada... :(

Saludos y gracias,
Ertai
Si la felicidad se comprara, entonces el dinero sería noble.


void rotar_by_ref(int& a, int& b) {
   /* Quien dijo que no se podia sin una variable temporal? */
   *a = *a ^ *b;
   *b = *a ^ *b;
   *a = *a ^ *b;
}

__LoG26

#4
Si lo quieres hacer asi puedes tomar este ejemplo:

Sub Remplazo(ascii As String)
With me.text1.text
ascii = ReplaceString(pString:=ascii, Keyword:="D", NewKeyWord:="Ð")
With End


Espero te sirva

Un Saludo... ;D
Mi amigo el libro, mi signo libra, mi estilo libre. No hay balanzas que equilibren palabras de este calibre.


....Gusto....

no tengo el link, pero lo tengo visto en este subforo. despues me fijo a ver si lo encuentro ;D
.:.~GuStO~.:.


Ertai

Gracias Murderer_Fresh, es lo que tenía pensado.

Gusto, haber si hay suerte y lo encuentras, yo miraré ahora también, lo que pasa que a las 8 me de ir :(

Saludos!
Si la felicidad se comprara, entonces el dinero sería noble.


void rotar_by_ref(int& a, int& b) {
   /* Quien dijo que no se podia sin una variable temporal? */
   *a = *a ^ *b;
   *b = *a ^ *b;
   *a = *a ^ *b;
}

Slasher-K

El siguiente code hace lo que querés.


Sub ReplaceNoAscii(StrSpec As String)
          Dim i%

  For i = 1 To 255
    If (i > vbKeyA And i < vbKeyZ) And _
       (i > 97 And i < 122) Then
      StrSpec = Replace$(StrSpec, Chr$(i), "[" & i & "]")
    End if
  Next
End Sub


Saludos.



A la reina de las profundidades que cuida los pasos de una sombra en la noche :*

soplo

Hola

Una alternativa

Function Reemplazar(Cdato as string)
Dim Valido as boolean, Resultado as string, Caractar as string
for x%=1 to len(Cdato)
Caracter=mid(Cdato,x%,1) /extraer el caracter
Valido=Comprobar(Caracter) 'comprobar el caracter
if validothen
Resultado=Resultado & Caracter 'añadir el caracter al resultado
else
Resultado=Resultado & [ & asc(Caractar) & "]" 'añadir el ascii al resultado
endif
next x%
Reemplazar=Resultado 'devolver el resultado
end function


Function Valido(Car as string)
Car=Ucase(Car) 'pasar a manúsculas
if asc(car)>="A"  and asc(Car)<="Z" then 'si es letra
Valido = true
else
Valido=false
endif

if not isnumeric(Car) or not Valido then 'si no es número
Valido=false
endif
return


Un saludo
Callar es asentir ¡No te dejes llevar!

Slasher-K

Esa alternativa también hace lo mismo pero el problema es que es lentisima. Fijate que hay muchas llamadas a funciones y eso requiere de un tiempo considerable. Además el concatenar también es lento.

En fin las dos alternativas funcionan la única diferencia es el rendimiento. Este tema vino bien para destacar esto porque a veces cuesta escribir código que tenga buen rendimiento y la única forma de aprender es sabiendo los pros y las contras mediante ejemplos.

Saludos.



A la reina de las profundidades que cuida los pasos de una sombra en la noche :*