Tema destacado: Personaliza-Escoge el diseño del foro que más te guste.
Autor
|
Tema: como adicionar espacios en una cadena de texto? (Leído 841 veces)
|
byway
Desconectado
Mensajes: 177
^^,
|
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.
|
|
|
|
|
En línea
|
|
|
|
|
seba123neo
|
usa mid() para extraer parte de la cadena y en un string temporal vas armando el string con el espacio.
|
|
|
|
|
En línea
|
Mucha gente, especialmente la ignorante desea castigarte por decir la verdad, por ser correcto, por ser tú. Nunca te disculpes por ser correcto, o por estar años delante de tu tiempo. Si estas en lo cierto, y lo sabes, que hable tu razón. Incluso si eres una minoria de uno solo, la verdad sigue siendo la verdad. M. Gandhi
|
|
|
BlackZeroX (Astaroth)
Wiki
Desconectado
Mensajes: 2.831
I'Love...!¡.
|
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!¡.
|
|
|
|
« Última modificación: 17 Noviembre 2011, 10:19 por BlackZeroX (Astaroth) »
|
En línea
|
|
|
|
byway
Desconectado
Mensajes: 177
^^,
|
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.
|
|
|
|
|
En línea
|
|
|
|
RHL
Conectado
Mensajes: 968
mental
|
Yo hice esta sin nada temporal todo in the fly  : 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"
|
|
|
|
« Última modificación: 17 Noviembre 2011, 20:44 por RHL »
|
En línea
|
|
|
|
BlackZeroX (Astaroth)
Wiki
Desconectado
Mensajes: 2.831
I'Love...!¡.
|
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!¡.
|
|
|
|
|
En línea
|
|
|
|
BlackZeroX (Astaroth)
Wiki
Desconectado
Mensajes: 2.831
I'Love...!¡.
|
@RHL Corta y precisa.
Sangrientas Lunas!¡.
|
|
|
|
|
En línea
|
|
|
|
|
raul338
|
@byway Usa el for con Step 2 para que vaya de 2 en 2  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
|
|
|
|
« Última modificación: 17 Noviembre 2011, 22:57 por raul338 »
|
En línea
|
|
|
|
RHL
Conectado
Mensajes: 968
mental
|
@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  @RHL Corta y precisa.
Sangrientas Lunas!¡.

|
|
|
|
|
En línea
|
|
|
|
|
|