Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Dudas con Array (https://www.clubdelphi.com/foros/showthread.php?t=70923)

Paulao 19-11-2010 17:09:43

Dudas con Array
 
Tengo esta funcion. Ella tiene que me decir si es o no feriado en una determinada fecha. Puzo los feriados fijos y nacionales en un Array. Hizo un decodedate para tener el dia y mes. Entonces comparo lo campos del Array con esta variable y saber si es o no feriado. Que pasa es que no consigo hacer una atribuicion se la variable String con el campo del array. Vea mi codigo:
function
Código Delphi [-]
TFormula.EferiadoFixo(Data: TDateTime): Boolean;
var
  ano,mes,dia: word;
  diames : String;
  dferiado: Array[0..7] of String;
begin
  dferiado[0] := '01/01';
  dferiado[1] := '21/04';
  dferiado[2] := '01/05';
  dferiado[3] := '07/09';
  dferiado[4] := '12/10';
  dferiado[5] := '02/11';
  dferiado[6] := '15/11';
  dferiado[7] := '25/12';
  DecodeDate(Data,ano,mes,dia);
  diames := IntToStr(dia) + '/' + IntToStr(mes);
  if diames = dferiado then // El error estas aca
    Result := True;
end;

Caro 19-11-2010 17:29:05

Hola Paulao, no puedes comparar directamente tu String con tu array, tienes que hacer una busqueda en tu array:

Código Delphi [-]
  dferiado: Array[0..7] of String;
begin
  Result := False;
  dferiado[0] := '01/01';
  dferiado[1] := '21/04';
  dferiado[2] := '19/11';
  dferiado[3] := '07/09';
  dferiado[4] := '12/10';
  dferiado[5] := '02/11';
  dferiado[6] := '15/11';
  dferiado[7] := '25/12';
  DecodeDate(Data,ano,mes,dia);
  diames := IntToStr(dia) + '/' + IntToStr(mes);
  for i:=0 to High(dferiado) do
   if diames = dferiado[i] then 
    begin
     Result := True;
     exit;
    end;
end;

Saluditos

Caro 19-11-2010 17:35:26

Hola de nuevo, también puedes utilizar un StringList para llenar la lista de feriados, el cual lo llenas solo al principio (osea no dentro de tu función), porque de la forma que esta cada ves que llamas a tu función llenas nuevamente tu arreglo y para buscar utilizas la función IndexOf.

Saluditos

Paulao 19-11-2010 18:05:36

Hola, Caro, ya tenio hizo asi y no funciono. cambie la fecha de mi computadora para 02/11/2010 y no funciono, pues deberia traer True el result y está como false. Ve mi codigo abajo:
Código Delphi [-]
function TFormula.EferiadoFixo(Data: TDateTime): Boolean;
var
  ano,mes,dia: word;
  diames : String;
  dferiado: Array[0..7] of string;
  i: integer;
begin
  Result := False;
  dferiado[0] := '01/01';
  dferiado[1] := '21/04';
  dferiado[2] := '01/05';
  dferiado[3] := '07/09';
  dferiado[4] := '12/10';
  dferiado[5] := '02/11';
  dferiado[6] := '15/11';
  dferiado[7] := '25/12';
  DecodeDate(Data,ano,mes,dia);
  diames := IntToStr(dia) + '/' + IntToStr(mes);
  for i := 0 to high(dferiado) do
    if diames = dferiado[i] then
      Result := True;
end;

Paulao 19-11-2010 18:16:52

Resolvi. El problema era que quando el dia del mes era meno que 10, entonces la variable diames quedava asi:
2/11 y el array era 02/11
Puzo un zero a la izquierda y funciono. Gracias a Caro y a los demas.


La franja horaria es GMT +2. Ahora son las 18:45:14.

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