Sustiturir vocales acentuadas SOLUCIONADO

Sustiturir vocales acentuadas SOLUCIONADO

Postby pgfdz » Tue Oct 18, 2016 6: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
Last edited by pgfdz on Tue Oct 18, 2016 2:49 pm, edited 2 times in total.
Paco García
pgfdz
 
Posts: 145
Joined: Wed Nov 03, 2010 9:16 am

Re: Sustiturir vocales acentuadas

Postby jrestojeda » Tue Oct 18, 2016 12:00 pm

Hola,
Probá esto:

Code: Select all  Expand view
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: Select all  Expand view
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,
Last edited by jrestojeda on Tue Oct 18, 2016 7:21 pm, edited 1 time in total.
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
User avatar
jrestojeda
 
Posts: 583
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: Sustiturir vocales acentuadas

Postby jbrita » Tue Oct 18, 2016 1:59 pm

mira esto si te sirve

viewtopic.php?p=4645

saludos
jbrita
 
Posts: 486
Joined: Mon Jan 16, 2006 3:42 pm

Re: Sustiturir vocales acentuadas

Postby pgfdz » Tue Oct 18, 2016 2: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: Select all  Expand view

#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
pgfdz
 
Posts: 145
Joined: Wed Nov 03, 2010 9:16 am

Re: Sustiturir vocales acentuadas SOLUCIONADO

Postby Carles » Wed Oct 19, 2016 8: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
Skype -> https://join.skype.com/cnzQg3Kr1dnk
User avatar
Carles
 
Posts: 1090
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona

Re: Sustiturir vocales acentuadas SOLUCIONADO

Postby karinha » 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
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Sustiturir vocales acentuadas SOLUCIONADO

Postby Carles » 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
Skype -> https://join.skype.com/cnzQg3Kr1dnk
User avatar
Carles
 
Posts: 1090
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 60 guests