Spanish (B4A) Ayuda como divir cadena de texto

Discussion in 'Spanish Forum' started by hibrid0, Jun 29, 2015.

  1. hibrid0

    hibrid0 Active Member Licensed 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.

    Code:
    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
     
  2. hibrid0

    hibrid0 Active Member Licensed 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.




    Code:
    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: Jun 29, 2015
Loading...