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 - Psyke1

#141
Ook, gracias, lo corregí.
Y no, no está acabado nuestro proyecto, ni mucho menos... :)

DoEvents! :P
#142
En ocasiones las cosas se pueden hacer mejor... Si una cosa es optimizable no es trabajo a la basura.
Supongamos que tienes que comprobar datos con una función 100.000 veces por ejemplo.

La función A tarda en cada uno : 0,010 seg y la función B: 0,015 seg

Tiempo tras la función A: 1000 seg
Tiempo tras la función B: 1500 seg

No sé tú, pero a mí si me importa esperar 500 segundos porque sí delante de la pantalla. :P

DoEvents! :P
#143
Mi nueva clase para concatenar cadenas rápidamente (no incluye la opción de insertar/remover cadenas por ahora...):
Código (vb) [Seleccionar]

Option Explicit
Option Compare Binary
'====================================
' º Name      : cConcatenator.cls
' º Version   : 1.3
' º Author    : Psyke1
' º Twitter   : @SoyAbsurdo
' º Country   : Spain
' º Date      : 15/10/11
' º Visit     :
'    * http://foro.h-sec.org
'    * http://infrangelux.sytes.net
'====================================
Private Declare Sub RtlMoveMemory Lib "ntdll.dll" (ByVal lpDestination As Long, ByVal lpSource As Long, ByVal Length As Long)
Private Declare Function SysAllocStringByteLen Lib "oleaut32.dll" (ByVal oleStr As Long, ByVal BLen As Long) As Long

Private sRet()                  As String
Private lCount                  As Long
Private lChunk                  As Long
Private lTotalLenB              As Long

Public Static Sub Append(ByRef sText As String)
Dim lLenB                       As Long
   
    lLenB = LenB(sText)
    If lLenB Then
        If lCount > lChunk Then
            lChunk = lChunk + lChunk + 1&
            ReDim Preserve sRet(lChunk) As String
        End If

        sRet(lCount) = sText
        lCount = lCount + 1&
        lTotalLenB = lTotalLenB + lLenB
    End If
End Sub

Public Static Property Get LengthString() As Long
    LengthString = LengthString \ 2&
End Property

Public Sub ResetAll()
    lCount = 0&
    lTotalLenB = 0&
End Sub

Public Static Property Get GetString() As String
Dim pDest                       As Long
Dim lLenBItem                   As Long
Dim Q                           As Long

    If lCount Then
        RtlMoveMemory VarPtr(GetString), VarPtr(SysAllocStringByteLen(0&, lTotalLenB)), 4&

        pDest = StrPtr(GetString)
        For Q = 0 To (lCount - 1&)
            lLenBItem = LenB(sRet(Q))
            RtlMoveMemory pDest, StrPtr(sRet(Q)), lLenBItem
            pDest = pDest + lLenBItem
        Next Q
    End If
End Property

Private Sub Class_Initialize()
    lChunk = &H270F&
    ReDim sRet(lChunk) As String
End Sub


Test comparándola con cStringBuilderl.cls (la más rápida que encontré en la red):



DoEvents! :P
#144
Yo casi nunca falto a mi palabra, aquí está la mía:

Código (vb) [Seleccionar]
Option Explicit

Private Const sCombination      As String = "brblcrclchdrdlflfrgrgljrjlkrkllrllmrmlprplrrrlsrsltrtlwrwlzrzl"
Private Const sVowels           As String = "aeiou"
Private Const sConsonants       As String = "bcdfgijklmnñpqrstvwxz"

Public Static Function PronunWord(ByVal lLen As Long) As String
Dim lCount          As Long
Dim lNum            As Long
Dim lLast           As Long
Dim lVowelsCount    As Long

    If Not (lLen And &H80000000) Then
        lCount = 0
        lLast = 0
       
        Do
CheckAgain:
            lNum = RandomNumber(1, 3)
           
            If lNum = 1 And lVowelsCount < 1 Then
                lVowelsCount = -1
            ElseIf lNum = lLast Then
                GoTo CheckAgain
            End If

            Select Case lNum
                Case 3
                    If Not (lCount > lLen - 3) Then
                        PronunWord = PronunWord & (MidB$(sCombination, (RandomNumber(1, 30) * 2) - 1, 4) & _
                                                   MidB$(sVowels, (RandomNumber(1, 5) * 2) - 1, 2))
                        lCount = lCount + 3
                    End If
                Case 2
                    If lCount + 1 < lLen Then
                        PronunWord = PronunWord & (MidB$(sConsonants, (RandomNumber(1, 20) * 2) - 1, 2) & _
                                                   MidB$(sVowels, (RandomNumber(1, 5) * 2) - 1, 2))
                        lCount = lCount + 2
                    Else
                        PronunWord = PronunWord & MidB$(sConsonants, (RandomNumber(1, 20) * 2) - 1, 2)
                        lCount = lCount + 1
                    End If
                Case Else
                    PronunWord = PronunWord & MidB$(sVowels, (RandomNumber(1, 5) * 2) - 1, 2)
                    If lLast = 1 Then
                        lVowelsCount = lVowelsCount + 1
                    Else
                        lVowelsCount = 0
                    End If
                    lCount = lCount + 1
            End Select
           
            lLast = lNum
        Loop Until lCount = lLen
    End If
