Clipper/FiveWin - LA REPITO POR SI ALGUN@ ME PUEDE AYUDAR

 
Vista:

LA REPITO POR SI ALGUN@ ME PUEDE AYUDAR

Publicado por ANTONIO (222 intervenciones) el 05/05/2007 10:35:54
No me funciona me da error. solo queria una funcion que repartiese los espacios en blanco de las lineas de un campo memo, entre todas las palabras, de forma que quedase ajustada la linea por la derecha, como los procesadores de texto.

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)

**********
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:LA REPITO POR SI ALGUN@ ME PUEDE AYUDAR

Publicado por Elias Esquivel (18 intervenciones) el 20/06/2007 20:39:00
que mensaje de error te sale...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar