buenas ... hace tiempos no hago nada con visual basic, por el trabajo .. mi problema es como puedo adicionar espacios a una cadena de texto, por ejemplo a la cadena 1234567890 adicionar espacios cada 2 digitos para que quede asi :
12 34 56 78 90
trate de usar la funcion split pero como crear un delimitador..
pienso que leyendo toda la cadena y recorrer cada 2 caracteres y adiconar un espacio y luego sumarle 2 caracteres mas y asi hasta el final de toda la cadena, pero me pierdo en eso de recorrer 2 caracteres y pausarlo para adicionar una espacio.
toda sugerencia es bienvenida.
usa mid() para extraer parte de la cadena y en un string temporal vas armando
el string con el espacio.
ammm lo tomo algo asi como reto por que ando algo aburrido:
Private Function spaceWidth(ByRef sStr As String, ByVal lLnWord As Long, ByVal lLenSpace As Long) As Long
' // La funcion retorna la cantidad de ESPACIOS entre palabras... retorna -1 cuando hay un error...
Dim sTmp As String
Dim lSize As Long
Dim i As Long
Dim j As Long
spaceWidth = -1 ' ** Codigo de Error de retorno.
If (lLnWord <= &H0) Then Exit Function
' ** Calculamos las separaciones requeridas.
lSize = (Len(sStr) \ lLnWord)
If (lSize <= &H1) Or (lLenSpace = &H0) Then ' // Dimensiones (si hay >=2 grupos calculamos, de lo contrario cancelamos).
Exit Function
End If
' ** Cantidad de Dimenciones (Espacios entre "Palabras")...
spaceWidth = (lSize - 1)
' ** Longitud del buffer requerido...
lSize = ((lSize * lLnWord) + ((lSize - 1) * lLenSpace))
' ******************************
' ** Si es de longitudes errones este trozo corrije eso...
' ** sStr = "12345678904"
' ** spaceWidth sStr, 2, 2
' ******************************
j = (Len(sStr) Mod lLnWord)
If Not (j = &H0) Then
spaceWidth = (spaceWidth + 1) ' ** Cantidad de Dimenciones (Espacios entre "Palabras")...
lSize = lSize + j + lLenSpace ' ** Longitud del buffer requerido...
End If
' ** Buffer
sTmp = Space$(lSize)
' ** Empresamos a separar las "Palabras" en las longitudes dadas...
j = 1
For i = 1 To lSize Step (lLnWord + lLenSpace)
Mid$(sTmp, i, lLnWord) = Mid$(sStr, j, lLnWord)
j = j + lLnWord
Next
sStr = sTmp ' ** Seria mejor un metodo de intercambio de Punteros asi este proceso sera mas rapido...
End Function
ejemplo:
Private Sub Form_Load()
Dim sStr As String
sStr = "12345678904"
MsgBox sStr
spaceWidth sStr, 50, 10
MsgBox sStr
sStr = "12345678904"
spaceWidth sStr, 0, 10 ' // Retorna la funcion -1 y es por que hay un error de parametros...
MsgBox sStr
sStr = "12345678904"
spaceWidth sStr, 5, 10
MsgBox sStr
sStr = "12345678904"
spaceWidth sStr, 2, 1
MsgBox sStr
End Sub
Dulces Lunas!¡.
Cita de: seba123neo en 17 Noviembre 2011, 08:45 AM
usa mid() para extraer parte de la cadena y en un string temporal vas armando
el string con el espacio.
es lo que hize luego de postear mi problemita, pero igual me pierda jajaja:
Dim strCadena As String
Dim strTemp As String
Dim i As Integer
strCadena = Text1.Text
For i = 1 To Len(strCadena)
strTemp = Mid(strCadena, i, 2)
Text2.Text = Text2.Text & (strTemp & " ")
Next
esto funciona bien cuando solo es para separar un caracter, pero para dos no.
estuve revisando la funcion creada por BlackZeroX y esta bien hecha, pero como que tiene muchas lineas, pensaba en algo mas simple pero ni modo ..
Saludos.
Yo hice esta
sin nada temporal todo in the fly >:D:
Private Sub WithSpace(byref Strs As String, ByVal Chars As Long, ByVal Spaces As Long)
Dim n As Long
Dim l As Long
l = Len(Strs)
If Not Chars > &H0 Then Exit Sub
If Not Spaces > &H0 Then Exit Sub
n = Chars
Do While (n < l)
Strs = Strs & Space$(Spaces): l = l + Spaces
Mid$(Strs, n + &H1, l) = (Space$(Spaces) & Mid$(Strs, n + &H1, l))
n = n + Chars + Spaces
Loop
End Sub
s = "12345678901"
Call WithSpace(s, 2, 5)
= "12 34 56 78 90 1"
s = "12345678901"
Call WithSpace(s, 4, 3)
= "1234 5678 901"
s = "12345678901"
Call WithSpace(s, 6, 2)
= "123456 78901"
Cita de: byway en 17 Noviembre 2011, 20:04 PM
estuve revisando la funcion creada por BlackZeroX y esta bien hecha, pero como que tiene muchas lineas, pensaba en algo mas simple pero ni modo ..
El codigo contempla TODOS los errores posibles... si no quieres tantas lineas pues solo quita lo que no quieras...
Dulces Lunas!¡.
@RHL
Corta y precisa.
Sangrientas Lunas!¡.
@byway
Usa el for con Step 2 para que vaya de 2 en 2 :P
Dim strCadena As String
Dim strTemp As String
Dim i As Integer
strCadena = Text1.Text
For i = 1 To Len(strCadena) Step 2
strTemp = Mid(strCadena, i, 2)
Text2.Text = Text2.Text & (strTemp & " ")
Next
@byway
El hecho de que la funcion de BlackZeroX tenga varias lineas no significa que sea lenta
de hecho es la mas rapida y super eficiente >:D
Cita de: BlackZeroX (Astaroth) en 17 Noviembre 2011, 21:23 PM
@RHL
Corta y precisa.
Sangrientas Lunas!¡.
>:D