Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-01-2007
Deiv Deiv is offline
Miembro
 
Registrado: jul 2005
Ubicación: La Paz - Bolivia
Posts: 364
Poder: 19
Deiv Va por buen camino
Arrow Quitar Vocales repetidas de una Cadena

Hola,
¿Cuál sería la Función para quitar vocales repetidas (unidas) de una cadena de manera que se convierta en una sola?
Por ejemplo:

'Arribaa en la mooontaña se divisabaa una llama que reecorría su traayectoo'

El resultado debe ser

'Arriba en la montaña se divisaba una llama que recorría su trayecto'

En realidad las consonantes no deben afectarse, solo las vocales repetidas (seguidas).
Pregunto a manera de practicar y saber como aplicarlo para el objetivo que tengo. Ya sé que por ejemplo si se quita a "Coordinado" se vería mal como "Cordinado", pero como dije otro es el objetivo, y me bastará con vuestras orientaciones de las vocales para darme cuenta.
Deiv
Responder Con Cita
  #2  
Antiguo 12-01-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Deiv
¿Cuál sería la Función para quitar vocales repetidas (unidas) de una cadena de manera que se convierta en una sola?
¿Quieres una orientación? o ¿Quieres que te la demos escrita?

Como orientación yo te diría que realices un recorrido utilizando un FOR, que uses dos variables para almacenar la vocal actual (a) y la vocal anterior (n) y una cadena destino (res); Con un IF dentro para comprobar si (a) es = a (n) y en ese caso la vocal actual no se debe guardar en la cadena destino, en caso contario sí.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 12-01-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
No es el algoritmo mas eficiente, pero es eficaz

Código Delphi [-]
function Reducir(Str: string; C: Char): String;
begin
  while Pos(C+C, Str) > 0 do
    Str:= StringReplace(Str,C+C,C,[rfReplaceAll]);
  Result:= Str;
end;

var
  Vocales: String;
  i: integer;
  Str: String;
begin
  Vocales:= 'aeiouAEIOU';
  Str:= 'Arribaa en la mooontaña se divisabaa una llama que reecorría su traayectoo';
  for i:= 1 to length(Vocales) do
    Str:= Reducir(Str,Vocales[i]);
  ShowMessage(Str);
end;
Responder Con Cita
  #4  
Antiguo 12-01-2007
Deiv Deiv is offline
Miembro
 
Registrado: jul 2005
Ubicación: La Paz - Bolivia
Posts: 364
Poder: 19
Deiv Va por buen camino
Wink

Gracias Seoane,
Siempre tan gentil, no conocía esa función en Delphi 7.

Última edición por Deiv fecha: 12-01-2007 a las 23:00:05.
Responder Con Cita
  #5  
Antiguo 12-01-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Neftali
¿Quieres una orientación? o ¿Quieres que te la demos escrita?
Creo que ha quedado claro
Responder Con Cita
  #6  
Antiguo 12-01-2007
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por Deiv
Gracias Seoane,
Siempre tan gentil, no conocía esa función en Delphi 7.
No la conocías simplemente porque no existía, hasta que Seoane la escribió.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #7  
Antiguo 12-01-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Volviendo a la idea de Neftali, que al contrario que la mía si que era eficiente además de eficaz , tendríamos esto otro:

Código Delphi [-]
function Reducir(Str: String): String;
var
  C: Char;
  i: integer;
begin
  C:= #0;
  Result:= EmptyStr;
  for i:= 1 to Length(Str) do
  begin
    if pos(Str[i],'aeiouAEIOU') > 0 then
    begin
      if Str[i] <> C then
        Result:= Result + Str[i];
    end else
      Result:= Result + Str[i];
    C:= Str[i];
  end;
end;

var
  Str: String;
begin
  Str:= 'Arribaa en la mooontaña se divisabaa una llama que reecorría su traayectoo';
  ShowMessage(Reducir(Str));
end;
Responder Con Cita
  #8  
Antiguo 12-01-2007
Deiv Deiv is offline
Miembro
 
Registrado: jul 2005
Ubicación: La Paz - Bolivia
Posts: 364
Poder: 19
Deiv Va por buen camino
Thumbs up

Gracias Seoane ambas funcionan bien
Cita:
Empezado por Ñuño Martínez
No la conocías simplemente porque no existía, hasta que Seoane la escribió.
EDITO: no conocía la función: StringReplace
.
Responder Con Cita
  #9  
