Estaba Buscando la forma de separar una Cadena de la siguiente manera:CitarNombre = "agus0"
Y que Quede en una matriz así...Citar
LetraNombre(0) = "a"
LetraNombre(1) = "g"
LetraNombre(2) = "u"
LetraNombre(3) = "s"
LetraNombre(4) = "0"
Se Entiende?
Mi Idea es Hacer un Bucle y con Left ir armando la Matriz. Ustedes que opinan? Cual es la Mejor Manera?
Muchas Gracias!!
.
Mr. Frogs realizo un codigo excelente donde jugaba con el tipo de una variable y la convirtio de manera inteligente jugando con los punteros.
Dulces Lunas!¡.
.
HOLA!!!
Mira este tema, ahí deje el codigo para hacerlo.
http://foro.elhacker.net/programacion_visual_basic/source_charsplit7913_separa_un_string_en_un_array_de_caracteres-t322111.0.html;msg1592263#msg1592263
GRACIAS POR LEER!!!
En vb6 se puede recorrer letra por letra poniendo string ?
Si es asi es facil, sino tambien porq usas el left.
for i = 0 to string.lenth
array[i] = string[i]
next
no necesitas ninguna matriz, con un simple For y Mid() esta listo...es pura logica.
Muchas Gracias por su ayuda. Lo Pude Solucionar Con el Source (http://foro.elhacker.net/programacion_visual_basic/source_charsplit7913_separa_un_string_en_un_array_de_caracteres-t322111.0.html;msg1592263#msg1592263) de 79137913 (http://foro.elhacker.net/profiles/79137913-u397857.html)
.
no se me ocurre nada mas rapido que esto:
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Any, ByVal Source As Any, ByVal Length As Long)
Private Declare Function VarPtrA Lib "msvbvm60.dll" Alias "VarPtr" (ByRef Ptr() As Any) As Long
Private Declare Function lstrlenW Lib "kernel32" (ByVal lpString As Long) As Long
Private Sub Form_Load()
Dim i As Integer
Dim sVar As String
Dim aStr() As Integer
Dim iDims As Long
sVar = "Miguel Angel"
iDims = charSplitToIntArray(StrPtr(sVar), aStr())
For i = 0 To (iDims - 1)
Debug.Print Chr(aStr(i))
Next i
End Sub
Private Function charSplitToIntArray(ByVal PtrString As Long, ByRef aPtr() As Integer) As Long
Dim lLen As Long
lLen = lstrlenW(ByVal PtrString)
ReDim aPtr(0 To (lLen - 1))
CopyMemory ByVal VarPtr(aPtr(0)), ByVal PtrString, (lLen * 2)
charSplitToIntArray = lLen - 1
End Function
De esta menara obtienes algo asi como punteos en CPP solo es similar nada identico pero es practico y dinamico
Private Sub Form_Load()
Dim i As Integer
Dim sVar As String
Dim aStr() As Integer
Dim iDims As Long
sVar = "Miguel Angel"
iDims = charSplitToIntArray(StrPtr(sVar)+(7*2), aStr()) '// Retorno Angel...
For i = 0 To (iDims - 1)
Debug.Print Chr(aStr(i))
Next i
End Sub
Temibles Lunas!¡.
Eh? Porque tanto problema? mi codigo no ira para vb6 pero se arregla como dice seba con Mid() y es mucho mas corto q hacer todo eso :S
@XXX-ZERO-XXX
la sintaxis de ese código es de .NET... ademas en .NET me parece que con Marshal se puede aun mas facil usando el ToChar que tiene la clase String si no mal recuerdo ( hace mucho que no toco .NET ).
Dulces Lunas!¡.
en .NET lo haces en una linea con .ToCharArray.
.
jaja sabia que hiba a pasar esto...
Cita de: seba123neo en 1 Mayo 2011, 08:11 AM
en .NET lo haces en una linea con .ToCharArray.
Cita de: BlackZeroX▓▓▒▒░░ en 1 Mayo 2011, 06:19 AM
@XXX-ZERO-XXX
la sintaxis de ese código es de .NET... ademas en .NET me parece que con Marshal se puede aun mas facil usando el ToChar que tiene la clase String si no mal recuerdo ( hace mucho que no toco .NET ).
Dulces Lunas!¡.
P.D.: Confundi/Mescle/Cague la clase Marshal.
Dulces Lunas!¡.
Pero digo cambiando lo de mi codigo por Mid() como decia seba, en fin, no les puedo discutir a ustedes que son unos masters, saludos
No se si sea lo mas rapido. Pero lo mas simple y rapido (midiendo instrucciones) es usar stronv y poniendolo a un array de bytes y de ahi se recorre facilmente
HOLA!!!
Osea... mi funcion que usa un EvilTypeConvert (o BadTypeConvert) y luego CHRW no es eficiente?
GRACIAS POR LEER!!!
La tuya usa nagia negra, la mia magia blanca :xD
Cita de: raul338 en 3 Mayo 2011, 21:41 PM
No se si sea lo mas rapido. Pero lo mas simple y rapido (midiendo instrucciones) es usar stronv y poniendolo a un array de bytes y de ahi se recorre facilmente
Más lento que la forma de
BlackZer0x, pero más simple.
Cita de: raul338 en 3 Mayo 2011, 22:15 PM
La tuya usa nagia negra, la mia magia blanca :xD
Jajajajajaja :laugh:
¡Exacto! ;)
DoEvents! :P
HOLA!!!
Jajaja, "Magia Negra" XD.
Siempre y cuando la "Magia Negra" no crashee esta bien :P.
Por cierto que es StronV?
GRACIAS POR LEER!!!
Cita de: 79137913 en 4 Mayo 2011, 02:29 AM
...
Por cierto que es StronV?
GRACIAS POR LEER!!!
Me da que raulito se refiere es a la función
StrConv()... :xD :silbar:
Dejo un ejemplo (aunque repito que mi manera favorita es la de
BlackZer0x :rolleyes: :-*) :
Option Explicit
Private Static Function String2Array(ByRef strText$, ByRef strOutPut$()) As Boolean
Dim bytStr() As Byte
Dim Q&, lngLen&
lngLen = (LenB(strText) \ 2) - 1
If lngLen And &H80000000 Then Exit Function
'// Aquí el famoso "StronV"... xP
bytStr = Strings.StrConv(strText, vbFromUnicode)
ReDim strOutPut$(0 To lngLen)
For Q = 0 To lngLen
strOutPut(Q) = Strings.ChrW$(bytStr(Q))
Next Q
String2Array = True
End Function
Private Sub Form_Load()
Dim varItem
Dim strO$()
If String2Array("Psyke1", strO) Then
For Each varItem In strO
Debug.Print varItem
Next varItem
End If
End Sub
Retorna:
P
s
y
k
e
1
DoEvents! :P
@Psyke1
Si lo que deseas es comparar negativos es con:
&H80000000
ya que las mascaras que se hacen con el operador binario son:
&HF0000000: 11110000
&H80000000: 10000000
P.D.: hay ya que tocar de nuevo la wiki no crees xP.
Temibles Lunas!¡.
Oops! :-\ gracias, se me escapó... :-[
corregidoCita de: BlackZeroX▓▓▒▒░░ en 5 Mayo 2011, 02:45 AM
...
P.D.: hay ya que tocar de nuevo la wiki no crees xP.
Temibles Lunas!¡.
Si hermano, estuve bastante ocupado estos últimos meses por estudios, pero a partir de
Junio podré meterme con ello de nuevo ;)
DoEvents! :P