Ajuda com lógica
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.
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.
Paulo
Curtidas 0
Respostas
Aroldo Zanela
23/07/2008
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:
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;
GOSTEI 0
Paulo
23/07/2008
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.
GOSTEI 0
Aroldo Zanela
23/07/2008
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:
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;
GOSTEI 0