como adicionar espacios en una cadena de texto?

Iniciado por byway, 17 Noviembre 2011, 07:35 AM

0 Miembros y 2 Visitantes están viendo este tema.

byway

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.

seba123neo

usa mid() para extraer parte de la cadena y en un string temporal vas armando
el string con el espacio.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

BlackZeroX

#2
ammm lo tomo algo asi como reto por que ando algo aburrido:

Código (Vb) [Seleccionar]


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:

Código (Vb) [Seleccionar]


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!¡.
The Dark Shadow is my passion.

byway

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:

Código (vb) [Seleccionar]

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.

x64core

#4
Yo hice esta
sin nada temporal todo in the fly  >:D:

Código (vb) [Seleccionar]
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



Código (vb) [Seleccionar]

s = "12345678901"
Call WithSpace(s, 2, 5)

= "12     34     56     78     90     1"


Código (vb) [Seleccionar]

s = "12345678901"
Call WithSpace(s, 4, 3)

= "1234   5678   901"



Código (vb) [Seleccionar]
s = "12345678901"
Call WithSpace(s, 6, 2)

= "123456  78901"




BlackZeroX

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!¡.
The Dark Shadow is my passion.

BlackZeroX

The Dark Shadow is my passion.

raul338

#7
@byway
Usa el for con Step 2 para que vaya de 2 en 2 :P

Código (vb) [Seleccionar]

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

x64core

@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