Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Convertir una cadena a una abreviación (https://www.clubdelphi.com/foros/showthread.php?t=79722)

NeoNew 03-08-2012 20:23:30

Convertir una cadena a una abreviación
 
Buen dia.
Gracias a quien me pueda ayudar o si ya esta este tema me pueda indicar el link.

Quiero manejar un estandar al hacer la captura de direcciones de una casa,... es decir
Al hacer la captura de una dirección:
calle 140 Numero 48-50 edificio Torres alfa Piso 2 apartamento 203 barrio fuentes.
lo vaya convirtiendo y/o al final quede.
CLL. 140 # 48-50 ED. Torres alfa P. 2 AP. 203 BRR. fuentes

Con lo anterior pretendo que la columna dirección de mi DB sea lo mas ordenada y standar posible.


Gracias de nuevo.

NeoNew

Editado:
Cuento con una tabla de convenciones asi:

CLL Calle
AV Avenida
BRR Barrio
# Numero
AP Apartamento
AER Aeropuerto
BL Bloque
CA Casa
P Piso
...
..
.

ecfisa 03-08-2012 20:39:23

Hola.

Supongo que podrías hacer:
Código Delphi [-]
procedure Abreviar(var Cadena: string);
begin
  Cadena:= StringReplace(Cadena,'calle','CLL.',[rfReplaceAll]);
  Cadena:= StringReplace(Cadena,'edificio','ED.',[rfReplaceAll]);
  Cadena:= StringReplace(Cadena,'apartamento','AP.',[rfReplaceAll]);
  Cadena:= StringReplace(Cadena,'barrio','BRR.',[rfReplaceAll]);
  ... // mas reemplazos (si hay)
end;

Saludos.

ecfisa 03-08-2012 20:46:32

Hola.

Veo que agregaste información luego de mi mensaje.

Entonces sería:
Código Delphi [-]
procedure Abreviar(var Cadena: string);
begin
  Cadena:= StringReplace(Cadena, 'Calle', 'CLL.', [rfReplaceAll]);
  Cadena:= StringReplace(Cadena, 'Edificio', 'ED.', [rfReplaceAll]);
  Cadena:= StringReplace(Cadena, 'Apartamento', 'AP.', [rfReplaceAll]);
  Cadena:= StringReplace(Cadena, 'Barrio', 'BRR.', [rfReplaceAll]);
  Cadena:= StringReplace(Cadena, 'Avenida', 'AV.', [rfReplaceAll]);
  Cadena:= StringReplace(Cadena, 'Numero', '#.', [rfReplaceAll]);
  Cadena:= StringReplace(Cadena, 'Aeropuerto', 'AER.', [rfReplaceAll]);
  Cadena:= StringReplace(Cadena, 'Bloque', 'BL.', [rfReplaceAll]);
  Cadena:= StringReplace(Cadena, 'Case', 'CA.', [rfReplaceAll]);
  Cadena:= StringReplace(Cadena, 'Piso', 'P.', [rfReplaceAll]);
end;

Ejemplo de llamada:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  str: string;
begin
  str:= 'calle 140 Numero 48-50 edificio Torres alfa Piso 2 apartamento 203 barrio fuentes.';
  Abreviar(str);
  Caption:= str;
  ...
end;

Saludos.

NeoNew 03-08-2012 20:47:21

Gracias por la ExtraRápida y pronta respuesta.
Lo implementare.

ecfisa 03-08-2012 22:42:50

Hola NeoNew.

Cuando agregaste "Cuento con una tabla de convenciones...", me quedé pensando que quizá sea muy larga la lista de abreviaturas y del modo anterior te resultaría un poco tedioso...

Si ya tenes una tabla creada, podrías hacer:
Código Delphi [-]
...
implementation  

// (también podrías declararlas como privadas)
var
  FPalabra: TStrings;
  FAbrev: TStrings;

// Abrir tabla de abreviaturas y cargar 
procedure TForm1.FormCreate(Sender: TObject);
begin
  FPalabra:= TStringList.Create;
  FAbrev:= TStringList.Create;
  with tbAbreviaturas do
  begin
    Open;
    while not eof do
    begin
      FPalabra.Add(FieldByName('Palabra').AsString);
      FAbrev.Add(FieldByName('Abreviat').AsString);
      Next;
    end;
    Close;
  end;
end;

// Obtener abreviaturas
function TForm1.Abreviar(const Texto: string): string;
var
  i,ix: Integer;
begin
  Result:= Texto;
  with TStringList.Create do
  try
    Delimiter:= ' ';
    DelimitedText:= Texto;
    for i:= 0 to Count-1 do
    begin
      ix:= FPalabra.IndexOf(Strings[i]);
      if ix <>-1 then
        Result:= StringReplace(Result, Strings[i],FAbrev[ix],[]);
    end;
  finally
    Free;
  end;
end;

// Ejemplo de llamada
procedure TForm1.Button1Click(Sender: TObject);
begin
  Label2.Caption:= Abreviar(Label1.Caption)
end;

...

// Liberar
procedure TForm1.FormDestroy(Sender: TObject);
begin
  if Assigned(FPalabra) then
    FPalabra.Free;
  if Assigned(FAbrev) then
    FAbrev.Free;
end;

Saludos.


La franja horaria es GMT +2. Ahora son las 09:58:51.

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