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...
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?
.
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
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!¡.
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$
.
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.
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!¡.
Gracias por el codigo, una cosa....
este codigo reemplazax letra por otra letra al azar? :rolleyes:
Editado, entendido, no te rias ajjajajaaja :laugh: ;-)
.
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,
----------------------------------------------
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!¡.
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
.
LOL
ya viste el 2do parametro?
Dulces Lunas.
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.
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!
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
[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!!!
? 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
Cita de: XXX-ZERO-XXX en 7 Febrero 2011, 04:04 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.
If a="0" And b="1" then
Es como decir
If a="0" then
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
Cita de: Mr. Frog © 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
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"
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
.
Cita de: raul338 en 7 Febrero 2011, 04:12 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)
Cita de: 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
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!¡.
black, podrias explicarme que hace cada paso del codigo? porfa, no lo entiendo :-(
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.
Private Function Codificar(Source As String, CodeTable As String, SingleCodeLen As Long) As String
Dim X As Long
If Not Len(CodeTable) = 26 * SingleCodeLen Then Codificar = "Error, Invalid CodeTable Length": Exit Function
For X = 1 To 26
Source = Replace$(Source, Chr(X + 96), Mid(CodeTable, X * SingleCodeLen - (SingleCodeLen - 1), SingleCodeLen))
Next
Codificar = Source
End Function
Private Sub Form_Load()
Debug.Print Codificar("abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 1)
End
End Sub
GRACIAS POR LEER!!!
soy al unico que le da error? :xD
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!!!
Cita de: BlackZeroX▓▓▒▒░░ en 7 Febrero 2011, 06:20 AM
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)
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#
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!!!