Spanish (B4A) Ayuda como divir cadena de texto

hibrid0

Active Member
Licensed User
Longtime User
Hola gente del foro, estoy aprendiendo B4A (Realmente aprendiendo a programar), y tengo una cadena de caracteres que necesito dividir para luego insertarla en un documento.

Hice esta rutina para dividir la cadena de caracteres, pero no me sirve al 100%, pues necesito no divida las palabras al crear una nueva linea, solo la corte en el espacio anterior y la siguiente inicio en la siguiente palabra.

B4X:
Sub texto_lineas (s As String, numero_caracteres)
Dim l As List

l.Initialize

     For i = 0 To s.Length
         If (i+numero_caracteres)<=s.Length Then
            l.Add(s.SubString2(i, i+numero_caracteres))
        Else
      
      
        End If
        i=i+(numero_caracteres-1)
     Next

For i = 0 To l.Size - 1
    Log(l.Get(i))
Next
Return l

End Sub
 

hibrid0

Active Member
Licensed User
Longtime User
Bueno cree una nueva función que no corta las palabras, pero sigue teniendo 1 pequeño defecto o bueno 2.
Lo que hago:
Fase 1

1. Con un For recorro caracter por caracter, lo comparo con if si es un espacio, si es espacio agrego la palabra a una lista y reseteo la variable q almacena los caracteres, si no agregago el caracter a una variable que contiene la palabra.

Fase 2
2. Con un for recorro la lista y agrego la palabra a un String al llegar al maximo de palabras agrego otra linea.

Si hay alguien en el foro que me de una sugerencia para hacerlo mejor, se agradece mucho. Lo que busco es una forma de justificar el texto, no puedo usar gravity.

Problemas que tiene esta funcion:
Fase 1: Si la cadena que paso no finaliza en ESPACIO, no agrega la ultima palabra.
En teoría este error lo "Soluciono agregando un ESPACIO al final de la cadena", que eso hago y funciona, pero no creo que sea una buena solucion :-/.

Fase 2: No lee las ultimas palabras si el grupo final es menor al numero de palabras solicitado.




B4X:
Sub parrafo(cadenax As String, num_palabras As Int) As List
Dim lista2 As List
Dim palabra As String
cadenax=cadenax&" "
lista2.Initialize
    For i= 0 To cadenax.Length -1
        If cadenax.CharAt(i)=" "  Or i=lista2.Size -1 Then
            lista2.Add(palabra)
            palabra=""
        Else
            palabra=palabra&cadenax.CharAt(i)
        End If

    Next
    For i=0 To lista2.Size -1
        Log(lista2.Get(i))
    Next

Dim cadena1 As String
Dim contador As Int
Dim lista3 As List
lista3.Initialize
Log("Nuevo parrafo")

    For i=0 To lista2.Size -1

        cadena1=cadena1&lista2.Get(i)&" "
        contador=contador+1
        If contador=num_palabras  Or i=lista2.Size -1 Then
            lista3.Add(cadena1)
            Log(cadena1)
                contador=0
                cadena1=""

        End If

    Next
lista2.Clear
Return lista3

End Sub
 
Last edited:
Top