Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - cobein

#131
The MidB function in previous versions of Visual Basic returns a string in bytes rather than characters. It is used primarily for converting strings in double-byte character set (DBCS) applications. All Visual Basic strings are in Unicode, and MidB is no longer supported.
#132
Programación Visual Basic / HTML Parser [SRC]
6 Diciembre 2009, 22:27 PM
Bueno, estaba haciendo unos experimentos y queria extraer datos de unas paginas, despues de buscar un poco no encontre ningun parser de HTML para VB que funcionara correctamente o que tuviero lo que necesitaba asi que hice uno. Quiero aclarar que el code no esta optimizado en lo absoluto, iba resolviendo cosas sobre la marcha asi que el resultado es lo que fue saliendo.
Se puede hacer mucho mas compacto y rapido utilizando safearrays y APIs pero por ahora lo dejo asi hasta que lo termine de purgar.

El ejemplo tiene un treeview donde se cargan los elemtos con sus respectivos path etc. se pueden ver las propiedades de cada uno y muchas cosas magicas =D

Para el que le interesa, arme un un treee con un array, el primero que hago asi en vez de utilizar clases... la verdad esta un poco flojo pero es interesante.

http://www.advancevb.com.ar/?p=433
#133
jajaj perdon estoy aburrido! xD
#134
Ya que estamos sigo molestando =D

Una cosa que nadie tiene en cuenta, Mid, Asc, etc estan en dos sabores con y sin $ porque? simple Mid se usa con variants, Mid$ se usa con strings, funcionan de igual manera pero internamente se hace una conversion innecesaria. Lo mismo vale para las demas funciones.

En un algoritmo simple como este no hace mucha diferencia pero en casos que se utilice mucho se va a notar.
#135
xD asi si es divertido
#136
Entiendo lo que planteas, pero la solucion no es correcta. Tendrias que hacer algo asi:

    For a = 0 To 4
        For x = a + 1 To 4

Ahi no hay no se excluyen ni repiten comparaciones.
#137
Cita de: ░▒▓BlackZeroҖ▓▒░ en  6 Diciembre 2009, 06:14 AM

lo que decia es que no tiene caso comparar el elemento de la matriz 0 con el elemento de la matrx misma es decir no tiene caso realmente y es lo mismo con el ultimo en si si hay un "if then" que hace muerto un bucle no hay caso de iniciar ambos en 0 yq que hay un "if then" que no dejara hacer nada en lo absoluto y es lo mismo al termino (75)

P.D.: Se que hay 76 elementos... se que cuentan desde LBound() hasta Ubound() es decir 0-75 = 76 elementos... ¬¬# y me da peresa ver ese codigo la verdad xP por tanto    Print #File, "

Dulces Lunas!¡.


No me exprese correctamente parece, lo que quiero decir es que no son 2 coliciones las que hay sino 76, cada elemento es comparado con sigo mismo una vez, asi como el primero y el ultimo que mencionas, todos los demas en el medio tambien.
#138
Primero que nada, esto no es para ofender ni nada por el estilo pero me parecio constructivo el hecho de mencionar o resaltar algunas cosas de este source.

Me tome la livertad de descargar esto para ver de que se trataba y el porque de los comentarios y decidi hacer este mini review porque hay muchas cosas que no tienen sentido.

Primero, para el que se pregunta que es esto? es simplemente un "Substitution cipher" o quiere serlo.

Vamos a destripar el source =D

For x = 0 To 75
 If txtChr(x).Text = Chr(34) Then MsgBox "No se permite el carácter " & Chr(34), vbCritical, Me.Caption: txtChr(x).BackColor = &H8080FF: Exit Sub
Next x


En la funcion principal encontramos esto que es simplemente un check para ver si algun textbox tiene como texto comillas.

Esto no tiene absolutamente sentido por que se puede validar dinamicamente con el evento Validate del textbox.

