En varias ocasiones he necesitado formatear texto "cadena" dividiendolo en un máximo de líneas "numLineas" con unas longitudes máximas determinadas "longitudlinea".

Esto me ocurre cuando tengo que cumplimentar un formulario al que se le otorga un tamaño físico determinado mientras que el texto que hay que introducir en él resulta ser de cualquier tamaño posible.

La siguiente función tiene como parámetros de entrada:

La cadena que deseamos formatear, el número máximo de líneas que permite nuestro espacio en el formulario y la máxima longitud de las líneas en número de caracteres permitidos.

La función nos devuelve un string con la nueva cadena perfectamente formateada.

El texto que no quepa es desechado

Espero que alguien se pueda beneficiar de esta función.



PUBLIC FUNCTION formateaCadena(cadena AS String, longitudlinea AS Integer, numLineas AS Integer) AS String

DIM longitudCadena AS Integer 'número de caracteres de la cadena a presentar
DIM i AS Integer
DIM caracter AS String
DIM pos AS Integer 'posición del caracter dentro de la línea
DIM espacio AS Integer 'distancia en caracteres hasta el último espacio de la línea
DIM linea AS Integer
DIM nuevacadena AS String

'inicializamos variables
longitudCadena = Len(cadena)
nuevacadena = ""
pos = 0
i = 1
linea = 1

WHILE i < longitudCadena + 1 AND linea < numLineas + 1

'si nos encontramos con un CR lo imprimimos y nos
'posicionamos al principio de la línea siguiente
IF Mid$(cadena, i, 1) = "\n"
pos = 0
INC linea
ENDIF

'si superamos la máxima longitud de la línea, buscamos el último espacio
'para partir la línea en ese punto
IF pos = longitudlinea THEN
espacio = RInStr(nuevacadena, " ")
nuevacadena = Mid$(nuevacadena, 1, espacio - 1)
nuevacadena &= "\n"
i = Len(nuevacadena)
pos = 0
INC linea
ENDIF

caracter = Mid$(cadena, i, 1)
IF pos = 0 AND caracter = " " THEN
' nos saltamos los espacios al principio de línea
ELSE
nuevacadena &= caracter
ENDIF
INC pos
INC i

WEND

RETURN nuevacadena

END