FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para CA-Clipper Dos cuestiones de C
Posts: 219
Joined: Mon Dec 26, 2005 07:25 PM
Dos cuestiones de C
Posted: Fri Nov 24, 2006 09:04 PM
Este es el código en C que utilizo para escribir palabras sin accentos:

#include <winten.h>
#include <windows.h>
#include <clipapi.h>

LPSTR Mayusculas( LPSTR szText, WORD lSize )
{
int i = 0 ;
for( i=0; i < lSize; i++ )
{
if ( szText[i] >= 'a' && szText[i] <= 'z' )
szText[i] -= ( 'a' - 'A' ) ;
}
return( szText ) ;
}

LPSTR SinEspa( LPSTR szText, LPWORD pwLen )
{
WORD nDesde = 0 ;
WORD nHasta = *pwLen ;

while( szText[nDesde] == ' ' && nDesde < nHasta )
++nDesde ;

while( szText[nHasta-1] == ' ' && nHasta > nDesde ) // nHasta-1 PORQUE EMPIEZA POR 0
--nHasta ;

*pwLen = nHasta - nDesde ;

return szText+nDesde ;
}


CLIPPER TransDat( PARAMS ) // ( LPSTR cText, BOOL lMayusculas = .T.)
{
WORD hancho = _parclen( 1 ) ;
LPSTR cText = SinEspa( _parc( 1 ), &hancho ) ;
BOOL lMayus = IF( PCOUNT() == 1, TRUE, _parl(2) ) ;
LPSTR desde, hasta ;
int i,j,k ;

if( lMayus )
{
desde = "ÁÉÍÓÚÜáéíóúü-,." ;
hasta = "AEIOUUaeiouu " ;
k = 15 ;
}
else
{
desde = "ÁÉÍÓÚÜáéíóúü" ;
hasta = "AEIOUUaeiouu" ;
k = 12 ;
}

i = 0 ;
while( i < hancho )
{
for ( j=0; j < k; j++ )
{
if (cText[i] == desde[j])
{
cText[i] = hasta[j] ;
break ;
}
}
i++ ;
}
if ( lMayus )
_retclen( Mayusculas(cText, hancho), hancho ) ;
else
_retclen( cText, hancho ) ;
}

Funciona perfectamente, no obstante me surgen dos cuestiones que no consigo resolver.

1º) Indices

Con TLIB incluí esas funciones en Five.Lib para intentar utllizarlas a la hora de reindexar mis Bases de datos. funcionan muy bien en cualquier parte de mi programa, pero con los índices no cuela. Ni tal cual, ni como macro, ni nada... ¿Hay alguna forma de conseguirlo?

2º) Funciones Externas

Como veran, he tenido que rehacer las funciones ALLTRIM y UPPER porque no sé como utilizar las ya existentes en FW. ¿Alguien sabría decirme como hacerlo?

Por cierto, ahora que caigo, funcionaría: k = sizeof( nDesde ), no lo he intentado.

Muchas gracias por adelantado.
Nos Gusta Programar

Continue the discussion