Private Sub txtChr_Validate(Index As Integer, Cancel As Boolean)
   If txtChr(Index) = """" Then
       MsgBox "No se permite el carácter " & Chr(34), vbCritical, Me.Caption
       Cancel = True
   End If
End Sub


For a = 0 To 75
 For x = 0 To 75
  If a <> x Then
   If txtChr(a).Text = txtChr(x).Text Then
    txtChr(a).BackColor = &H8080FF
    txtChr(x).BackColor = &H8080FF
   ElseIf Len(txtChr(a).Text) > 1 Then
    txtChr(a).BackColor = &H8080FF
   ElseIf Len(txtChr(x).Text) > 1 Then
    txtChr(x).BackColor = &H8080FF
   End If
  End If
 Next x
Next a


Aca esta el de la discoridia!!! Bien, este es uno de los que menos sentido tiene, son dos loops anidados que tienen como objetivo verificar si algun textbox tiene un texto con mas de un caracter y si hay dos textos repetidos.

Primero que nada, para que verificar si algun textbox tiene mas de un caracter? simplemente se pone la propiedad MaxLength = 1 y listo.

Una aclaracion aca para ░▒▓BlackZeroҖ▓▒░ en estos dos loops anidados se esta comparando una matriz con sigo misma por ende se van a producir tantas coliciones como objetos haya, en este caso 76.

Vamos con los elementos duplicados, mi pregunta es, vale la pena pasar por el proceso de "validacion" una y otra vez?  cuando todo esto se puede hacer on the fly?

Por ejemplo podriamos usar una coleccion para ver si el elemento existe y validarlo con el evento validate, algo asi.



Dim cChars As New Collection

Private Sub txtChr_Validate(Index As Integer, Cancel As Boolean)
   
   If LenB(txtChr(Index)) = 0 Then Exit Sub
   
   If txtChr(Index) = """" Then
       MsgBox "No se permite el carácter " & Chr(34), vbCritical, Me.Caption
       Cancel = True
       Exit Sub
   End If
   
   If Exists(txtChr(Index)) Then
       MsgBox "El carácter esta en uso", vbCritical, Me.Caption
       Cancel = True
       Exit Sub
   End If
       
End Sub

Private Function Exists(ByVal sChar As String) As Boolean
   On Error GoTo Err_Exists
   cChars.Add sChar, sChar
   Exit Function
Err_Exists:
   Exists = True
End Function


Este es para verificar si se produjo un error durante la validacion.....
For a = 0 To 75
 If txtChr(a).BackColor = &H8080FF Then Exit Sub
Next a


totalmente innecesario, se puede tener un flag en la validacion y evitar esto, no hay necesidad de utilizar un loop en lo absoluto.


With CD
   .DialogTitle = "Guardar modulo .bas en..."
   .Filter = "Modulo bas (.bas) | *.bas"
   .ShowSave
End With


Este...bueno lo podriamos perdonar pero esta mal implementado tambien.

Al principio de la funcion se resetea el filename " CD.FileName = """ luego se abre el dialogo y se valida con esto "If CD.FileName <> "" Then" ... NO, el common dialog tiene una propiedad que se llama CancelError y esta ahi para poder determinar si se cancelo o no.

Bien estamos llegando al cuore de la funcion, el generador de algoritmos...

no lo pego completo poque no me entra ni en 3 paginas.

 Open CD.FileName For Output As #File
  Print #File, "'Algoritmo de cifrado creado por [Personal Algorythm]"
  Print #File, ""
  Print #File, "Public Function Encrypt(Data As String, Pass As String) As String"
  Print #File, " Dim pPass As String"
  Print #File, "  pPass = " & Chr(34) & Text77.Text & Chr(34)
  Print #File, "  If Pass = pPass Then"
  Print #File, "   If InStr(Data," & Chr(34) & 0 & Chr(34) & ") Then Data = Replace(Data," & Chr(34) & 0 & Chr(34) & "," & Chr(34) & txtChr(0).Text & Chr(34) & ")"  ' Numeros
  Print #File, "   If InStr(Data," & Chr(34) & 1 & Chr(34) & ") Then Data = Replace(Data," & Chr(34) & 1 & Chr(34) & "," & Chr(34) & txtChr(61).Text & Chr(34) & ")"



Que demonios es esto? simplemente un template de la funcion principal que se parcha con los nuevos valores.

Mas alla de que todo esto se podria reducir a unas 5 lineas de codigo... vamos a lo interesante

Esto es simplemente substitucion de caracteres pero hay algo llamativo en como esta implementado. Vamos a sacar un pedazo del algoritmo generado y a ver que pasa.

  If InStr(Data, "0") Then Data = Replace(Data, "0", "1")
  If InStr(Data, "1") Then Data = Replace(Data, "1", "T")

Este es mi texto original: 01
Vamos a "encriptarlo" ..
Primer paso reeemplazamos los 0s con 1s
nos queda algo asi 11
segundo paso reeemplazamos los 1s con Ts
Resultado: TT

Como tarea para el hogar les dejo intentar recobrar el texto original

  If InStr(Data, "1") Then Data = Replace(Data, "1", "0")
  If InStr(Data, "T") Then Data = Replace(Data, "T", "1")

PD: si alguno se esta preguntando que funcion cumple el password en todo esto... simplemente mera decoracion.

#139
A ver, considerando que tenes una pantalla comun con una resolucion normal unos 1280 x 667 y estas usando 4 bytes por pixel como en el ejemplo y a todo esto le sumamos que lo estas guardando en memoria como un string que es unicode osea que es el doble de tamano y como para finalizar, esto pasa 2 veces por lo menos como para realizar la comparacion.. nos quedaria asi.

1280 * 667 * 4 * 2 * 2 = 13660160 algo asi como 13.03 megabytes ....

mmm esto en mi 286 no anda seguro. :/ necesito un upgrade urgente.