Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-11-2008
Avatar de Sr.Scorpion
Sr.Scorpion Sr.Scorpion is offline
Miembro
 
Registrado: mar 2005
Posts: 92
Poder: 20
Sr.Scorpion Va por buen camino
Lightbulb Buscar con comodines # ó * en una string

Hola:

Tengo la siguiente cadena:
11/17/08 09:45AM 126 01 2079775103 00:08'33 3040

Quisiera implementar una funcion a la cual... le pase como parametro la cadena anterior y el termino a buscar sea ##/##/## me devuelva 11/17/08, si le pongo como parametro a buscar ##:##** me devuelva 09:45AM (La simbologia # solo me busca numeros, la simbologia * me busca cualquier caracter). Si entro ## me devuelve 01, si entro #### me devuelve 3040.. y asi sucesivamente

Para mi esto resulta mas que complicado hacerlo a base ciclos whiles.. etc etc... por lo q no tengo ninguna idea de como empezar.... alguien pudiera sugerirme algo ???

OJO: La cadena puede tener ese orden pero tambien puede cambiar de posicion es decir la fecha de ultimo.... la hora tambien etc.

Saludos
__________________
La paciencia es un árbol de raíz amarga pero de frutos muy dulces.

Sr.Scorpion
Responder Con Cita
  #2  
Antiguo 26-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola Scorpion, lo que se me ocurre es esto, la función no esta bien controlada y talvez tenga varios errores, como te digo solo es una idea.

Solo toma en cuenta # para las llamadas.

Código Delphi [-]
function Buscar(cadena, formato : String): String;
var
 Indice : Integer;
 sl, slFormato : TStringList;
begin
 sl := TStringList.Create;
 slFormato := TStringList.Create;
 
 sl.DelimitedText := cadena;
 
 for i:=1 to Length(cadena) do
  if cadena[i] in ['0'..'9','A'..'Z'] then
   cadena := StringReplace(cadena,cadena[i],'#',[rfReplaceAll]);
 
 slFormato.DelimitedText := cadena;
 
 Indice := slFormato.IndexOf(formato);

 if Indice>=0 then
  Result := sl[Indice]
 else
  Result := 'No existe';
end;
 
.....................
 cadena := '11/12/08 09:45AM 126 01 2079775103 00:08''33 3040';
 showmessage(Buscar(cadena, '##/##/##'));
 showmessage(Buscar(cadena, '##:####'));

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 26-11-2008
Avatar de Sr.Scorpion
Sr.Scorpion Sr.Scorpion is offline
Miembro
 
Registrado: mar 2005
Posts: 92
Poder: 20
Sr.Scorpion Va por buen camino
Bueno he probado por arribita .. y hasta ahora todo ok... la estoy revisando ahora con mas calma.... no obstante mis reverencias..
__________________
La paciencia es un árbol de raíz amarga pero de frutos muy dulces.

Sr.Scorpion
Responder Con Cita
  #4  
Antiguo 26-11-2008
Avatar de Sr.Scorpion
Sr.Scorpion Sr.Scorpion is offline
Miembro
 
Registrado: mar 2005
Posts: 92
Poder: 20
Sr.Scorpion Va por buen camino
Cita:
Empezado por Caro Ver Mensaje
Hola Scorpion, lo que se me ocurre es esto, la función no esta bien controlada y talvez tenga varios errores, como te digo solo es una idea.

Solo toma en cuenta # para las llamadas.

Código Delphi [-]function Buscar(cadena, formato : String): String; var Indice : Integer; sl, slFormato : TStringList; begin sl := TStringList.Create; slFormato := TStringList.Create; sl.DelimitedText := cadena; for i:=1 to Length(cadena) do if cadena[i] in ['0'..'9','A'..'Z'] then cadena := StringReplace(cadena,cadena[i],'#',[rfReplaceAll]); slFormato.DelimitedText := cadena; Indice := slFormato.IndexOf(formato); if Indice>=0 then Result := sl[Indice] else Result := 'No existe'; end; ..................... cadena := '11/12/08 09:45AM 126 01 2079775103 00:08''33 3040'; showmessage(Buscar(cadena, '##/##/##')); showmessage(Buscar(cadena, '##:####'));


Saluditos

Por ejemplo si en la fecha pongo '##/##' me dice q no existe... hay otra funcion q no sea Indexof q busca por lo menos parte de la cadena ???

Saludos
__________________
La paciencia es un árbol de raíz amarga pero de frutos muy dulces.

Sr.Scorpion
Responder Con Cita
  #5  
Antiguo 26-11-2008
Avatar de Sr.Scorpion
Sr.Scorpion Sr.Scorpion is offline
Miembro
 
Registrado: mar 2005
Posts: 92
Poder: 20
Sr.Scorpion Va por buen camino
Bueno aqui he hecho un procedimiento q se acerca bastante a lo q quiero, me imagino q se pueda simplificar y pulir un poco mas

