Nose si usar el replace... alternativa?

Iniciado por CAR3S?, 6 Febrero 2011, 07:46 AM

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

CAR3S?

hay alguna alternativa para el replace?

porq el replace, por ejemplo, tengo esto en un textbox:

habia una vez un patito que tenia alto pitito

y le hago un replace...

Código (vb) [Seleccionar]
Source = src.Text
Source = Replace(Source, "a", ("5" & a.Text & "5"))
Source = Replace(Source, "b", ("5" & b.Text & "5"))
Source = Replace(Source, "c", ("5" & c.Text & "5"))
Source = Replace(Source, "d", ("5" & d.Text & "5"))
Source = Replace(Source, "e", ("5" & e.Text & "5"))
Source = Replace(Source, "f", ("5" & f.Text & "5"))
Source = Replace(Source, "g", ("5" & g.Text & "5"))
Source = Replace(Source, "h", ("5" & h.Text & "5"))
Source = Replace(Source, "i", ("5" & i.Text & "5"))
Source = Replace(Source, "j", ("5" & j.Text & "5"))
Source = Replace(Source, "k", ("5" & k.Text & "5"))
Source = Replace(Source, "l", ("5" & l.Text & "5"))
Source = Replace(Source, "m", ("5" & m.Text & "5"))
Source = Replace(Source, "n", ("5" & n.Text & "5"))
Source = Replace(Source, "ñ", ("5" & ñ.Text & "5"))
Source = Replace(Source, "o", ("5" & o.Text & "5"))
Source = Replace(Source, "p", ("5" & p.Text & "5"))
Source = Replace(Source, "q", ("5" & q.Text & "5"))
Source = Replace(Source, "r", ("5" & r.Text & "5"))
Source = Replace(Source, "s", ("5" & s.Text & "5"))
Source = Replace(Source, "t", ("5" & t.Text & "5"))
Source = Replace(Source, "u", ("5" & u.Text & "5"))
Source = Replace(Source, "v", ("5" & v.Text & "5"))
Source = Replace(Source, "w", ("5" & w.Text & "5"))
Source = Replace(Source, "x", ("5" & x.Text & "5"))
Source = Replace(Source, "y", ("5" & y.Text & "5"))
Source = Replace(Source, "z", ("5" & z.Text & "5"))
Form2.srca.Text = Source


queda completamente horrible, dependiendo de lo que haya en a.text b.text........ z.text


entienden? supongamos que en h.text hay una J

se reemplaza:

jabia (Primera palabra vamos a usar de ejemplo)

Cuando llega la hora de reemplazar la j (Supongamos que en j.text hay "l")

termina quedando labia

y es cualquier cosa, y eso me esta complicando! :S

Hay alguna alternativa para el replace?

BlackZeroX

#1
.
mmm tienes un problema de logica ya que estas reemplazando por el alfabeto y sustituyes a las mismas, lo que te recomiendo es que uses

Código (vb) [Seleccionar]


mid$(Source ,  Posicion, longitud ) = replace$ ( mid$(Source ,  Posicion, longitud ) , Antiguo_String , Nuevo_String )



con esto evitas eso que dices.

P.D.: Ese codigo se reducen a unas cuantas lineas de codigo usando un For Next sin esfuerzo alguno y un array.

Dulces Lunas!¡.
The Dark Shadow is my passion.

CAR3S?

#2
Gracias por responder black!
estoy leyendo sobre mid, pero a que te refieres con posicion y longitud? Tengo algun que otro problemita mental...  :¬¬

Agrego:

Ya lei http://www.eggheadcafe.com/software/aspnet/33594988/funcion-mid.aspx , pero sigo sin entender porque usar mid  :-[

osea, lo q no entiendo es porq usar el replace con el mid$

BlackZeroX

#3
.
No es un problema mental, mas bien de flojera en muchos casos, donde nadie se detiene a leer un poco sobre el mismo ni a practicarlo.

Mejor EXplicacion que la MSDN no hay mira Mid()

Este es un codigo de "Esboso" los caracteres ñ y/o Ñ te los dejo ati estan como comentarios.

Código (Vb) [Seleccionar]


Option Explicit

Private Sub Form_Load()
    MsgBox Codificate("Temibles Lunas!¡.")
End Sub

Private Function Codificate(ByVal vsData As String, Optional ByVal ToReplaceABC As String = "zyxwvutsrqponmlkjihgfedcba") As String
Dim lng_i           As Long
Dim byt_char        As Byte
    If Len(ToReplaceABC) = 26 Then ' // Asc("a")-Asc(z)+1=25 poner 27 si se quiere afgregar la ñ
        For lng_i = 1 To Len(vsData)
            byt_char = Asc(Mid$(vsData, lng_i, 1))
            If byt_char >= 97 And byt_char <= 122 Then      ' a - z
                Mid$(vsData, lng_i, 1) = LCase$(Mid$(ToReplaceABC, byt_char - 96, 1))
            ElseIf byt_char >= 65 And byt_char <= 90 Then   ' A -Z
                Mid$(vsData, lng_i, 1) = UCase$(Mid$(ToReplaceABC, byt_char - 64, 1))
            'ElseIf byt_char = 241 Then ' ñ
                'Mid$(vsData, lng_i, i) = Mid$(ToReplaceABC, byt_char - 98, lng_i, i)
            'ElseIf byt_char = 209 Then ' Ñ
                'Mid$(vsData, lng_i, i) = Mid$(ToReplaceABC, byt_char - 66, lng_i, i)
            End If
        Next lng_i
    End If
    Codificate = vsData