Antiguo 28-07-2007
Frankus Frankus is offline
No confirmado
 
Registrado: jul 2007
Posts: 11
Poder: 0
Frankus Va por buen camino
Cadenas Repetidas n SQL 2005

Como hago lo mismo pero con sentencias SQL??
Eliminar datos con letras repetidas mas de 5 veces
Responder Con Cita
  #10  
Antiguo 30-07-2007
adfa adfa is offline
Miembro
 
Registrado: may 2003
Ubicación: Montevideo-Uruguay
Posts: 119
Poder: 21
adfa Va por buen camino
A ver que les parece esta opción

Con conjuntos me gusto.

Código Delphi [-]
function TForm1.sacarVocalesRepetidas(texto: string): string;
var
  i: integer;
  vocales: set of char;
  ant: char;
begin
  ant     := #0;
  vocales := ['a', 'e', 'i' ,'o' ,'u','A','E','I','O','U'];
  result  := '';
  for i := 1 to length(texto) do
  begin
    if not (texto[i] in vocales) then
      result := result + texto[i]
      else
      if texto[i] <> ant then result := result + texto[i];
    ant := texto[i];
  end;
end;

Saludos

Última edición por adfa fecha: 30-07-2007 a las 21:36:37.
Responder Con Cita
  #11  
Antiguo 30-07-2007
Frankus Frankus is offline
No confirmado
 
Registrado: jul 2007
Posts: 11
Poder: 0
Frankus Va por buen camino
Sql?

Bueno creo q no saben bien sobre SQL... su especialidad es Delphi ya bueno, gracias por todo .. Nos vmos Foro
Cya
Responder Con Cita
  #12  
Antiguo 30-07-2007
adfa adfa is offline
Miembro
 
Registrado: may 2003
Ubicación: Montevideo-Uruguay
Posts: 119
Poder: 21
adfa Va por buen camino
Cita:
Empezado por Frankus
Bueno creo q no saben bien sobre SQL... su especialidad es Delphi ya bueno, gracias por todo .. Nos vmos Foro
Cya
En mi caso es probable que tengas razón y sepa poco de sql (bueno de Delphi tambien pero en fin...).
Despues que postee me di cuenta que el tema era muy viejo y que vos lo reviviste con lo del sql.

Hasta donde yo se solo con sql no se puede, tendrías que programar un triger en la base de datos o alguna stored procedure en el lenguaje que soporte la base para hacerlo.
Si no tendrías que recorrerte la tabla utilizar alguna función como las que aqui aparecen (o en el lenguaje que uses, porque por tu comentario quiza no sea Delphi) e ir remplazando los campos de texto.

Saludos

Última edición por adfa fecha: 30-07-2007 a las 21:33:52.
Responder Con Cita
  #13  
Antiguo 30-07-2007
Angel Fernández Angel Fernández is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia - España
Posts: 141
Poder: 20
Angel Fernández Va por buen camino
Prueba con strman

Para hacer casi cualquier cosa con cadenas de texto, te recomiendo que te bajes la unidad strman.pas (en torry la encuentras) y eches un vistazo a la ayuda que trae. Es una utilidad libre y viene con fichero hlp de ayuda.
Concretamente, mira la función replace.
No dejes de mirar las posibilidades de strman. Yo ahora no puedo vivir sin ella.

Espero que te sirva de ayuda.

Un saludo.
Responder Con Cita
  #14  
Antiguo 31-07-2007
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por Frankus
Como hago lo mismo pero con sentencias SQL??
Eliminar datos con letras repetidas mas de 5 veces
Hasta donde sé, me temo que sólo con SQL no se puede hacer. Tal vez con alguna extensión como PL o así. De cualquier forma siempre puedes comprobar los datos desde Delphi.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Oracle conexion ñ y vocales áéíóú lento manu Conexión con bases de datos 0 13-11-2005 18:50:38
Trabalenguas con las Vocales!!! JELIRM Humor 0 27-07-2005 16:47:17
Quitar espacios al final de una cadena gescoto99 SQL 1 04-08-2004 00:02:43
Eliminar líneas repetidas de un memo DarkByte Varios 5 31-03-2004 21:44:14
Quitar caracter de una cadena Triton Firebird e Interbase 3 23-03-2004 17:59:07


La franja horaria es GMT +2. Ahora son las 21:35:29.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi