Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: CAR3S? en 6 Febrero 2011, 07:46 am



Título: Nose si usar el replace... alternativa?
Publicado por: CAR3S? en 6 Febrero 2011, 07:46 am
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
  1. Source = src.Text
  2. Source = Replace(Source, "a", ("5" & a.Text & "5"))
  3. Source = Replace(Source, "b", ("5" & b.Text & "5"))
  4. Source = Replace(Source, "c", ("5" & c.Text & "5"))
  5. Source = Replace(Source, "d", ("5" & d.Text & "5"))
  6. Source = Replace(Source, "e", ("5" & e.Text & "5"))
  7. Source = Replace(Source, "f", ("5" & f.Text & "5"))
  8. Source = Replace(Source, "g", ("5" & g.Text & "5"))
  9. Source = Replace(Source, "h", ("5" & h.Text & "5"))
  10. Source = Replace(Source, "i", ("5" & i.Text & "5"))
  11. Source = Replace(Source, "j", ("5" & j.Text & "5"))
  12. Source = Replace(Source, "k", ("5" & k.Text & "5"))
  13. Source = Replace(Source, "l", ("5" & l.Text & "5"))
  14. Source = Replace(Source, "m", ("5" & m.Text & "5"))
  15. Source = Replace(Source, "n", ("5" & n.Text & "5"))
  16. Source = Replace(Source, "ñ", ("5" & ñ.Text & "5"))
  17. Source = Replace(Source, "o", ("5" & o.Text & "5"))
  18. Source = Replace(Source, "p", ("5" & p.Text & "5"))
  19. Source = Replace(Source, "q", ("5" & q.Text & "5"))
  20. Source = Replace(Source, "r", ("5" & r.Text & "5"))
  21. Source = Replace(Source, "s", ("5" & s.Text & "5"))
  22. Source = Replace(Source, "t", ("5" & t.Text & "5"))
  23. Source = Replace(Source, "u", ("5" & u.Text & "5"))
  24. Source = Replace(Source, "v", ("5" & v.Text & "5"))
  25. Source = Replace(Source, "w", ("5" & w.Text & "5"))
  26. Source = Replace(Source, "x", ("5" & x.Text & "5"))
  27. Source = Replace(Source, "y", ("5" & y.Text & "5"))
  28. Source = Replace(Source, "z", ("5" & z.Text & "5"))
  29. Form2.srca.Text = Source
  30.  

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?


Título: Re: Nose si usar el replace... alternativa?
Publicado por: BlackZeroX en 6 Febrero 2011, 08:43 am
.
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
  1.  
  2. mid$(Source ,  Posicion, longitud ) = replace$ ( mid$(Source ,  Posicion, longitud ) , Antiguo_String , Nuevo_String )
  3.  
  4.  

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!¡.


Título: Re: Nose si usar el replace... alternativa?
Publicado por: CAR3S? en 6 Febrero 2011, 09:04 am
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$


Título: Re: Nose si usar el replace... alternativa?
Publicado por: BlackZeroX en 6 Febrero 2011, 09:17 am
.
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() (http://msdn.microsoft.com/en-us/library/05e63829%28v=vs.80%29.aspx)

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

Código
  1.  
  2. Option Explicit
  3.  
  4. Private Sub Form_Load()
  5.    MsgBox Codificate("Temibles Lunas!¡.")
  6. End Sub
  7.  
  8. Private Function Codificate(ByVal vsData As String, Optional ByVal ToReplaceABC As String = "zyxwvutsrqponmlkjihgfedcba") As String
  9. Dim lng_i           As Long
  10. Dim byt_char        As Byte
  11.    If Len(ToReplaceABC) = 26 Then ' // Asc("a")-Asc(z)+1=25 poner 27 si se quiere afgregar la ñ
  12.        For lng_i = 1 To Len(vsData)
  13.            byt_char = Asc(Mid$(vsData, lng_i, 1))
  14.            If byt_char >= 97 And byt_char <= 122 Then      ' a - z
  15.                Mid$(vsData, lng_i, 1) = LCase$(Mid$(ToReplaceABC, byt_char - 96, 1))
  16.            ElseIf byt_char >= 65 And byt_char <= 90 Then   ' A -Z
  17.                Mid$(vsData, lng_i, 1) = UCase$(Mid$(ToReplaceABC, byt_char - 64, 1))
  18.            'ElseIf byt_char = 241 Then ' &#241;
  19.                'Mid$(vsData, lng_i, i) = Mid$(ToReplaceABC, byt_char - 98, lng_i, i)
  20.            'ElseIf byt_char = 209 Then ' &#209;
  21.                'Mid$(vsData, lng_i, i) = Mid$(ToReplaceABC, byt_char - 66, lng_i, i)
  22.            End If
  23.        Next lng_i
  24.    End If
  25.    Codificate = vsData
  26. End Function
  27.  
  28.  

Dulces Lunas!¡.


Título: Re: Nose si usar el replace... alternativa?
Publicado por: CAR3S? en 6 Febrero 2011, 09:34 am
Gracias por el codigo, una cosa....

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

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


Título: Re: Nose si usar el replace... alternativa?
Publicado por: BlackZeroX en 6 Febrero 2011, 09:47 am
.
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 ñ/Ñ )