End Function



Dulces Lunas!¡.
The Dark Shadow is my passion.

CAR3S?

#4
Gracias por el codigo, una cosa....

este codigo reemplazax letra por otra letra al azar? :rolleyes:

Editado, entendido, no te rias ajjajajaaja  :laugh: ;-)

BlackZeroX

#5
.
Ya que no entendiste nada (aun que editste tu post con otro mensaje) aqui tienes:

La explicacion:

se recorre la string vsData y se toma un caracter ese caracter se transforma a su valor ASCII o mejor dicho a byte despues se le hace una SUSTITUCION de esa posicion del caracter por la que este en la variable del parametro llamada "ToReplaceABC", verificando y RESPETANDO mayusculas de minusculas para esto se usa el if then dentro del for que esta recorriendo la cadena y haci tomando un caracter por cada iteración es decir

es decir:

Si ingresas en la funcion la palabra "Hola"

1ra iteracion
  * Tomamos la primera letra o caracter y se convierte a ASCII para saber si es una minuscula o mayuscula dependiendo de esto el if deside que hacer:
  ** Caso uno minuscula:
  ** Caso Mayuscula.
  ***    aun que la unica diferencia de estas desiciones es convertir la letra a mayuscula o minuscola con LCase$() o UCase$() respectivamente despues de tomar la letra de la cadena de la variable "ToReplaceABC".
  *** En una forma mas practica:

ABC-Normal:
  abdefhhijklmnopqrstuvwxyz

ABC Invertido y usado en la funcion:
  zyxwvutsrqponmlkjihgfedcba

Es decir que la H se sustituye por la S ya que hay es donde deberia estar a H pero en su lugar esta la S

lade demas Iteracciones son con el mismo proceso

¿Te falta esta base?: codigo ASCII aqui tienes la tabla ( con esto sabras el por que del numero 65, 90, 97, 122 y el por que de la ñ/Ñ )



--------------------------------------


se usa

Mid$() = algo

paraque no se rearme la string y por ende se trabaje directamente en ella sin crear una nueva.

P.D.: el codigo es simple y no nesesitabatanta explicación o comentarios, solo puse cosas breves para saber los rangos,

----------------------------------------------

Cita de: nuKje en  6 Febrero 2011, 09:34 AM
Gracias por el codigo, una cosa....

este codigo reemplazax letra por otra letra al azar? :rolleyes:

es enserio?

Dulces Lunas!¡.
The Dark Shadow is my passion.

CAR3S?

Gracias black!

Add:

No me mates pero... sinceramente no entiendo como funciona, de visual basic se "Lo basico" (No tengo tanto tiempo para leer, estoy intentando "Estudiar" para rendir ahora en febrero :-(

Volviendo al tema, si tengo el source en la cadena "source"

Form2.srca.Text = Codificate(source)

como dijiste arriba, "Invierte" (Por asi decir) el avecedario, por ende, queda:

no sabia que frog era psyke1 jaja

ml hzyrz jfv uilt viz khbpv1 qzqz

Lo que busco ahora es modificar el source para que envez de "Girar el abc", reemplaze el texto de la string (source) por las letras (a.text b.text c.text)

Osea, reemplazar tu diccionario alrevez con los casi 30 textbox's.

Si hago eso, el codigo queda muy largo, o me parece ami?
Y lo mas importante, se puede hacer?
No quiero que me digan como, pero aveces parece chino avanzado.  :xD

BlackZeroX

.
LOL

ya viste el 2do parametro?

Dulces Lunas.
The Dark Shadow is my passion.

CAR3S?

#8
La segunda y la ultima? Zi zeñoda!
Gracias por la ayuda black, pero no entiendo "Paso por paso" lo que hace el codigo, por ende, no puedo modificarlo...

No entienndo como funciona!

Add:

Como no entendi el codigo, le preste atencion al primero que puso.

Código (vb) [Seleccionar]
Dim source As String
source = Text1.Text
MsgBox Mid(source, 1) = Replace$(Mid(source, 1), "a", a.Text)


Creo que seria algo asi, pero tampoco anda. :xD (Da como resultado "False")



Add2: Como se daran cuenta, los codigos hechos nunca me sirvieron de nada, y que me manden a leer menos...no es por "Flojera", es porque sinceramente, no entiendo!

Psyke1

Aprender y no leer es incompatible, BlackZer0x te mostró una manera sencilla de hacerlo. :rolleyes:
Ve poco a poco, si no entiendes una función busca en Google, encontrarás explicación y muuuuuchos ejemplos. :)

DoEvents! :P