Código Delphi [-]
function Buscar2(Cadena, formato: string): string;
var
I, J : Integer;
SubCad: string;
begin
J:=0;
for i:=1 to Length(cadena) do
begin
inc(J);
  if formato[j] = '#' then
   if cadena[i] in ['0'..'9'] then SubCad:= SubCad + cadena[i]
   else
    begin
     SubCad:='';
     J:=0;
    end;
  if formato[j] = '*' then
   if cadena[i] in ['A'..'Z'] then SubCad:= SubCad + cadena[i]
   else
    begin
     SubCad:='';
     J:=0;
    end;
  if (formato[j] <> '#') and (formato[j] <> '*') then
    if formato[j] = cadena [i] then SubCad:= SubCad + cadena[i]
    else
    begin
     SubCad:='';
     J:=0;
    end;
 if (j >= Length(formato)) and (cadena[i+1]=' ') Then break
end;
Result:=SubCad;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(Buscar2(Edit1.Text, '##:##**'));
end;

La cadena seria:
11/17/08 09:45AM 126 01 2079775103 00:08'33 3040

Por lo q mostraria 09:45AM

Saludos
__________________
La paciencia es un árbol de raíz amarga pero de frutos muy dulces.

Sr.Scorpion
Responder Con Cita
  #6  
Antiguo 26-11-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Se me ocurre algo así (hecho de memoria y todavía no probado ):

Código Delphi [-]
function SearchFor(const Str, SearchFormat: string): string;
var
  I: Intetger;
  Temp: string;

begin
  for I := 0 to Length(Str) do
    if (Str[i] in ['0'..'9', 'A'..'Z'] then
      Temp := StringReplace(Str, Str[i], '#', [rfReplaceAll]);
  I := Pos(SearchFormat, Str);
  if I > 0 then
    Result := Copy(Str, I, Length(SearchFormat))
  else
    Result := ''
end;


Saludos...
Responder Con Cita
  #7  
Antiguo 28-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por Sr.Scorpion Ver Mensaje
Bueno aqui he hecho un procedimiento q se acerca bastante a lo q quiero, me imagino q se pueda simplificar y pulir un poco mas


Código Delphi [-]
function Buscar2(Cadena, formato: string): string;
var
I, J : Integer;
SubCad: string;
begin
J:=0;
for i:=1 to Length(cadena) do
begin
inc(J);
if formato[j] = '#' then
if cadena[i] in ['0'..'9'] then SubCad:= SubCad + cadena[i]
else
begin
SubCad:='';
J:=0;
end;
if formato[j] = '*' then
if cadena[i] in ['A'..'Z'] then SubCad:= SubCad + cadena[i]
else
begin
SubCad:='';
J:=0;
end;
if (formato[j] <> '#') and (formato[j] <> '*') then
if formato[j] = cadena [i] then SubCad:= SubCad + cadena[i]
else
begin
SubCad:='';
J:=0;
end;
if (j >= Length(formato)) and (cadena[i+1]=' ') Then break
end;
Result:=SubCad;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(Buscar2(Edit1.Text, '##:##**'));
end;


La cadena seria:
11/17/08 09:45AM 126 01 2079775103 00:08'33 3040

Por lo q mostraria 09:45AM

Saludos

Hola de nuevo, yo no lo haría así, funciona, pero talvez podría fallar en algunos casos, ademas si fuera así tendrías que aumentar mas y mas condiciones, en la función que te he mandado era solo aumentar dos lineas para cambiar las letras por el *, pero claro no funciona con subcadenas dentro cada palabra "##/##" y tu función tampoco funciona para ese caso.

Lo mejor es que uses el Pos para buscar subcadenas, como te ha indicado mayanes, corrigiendo algunos errores de su función y aumentando para que funcione con el *, quedaría así:

Código Delphi [-]
function SearchFor(const Str, SearchFormat: string): string;
var
  I: Integer;
  Temp: string;
begin
  Temp := Str;
  for I := 0 to Length(Temp) do
   begin
    if (Temp[i] in ['0'..'9']) then
      Temp := StringReplace(Temp, Temp[i], '#', [rfReplaceAll]);
    if (Temp[i] in ['A'..'Z']) then
      Temp := StringReplace(Temp, Temp[i], '*', [rfReplaceAll]);
   end;

  I := Pos(SearchFormat, Temp);
  if I > 0 then
    Result := Copy(Str, I, Length(SearchFormat))
  else
    Result := ''
end;
 
cadena := '11/12/08 09:45AM 126 01 2079775103 00:08''33 3040';
showmessage(SearchFor(cadena, '##:##**'));

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Buscar TAB en un string unreal4u Varios 4 13-07-2012 23:13:27
Buscar substring en string con IndexOf? Belaix Varios 3 12-11-2008 22:22:31
Buscar un string dentro de otro FunBit Varios 2 27-01-2006 14:45:16
Buscar String en AArchivo de texto!!! DB-ADO Varios 2 18-03-2005 16:02:32
Buscar palabra en una String diegofhernando Varios 10 23-05-2003 02:33:13


La franja horaria es GMT +2. Ahora son las 10:04: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