Cita:
Empezado por Sr.Scorpion
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