(http://charolet.blogdiario.com/img/ascii.jpg)

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


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,

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

Gracias por el codigo, una cosa....

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

es enserio?

Dulces Lunas!¡.


Título: Re: Nose si usar el replace... alternativa?
Publicado por: CAR3S? en 6 Febrero 2011, 09:58 am
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


Título: Re: Nose si usar el replace... alternativa?
Publicado por: BlackZeroX en 6 Febrero 2011, 10:58 am
.
LOL

ya viste el 2do parametro?

Dulces Lunas.


Título: Re: Nose si usar el replace... alternativa?
Publicado por: CAR3S? en 6 Febrero 2011, 11:28 am
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
  1. Dim source As String
  2. source = Text1.Text
  3. MsgBox Mid(source, 1) = Replace$(Mid(source, 1), "a", a.Text)
  4.  

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!


Título: Re: Nose si usar el replace... alternativa?
Publicado por: Psyke1 en 6 Febrero 2011, 19:24 pm
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


Título: Re: Nose si usar el replace... alternativa?
Publicado por: 79137913 en 7 Febrero 2011, 00:43 am
[OFFTOPIC]

HOLA!!!

( Ya conocia el and or y not  :¬¬)

AHHH, ya me di cuenta, no sabia que un if devolvia true a cualquier valor impar XD.

Ahora si Listo, no molesto mas :P. (Que duda Boluda)

En realidad la duda era por que el And 1 al final, osea es medio redundante.

y lo de If byt_char >= 97 And byt_char <= 122 Then      ' a - z fue por que lei re mal el codigo. :P

GRACIAS POR LEER!!!


Título: Re: Nose si usar el replace... alternativa?
Publicado por: Edu en 7 Febrero 2011, 04:04 am
? And es como poner && , me extraña de vs xD q fumaste? xD jaj

Yo quiero saber una cosa, un char(numero) da una letra no? y si en el codigo hace un bucle para ir aumentando el valor de numero asi hace a, b,c,d ... ?

edit: Ah, creo q blackzero ya hizo eso q digo


Título: Re: Nose si usar el replace... alternativa?
Publicado por: raul338 en 7 Febrero 2011, 04:12 am
? And es como poner && , me extraña de vs xD q fumaste? xD jaj
&& no se usa en vb, y dudo que haya entendido.

And, Or, y Xor son operadores binarios (booleanos). En el if se usa para juntar condiciones.

Código
  1. If a="0" And b="1" then

Es como decir
Código
  1. If a="0" then
  2.    if b="1" then

Puedes probar jugando con true y false y veras los resultados. Busca en google logica binaria, "tablas de verdad", etc.

Pd: No desvien mas el tema


Título: Re: Nose si usar el replace... alternativa?
Publicado por: CAR3S? en 7 Febrero 2011, 04:56 am
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

pasa que nose como buscar (EN ESTE CASO) (Ya lei sobre mid y sobre replace "Ya sabia")

si no me equivoco mid se usa para ie a "x" punto y terminar en "y" punto
pero si hago
msgbox mid$(source,1) = replace$(mid$(source,1),"a",a.text)

me devuelve "True" (Creo que por los 2 unos), o sino "False"


Título: Re: Nose si usar el replace... alternativa?
Publicado por: raul338 en 7 Febrero 2011, 05:24 am
Creo que no solamente necesitas el Mid$, sino tambien el InStr Masivamente. Y si no me equivoco, estas intentando hacer es cifrar por sustitucion.

Yo te recomendaria que hagas un bucle recorriendo el string y por cada caracter "i" introduscas su sustito correspondiente en otro string inicialmente vacio. Asi no te lias con replace, mid e instr que ya parece que lo ves hasta en la sopa xd


Título: Re: Nose si usar el replace... alternativa?
Publicado por: BlackZeroX en 7 Febrero 2011, 06:20 am
.


And, Or, y Xor son operadores binarios (booleanos). En el if se usa para juntar condiciones.


En efecto SON OPERACIONES BINARIAS mas no Booleanas de hecho el resultado es Binario mas no Booleano, de forma habitual se usan para enmascarar Bits ( No los Bytes OJO )

por ejemplo

1 en binario es 00000001 si se le hace not 1 el resultado es -2 ya que se obtiene el complemento 1 ( hay un 2do complemento llamado Complemento 2 que es el Complemento 1 mas 1 en su ultimo bit ) del BINARIO pero en representacion negativa 11111110... Pueden usar la calculadora de windows o mi clase Operaciones aritmeticas con Hex, Oct, Binario y Decimal (http://infrangelux.hostei.com/index.php?option=com_content&view=article&id=3:operatearimetic&catid=15:catmoduloscls&Itemid=24)

Este tema se llama Bitwise Operation (http://en.wikipedia.org/wiki/Bitwise_operation) o en español pero mas cutre en mi forma de entender  Operador_a_nivel_de_bits (http://es.wikipedia.org/wiki/Operador_a_nivel_de_bits)

Operaciones con And (http://msdn.microsoft.com/es-es/library/xbwk1246.aspx)

Creo que no solamente necesitas el Mid$, sino tambien el InStr Masivamente. Y si no me equivoco, estas intentando hacer es cifrar por sustitucion.

Yo te recomendaria que hagas un bucle recorriendo el string y por cada caracter "i" introduscas su sustito correspondiente en otro string inicialmente vacio. Asi no te lias con replace, mid e instr que ya parece que lo ves hasta en la sopa xd

eso ya se lo dije inclusive le di codigo ¬¬"

P.D.: Desvie un poco el tema pero no creo que importe si se aprende algo más.

Temibles Lunas!¡.


Título: Re: Nose si usar el replace... alternativa?
Publicado por: CAR3S? en 7 Febrero 2011, 07:30 am
black, podrias explicarme que hace cada paso del codigo? porfa, no lo entiendo  :-(


Título: Re: Nose si usar el replace... alternativa?
Publicado por: 79137913 en 7 Febrero 2011, 12:41 pm
HOLA!!!

Gracias Black :D

Aca un codigo mas simple y reducido.

El tema de esto es que tiene un Gran Gran problema, si yo en el codigo de la letra "a" pongo "b" me va a codificar la "a" como "b" entonces hay que tener cuidado.

Código
  1. Private Function Codificar(Source As String, CodeTable As String, SingleCodeLen As Long) As String
  2. Dim X As Long
  3.    If Not Len(CodeTable) = 26 * SingleCodeLen Then Codificar = "Error, Invalid CodeTable Length": Exit Function
  4.    For X = 1 To 26
  5.        Source = Replace$(Source, Chr(X + 96), Mid(CodeTable, X * SingleCodeLen - (SingleCodeLen - 1), SingleCodeLen))
  6.    Next
  7.    Codificar = Source
  8. End Function
  9.  
  10. Private Sub Form_Load()
  11. Debug.Print Codificar("abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 1)
  12. End
  13. End Sub
  14.  

GRACIAS POR LEER!!!


Título: Re: Nose si usar el replace... alternativa?
Publicado por: CAR3S? en 7 Febrero 2011, 14:13 pm
soy al unico que le da error?  :xD


Título: Re: Nose si usar el replace... alternativa?
Publicado por: 79137913 en 7 Febrero 2011, 14:36 pm
HOLA!!!

Solucionado, ya funciona perfect XD.

Por si no se entiende, la funcion es asi:

Codificar(Source,CodeTable,SingleCodeLen)

donde:

Source = Cadena de texto a codificar.
CodeTable = Cadena de texto ordenada alfabeticamente con lo que queres que remplace.
SingleCodeLen = La longitud de cada codigo en la variable Codetable.

GRACIAS POR LEER!!!


Título: Re: Nose si usar el replace... alternativa?
Publicado por: raul338 en 7 Febrero 2011, 18:42 pm
En efecto SON OPERACIONES BINARIAS mas no Booleanas de hecho el resultado es Binario mas no Booleano, de forma habitual se usan para enmascarar Bits ( No los Bytes OJO )
Me referia a que se usan para obtener valores binarios convertidos en booleanos al vuelo.

Se usan para operar entre binarios y booleanos actuando como binarios (True <> 0, False = 0) Tal como son las condiciones (if en este caso)


Título: Re: Nose si usar el replace... alternativa?
Publicado por: Edu en 8 Febrero 2011, 18:23 pm
Raul, el 79137913 no es el q sabe de C#? y me parece q es buen programador por eso me extraño q pregunte eso y con los && le estaba explicando haciendo comparacion con el lenguaje q ya sabe, q pienso q es C#


Título: Re: Nose si usar el replace... alternativa?
Publicado por: 79137913 en 8 Febrero 2011, 18:51 pm
HOLA!!!

@ZERO: XD Si, se C# y te entendi , pero el tema es que, yo ya sabia para que era el and(lo que explicaste vos y raul), al final con lo de Black y un link que me paso Frog entendi lo que me faltaba.

Y aprendi que se puede sumar potencias de 2 con el OR. XD

GRACIAS POR LEER!!!