Ajuda com lógica

23/07/2008

1

Estou fazendo um programa para varrer um arquivo texto grande e pegar algumas informaçoes. Essas informações eu acumulo em variáveis e depois descarrego num arquivo texto formatado segundo a nossa regra. A questão é a seguinte: Só posso descarregar, quando todas as variáveis forem carregadas. Qual a melhor forma de fazer, ou seja, controlar? Não posso declarar uma variável booleana e fazer assim:
varbool := (var1 <> ´´) and (var2 <> ´´) and (var3 <> ´´), pois são muitas variáveis e ficará muito feio o código e ilegível. Se eu declara uma variável Integer e for somando em cada variável carregada, também não ficaria legal. Então pergunto: Tem uma forma limpa de fazer isso? São umas 30 variáveis que após o descarregar são zeradas.


Responder

Posts

23/07/2008

Aroldo Zanela

Colega,

Eu usaria um contador mesmo. Mas uma outra alternativa que não necessita empregar um grande esforço seria usando vetor ou matriz. Veja um exemplo que preparei:

var
  Vars: array[1..3] of string;
  I: Integer;
  Pronto: Boolean;
begin

  Vars[1] := ´sskdkçskk çsk skççskdçaskdçk´;
  Vars[2] := ´jjjjjjjjjjj´;

  for I := 1 to 3 do
  begin
    if Vars[I]=´´ then
    begin
      Pronto := False;
      Break;
    end;
  end;

  if not Pronto then
  begin
    Application.MessageBox(´O ciclo de processamento não está finalizado.´,
      ´Erro´, MB_OK + MB_ICONSTOP + MB_DEFBUTTON2);

  end;


end;



Responder

23/07/2008

Paulo

Entendi. Cada posição do Array seria uma variável minha e a var pronto só seria carregado em True com todas as posições do Array carregado. É, vou tentar assim, mas estou ´tentado´ a fazer com a var Integer, mas vou tentar dessa forma.


Responder

23/07/2008

Aroldo Zanela

Olá Paulo,

Visando melhorar a legibilidade e elegância do código, fiz uma pequena alteração com uma função de array aberto. Veja:

procedure TForm1.btn1Click(Sender: TObject);
var
  Vars: array[1..3] of string;
  I: Integer;
  Pronto: Boolean;
begin

  Vars[1] := ´sskdkçskk çsk skççskdçaskdçk´;
  Vars[2] := ´jjjjjjjjjjj´;

  if not CicloCompleto(Vars) then
    Application.MessageBox(´O ciclo de processamento não está finalizado.´,
      ´Erro´, MB_OK + MB_ICONSTOP + MB_DEFBUTTON2);

end;

function CicloCompleto(Vars: array of string): Boolean;
var I: SmallInt;
begin
  Result := True;
  for I := Low(Vars) to High(Vars) do
  begin
    if Vars[I]=´´ then
    begin
      Result := False;
      Break;
    end;
  end;
end;



Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira