Hola a todos:
Tengo esta funcion que en principio, crei que me solucionaba el problema, pero no funciona, y no se por que, la cuestion es que necesito una funcion, que pasandole dos parametros, nombre de cadena y longitud, me reparta los espacio en blanco sobrantes por la derecha, entre las palabras que contiene, como en un editor de texto, encontre esto pero no funciona.
La inserto tal como la encontre.
**************************
Distribuir un texto en renglones
La rutina GRAPPA ha sido probada para que suministre una matriz donde cada
elemento corresponde a un renglón, de modo que cada uno contenga palabras
enteras, salvo que haya alguna cuyo largo sea mayor que el indicado en
nCaracteres; en ese caso se trunca la palabra larga. Si hay retornos de
carro intercalados -chr(13)+chr(10)- se los toma como un renglón más, en
blanco.
Uso:
GRAPPA(cTexto, nCarac) -> aTexto
cTexto es la cadena de caracteres que hay que poner en renglones.
nCarac es el número de caracteres que tendrá como máximo cada renglón.
aTexto es una matriz de caracteres, donde cada elemento mide nCarac, el
texto de cada renglón está recostado sobre la izquierda y está rellenado
a la derecha con blancos.
--------------------------------------------------------------------------------
********** Devuelve una matriz con elementos/renglones de nCaracteres cada uno.
FUNC GRAPPA(cCadena, nCaracteres)
LOCAL aTexto := {}
LOCAL nCont := 0
LOCAL lMuyLarga := .F.
cCadena := IF(cCadena == NIL, '', LTRIM(cCadena))
nCaracteres := IF(nCaracteres == NIL, 0, nCaracteres)
IF nCaracteres > 0
IF LEN(cCadena) > nCaracteres
WHILE LEN(cCadena) > 0
WHILE chr(13)+chr(10) $ LEFT(cCadena, nCaracteres)
IF LEFT(cCadena,2) == chr(13) + chr(10)
AADD(aTexto, SPACE(nCaracteres))
ELSE
AADD(aTexto, PADR(LEFT(cCadena,AT(chr(13)+chr(10),cCadena)-1), nCaracteres))
ENDIF
cCadena := SUBSTR(cCadena, AT(chr(13)+chr(10),cCadena)+2)
ENDDO
IF LEN(cCadena) <= nCaracteres
AADD(aTexto, PADR(cCadena, nCaracteres))
EXIT
ELSE
IF SUBSTR(cCadena, nCaracteres, 1) == ' ' .OR. ;
SUBSTR(cCadena, nCaracteres+1, 1) == ' ' .OR. ;
SUBSTR(cCadena, nCaracteres, 1) == CHR(13) .OR. ;
SUBSTR(cCadena, nCaracteres+1, 1) == CHR(13)
* El último carácter o el primero del siguiente es justo
* un espacio en blanco o un retorno de carro
IF SUBSTR(cCadena, nCaracteres, 1) == CHR(13)
AADD(aTexto, PADR(LEFT(cCadena, nCaracteres-1), nCaracteres))
cCadena := LTRIM(SUBSTR(cCadena, nCaracteres))
ELSE
AADD(aTexto, PADR(LEFT(cCadena, nCaracteres), nCaracteres))
cCadena := LTRIM(SUBSTR(cCadena, nCaracteres + 1))
ENDIF
ELSE
nCont := nCaracteres
lMuyLarga := .T.
WHILE --nCont > 0
IF SUBSTR(cCadena, nCont, 1 ) == ' ' .OR. ;
SUBSTR(cCadena, nCont, 1 ) == CHR(13)
IF nCont == 1
IF SUBSTR(cCadena, nCont, 1) == CHR(13)
AADD(aTexto, SPACE(nCaracteres))
cCadena := LTRIM(SUBSTR(cCadena, 3))
ELSE
cCadena := LTRIM(SUBSTR(cCadena, 2))
ENDIF
ELSE
IF SUBSTR(cCadena, nCont, 1 ) == CHR(13)
AADD(aTexto, PADR(LEFT(cCadena, nCont-1), nCaracteres))
cCadena := LTRIM(SUBSTR(cCadena, nCont))
ELSE
AADD(aTexto, PADR(LEFT(cCadena, nCont), nCaracteres))
cCadena := LTRIM(SUBSTR(cCadena, nCont + 1))
ENDIF
lMuyLarga := .F.
ENDIF
EXIT
ENDIF
ENDDO
IF lMuyLarga
AADD(aTexto, PADR(LEFT(cCadena, nCaracteres), nCaracteres))
cCadena := LTRIM(SUBSTR(cCadena, nCaracteres + 1))
ENDIF
ENDIF
ENDIF
ENDDO
ELSE
AADD(aTexto, cCadena)
ENDIF
ELSE
AADD(aTexto, '')
ENDIF
RETURN(aTexto)
**********
AYUDA CON FUNCION
Moderador: Moderadores
AYUDA CON FUNCION
Ante todo gracias por contestar:
La funcion en si seria Funcion(nombrevar,n), nonbrevar el nombre de la variable de texto, y n la longitud de esta variable,
ejemplo: me creo una variable de texto de longitud 30, en ella escribo "hola que tal estas", la longitud de este testo es 18, entonces aplicandole la funcion quedaria asi, "hola que tal estas", como lo haria un editor de texto.repartiendo los espacios en blanco sobrantes por la derecha entre las palabras y ajustando la ultima palabra por la derecha.
Perdona si no me explico bien
Gracias de nuevo.
La funcion en si seria Funcion(nombrevar,n), nonbrevar el nombre de la variable de texto, y n la longitud de esta variable,
ejemplo: me creo una variable de texto de longitud 30, en ella escribo "hola que tal estas", la longitud de este testo es 18, entonces aplicandole la funcion quedaria asi, "hola que tal estas", como lo haria un editor de texto.repartiendo los espacios en blanco sobrantes por la derecha entre las palabras y ajustando la ultima palabra por la derecha.
Perdona si no me explico bien
Gracias de nuevo.