End Function

Private Static Function RandomNumber(ByVal lMin As Long, ByVal lMax As Long) As Long
    Randomize
    RandomNumber = (lMin - lMax) * Rnd + lMax
End Function

Private Sub Form_Load()
    Debug.Print PronunWord(100)
End Sub


Retorna:
purgiruocoouqolfioeugrearkeowaomiglamiolcifiopukliroonedluergeuñaikrofeamelfieefloioueicuooteeclooiu

Comprueba a ver si está bien que la hice en el autobús de vuelta a casa. :-\
Si hay algún fallo mañana corrijo.

DoEvents! :P
#145
Una cosa que se nota mucho:

Haz esto:
Código (vb) [Seleccionar]

CadenaLarga=Cadenalarga & (CadenaCorta1 & CadenaCorta2)


En vez de esto:
Código (vb) [Seleccionar]

CadenaLarga=Cadenalarga & CadenaCorta1 & CadenaCorta2


DoEvents! :P
#146
De nada...
Mira, te dejo una optimización de la función:
Código (vb) [Seleccionar]
Option Explicit

Public Function Get_Text(ByRef sText As String) As Collection
Dim oRegExp                     As Object
Dim oMatch                      As Object
Dim oMatches                    As Object
    If LenB(sText) Then
       Set oRegExp = CreateObject("VBScript.RegExp")
       Set Get_Text = New Collection
       
       With oRegExp
           .Pattern = "<td><span>([\d\.]+)<\/span><\/td>"
           .Global = True
           .IgnoreCase = True
       End With
   
       Set oMatches = oRegExp.Execute(sText)
       
       For Each oMatch In oMatches
           Get_Text.Add oMatch.Submatches(0)
       Next oMatch
    End If
End Function

Private Sub Form_Load()
Dim vItem                       As Variant
Const sExample                  As String = "<td><span>123.234.123.231</span></td>" & vbNewLine & _
                                            "<td><span>193.134.121.233</span></td>" & vbNewLine & _
                                            "<td><span>83.234.123.1</span></td>"
    For Each vItem In Get_Text(sExample)
        Debug.Print vItem
    Next vItem
End Sub


Devuelve:
123.234.123.231
193.134.121.233
83.234.123.1


Esta es muy sencilla y no hago validación para no perder tiempo, pero mira los enlaces que puse para aprender.

PD: Ni siquiera me gusta PvZ, sólo lo puse por mi novia que está viciada a esa *****. :rolleyes:

DoEvents! :P
#147
Sí.

DoEvents! :P
#148
Cita de: $Edu$ en  2 Octubre 2011, 22:30 PM
Tendria que ser tuyo el otro programa tambien, y crear una conexion con sockets asi por ejemplo el data que le llega sera el comando a realizar.
What? :xD
A mi entender él no ha dicho nada de que fuera remoto. :rolleyes:
Y sí, depende el caso, pero en principio sí que es posible hacer lo que dices antoz, busca SendMessage() + SET_TEXT por ejemplo, te dará una idea de cómo puedes hacer algunas cosas, también deberías aprender a usar el Spy++ para saber el ClassName para conseguir el Handle para interaccionar con el control posteriormente. ;)
Ahora... ¡A googlear! :D

DoEvents! :P
#149
Claro, mirate este hilo en el que participamos raul338 y yo hace tiempo:
http://foro.elhacker.net/programacion_visual_basic/ayudita_expresion_regular-t308911.0.html
No te asustes, ya no soy tan troll... :xD
Hay muchos ejemplos y puse unos links interesantes.

Está bien este de la wikipedia por ejemplo:
http://es.wikipedia.org/wiki/Expresi%C3%B3n_regular
Si buscas en google encontrarás infinidad de ellos, miras de unos y de otros y en esta web:
http://regexpal.com/
Puedes hacer pruebas online (aunque hay algún caso concreto que te puede confundir...).

También te dejo unos retos que hicimos algunos del foro:
http://foro.elhacker.net/ejercicios/retos_de_expresiones_regulares-t306661.0.html
Hay algunas que ponen que son auténticas obras de arte. ;)

Con eso tienes para un buen rato.

DoEvents! :P
#150
Exacto, leer el html y usar RegExp para extraer lo que quieras para mí sería la mejor opción.n

DoEvents! :P