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 >= 'a' && szText <= 'z' )
szText -= ( '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 == desde[j])
{
cText = 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.
Dos cuestiones de C
Dos cuestiones de C
Nos Gusta Programar