FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Sustiturir vocales acentuadas SOLUCIONADO
Posts: 145
Joined: Wed Nov 03, 2010 09:16 AM
Sustiturir vocales acentuadas SOLUCIONADO
Posted: Tue Oct 18, 2016 06:54 AM

Hola buenos días.

Estoy intentando hacer una función que sustituya las vocales acentuadas por sus correspondientes sin acentuar.
Es sencillo. Ahora lo que quiero es que además sea lo más rápido posible.

He probado varias formas.

  1. Recorrer carácter por carácter. comprobar y sustitir. (lento)
  2. Array con áéíóúÁÉÍÓÚ y 10 strtran de la cadena por aeiouAEIOU más rápido pero no suficiente

Me pregunto si alguien sabe traducir esto en expresiones regulares y si iría más rápido.

Un saludo

Paco García
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Re: Sustiturir vocales acentuadas
Posted: Tue Oct 18, 2016 12:00 PM
Hola,
Probá esto:

Code (fw): Select all Collapse
Function ReemplazarVocales(cCadena)
Local cRespuesta

cRespuesta:=STRTRAN(cCadena   ,"á","a")
cRespuesta:=STRTRAN(cRespuesta,"é","e")
cRespuesta:=STRTRAN(cRespuesta,"í","i")
cRespuesta:=STRTRAN(cRespuesta,"ó","o")
cRespuesta:=STRTRAN(cRespuesta,"ú","u")

cRespuesta:=STRTRAN(cRespuesta,"Á","A")
cRespuesta:=STRTRAN(cRespuesta,"É","E")
cRespuesta:=STRTRAN(cRespuesta,"Í","I")
cRespuesta:=STRTRAN(cRespuesta,"Ó","O")
cRespuesta:=STRTRAN(cRespuesta,"Ú","U")

Return cRespuesta


Otra usando Arrays:
Code (fw): Select all Collapse
Function ReemplazarVocales2(cCadena)
Local cRespuesta,N,aArray1,aArray2

aArray1:={"á","é","í","ó","ú","Á","É","Í","Ó","Ú"}
aArray2:={"a","e","i","o","u","A","E","I","O","U"}

cRespuesta:=cCadena

FOR N=1 TO LEN(aArray1)
   cRespuesta:=STRTRAN(cRespuesta,aArray1[N],aArray2[N])
NEXT

Return cRespuesta
//


Espero te sirva.
Saludos,
Ojeda Esteban Eduardo.

Buenos Aires - Argentina.

FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport

Skype: jreduojeda
Posts: 537
Joined: Mon Jan 16, 2006 03:42 PM
Re: Sustiturir vocales acentuadas
Posted: Tue Oct 18, 2016 01:59 PM

mira esto si te sirve

viewtopic.php?p=4645

saludos

Posts: 145
Joined: Wed Nov 03, 2010 09:16 AM
Re: Sustiturir vocales acentuadas
Posted: Tue Oct 18, 2016 02:38 PM
Hola, gracias por las respuestas.
Por mi parte utilicé un código que encontré en el foro y lo adapté: http://forums.fivetechsupport.com/viewtopic.php?p=139845

Code (fw): Select all Collapse
#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>
#include <hbapiitm.h>
#include <hbapierr.h>

HB_FUNC( UNACC )
{
   char * cData     = hb_parc( 1 );
   HB_ISIZ      nLen      = hb_parclen( 1 );
   HB_ISIZ      nPos = 0, nPosRet = 0, nVal;

   char         cElem;

   if( ! cData )
   {
      hb_errRT_BASE( EG_ARG, 3012, NULL,
                     HB_ERR_FUNCNAME, 1, hb_paramError( 1 ) );
      return;
   }

   if( ! nLen )
   {
      hb_retc_null();
      return;
   }
   
   
   while( nPos < nLen )
   {
   
      cElem = cData[ nPos ];

      if( cElem == 'á' )
      {
         cData[ nPosRet ] = 'a';
      }
      else if( cElem == 'é' )
      {
         cData[ nPosRet ] = 'e';
      }
      else if( cElem == 'í' )
      {
         cData[ nPosRet ] = 'i';
      }
      else if( cElem == 'ó' )
      {
         cData[ nPosRet ] = 'o';
      }
      else if( cElem == 'ú' )
      {
         cData[ nPosRet ] = 'u';
      }
      if( cElem == 'Á' )
      {
         cData[ nPosRet ] = 'A';
      }
      else if( cElem == 'É' )
      {
         cData[ nPosRet ] = 'E';
      }
      else if( cElem == 'Í' )
      {
         cData[ nPosRet ] = 'I';
      }
      else if( cElem == 'Ó' )
      {
         cData[ nPosRet ] = 'O';
      }
      else if( cElem == 'Ú' )
      {
         cData[ nPosRet ] = 'U';
      }
   
      nPosRet++;
      nPos++;
   
   }
   hb_storc( cData, 1 );
}


#pragma ENDDUMP


Trabaja sobre el mismo buffer que se recibe.

Un saludo
Paco García
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: Sustiturir vocales acentuadas SOLUCIONADO
Posted: Wed Oct 19, 2016 08:12 AM

paco,

Quizas hb_translate() te sirva --> https://github.com/vszakats/harbour-cor ... n/lang.txt

Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Sustiturir vocales acentuadas SOLUCIONADO
Posted: Wed Oct 19, 2016 11:58 AM
Carles wrote:paco,

Quizas hb_translate() te sirva --> https://github.com/vszakats/harbour-cor ... n/lang.txt


Carles, con harbour funciona perfecto. Con xHarbour no funciona?

Gracias, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: Sustiturir vocales acentuadas SOLUCIONADO
Posted: Wed Oct 19, 2016 12:02 PM
Hola,

karinha wrote:
Carles wrote:paco,

Quizas hb_translate() te sirva --> https://github.com/vszakats/harbour-cor ... n/lang.txt


Carles, con harbour funciona perfecto. Con xHarbour no funciona?

Gracias, saludos.


Solo uso Harbour desde hace años, lo siento. :-)
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix

Continue the discussion