Dúvida de lógica

01/08/2008

1

Parafraseando um colega: Parece difícil, mas não é fácil não(Aroldo Zanela)
É o seguinte: Tenho um arquivo txt com um formato nosso aqui na empresa. Esse arquivo, os dois primeiros caracteres são numeros, que começam: 60,65,66,70,75 e 80.
Então inicio o meu While nesse arquivo com um
Readln(VarTexto,varstring);
Acontece, que a opção 80 pode te mais de um registro, logo eu criei uma StringList e fiz assim:
if ..... = ´80´ then begin loop := true; while loop do bgin StringList.Add(minha_string); Readln(VarTexto,varstring); if .... <> ´80´ then begin loop := false; break; end; end; end;

O que está passando é o seguinte: Logo após a linha 80, reinicia novamente com a linha 60. Ora, como eu estou dando um Readln na 80, ele vai logo para a 60 caso não haja mais registros. E faz algumas coisas e volta para o While principal. Lá eu inicio com um Readln... e então ele não pega as informações da linha 60, indo diretamente para a linha 65. Alguém sugere alguma coisa para evitar isso? Já coloquei o código para pegar a linha 60, após o Readln da linha 80, mas a minha variável para aquela situação, se enche de ´sujeira´, já que eu preciso gravar em banco logo após ele captar tudo. Preciso de uma luz, para resolver essa lógica. ATENÇÂO: Não existe problemas de sintaxe, erro, nada disso. É apenas lógica.


Responder

Posts

01/08/2008

Aroldo Zanela

Colega,

Não sei se entendi, mas fiz um pequeno arquivo:

Comecei a implementação, mas terei de sair agora. Vê se entende a minha idéia:

var Arquivo: TStringList;
    I, N: Integer;
    Tipo: Byte;
begin

  Arquivo := TStringList.Create;
  Arquivo.LoadFromFile(´d:\dados\ehlmer.txt´);

  N := Arquivo.Count-1;

  Tipo := 99;

  for I := 0 to N do
  begin
    if Tipo < StrToIntDef(Copy(Arquivo.Strings[I],1,2),0) then
    begin
      ProcessaRegistro60...
      ProcessaRegistro65...
      ...
      ProcessaRegistro80...
    end;
    Tipo := StrToIntDef(Copy(Arquivo.Strings[I],1,2),0);
    Case Tipo of
      60:;
      65:;
      66:;
      70:;
      75:;
      80:;
    end;
  end;
end;


Arquivo:

60asjdlajddjjljlsdjlajdla
65ajdajdlajdljadljaldjlajdlajdl
66adlajdajdljaldjlajdlajdljaldjaljdlajdlajdljaldjlajdla
70adçakdçakdçakdçkadkaçdkçakdç
75jdiajdoajdoouiuojsajdlajdladjla
80oaoidadjoajdoajdoajdoajdajdlajdqwenqeqlejqljeqljelqojoajcojcoj
80oeiepiqpiepiepqiepoqiepoiqeiqpeipqiep
80djosjsdojojojdjdojsodjosjdosjdosdjosd
80eriroieroieorieoiroeiroieorieoiroe
80eorieuu388438408340284082048028402840280480248028402840
60asjdlajddjjljlsdjlajdla
65ajdajdlajdljadljaldjlajdlajdl
66adlajdajdljaldjlajdlajdljaldjaljdlajdlajdljaldjlajdla
70adçakdçakdçakdçkadkaçdkçakdç
75jdiajdoajdoouiuojsajdlajdladjla
80oaoidadjoajdoajdoajdoajdajdlajdqwenqeqlejqljeqljelqojoajcojcoj
80oeiepiqpiepiepqiepoqiepoiqeiqpeipqiep
80djosjsdojojojdjdojsodjosjdosjdosdjosd
80eriroieroieorieoiroeiroieorieoiroe
80eorieuu388438408340284082048028402840280480248028402840
60asjdlajddjjljlsdjlajdla
65ajdajdlajdljadljaldjlajdlajdl
66adlajdajdljaldjlajdlajdljaldjaljdlajdlajdljaldjlajdla
70adçakdçakdçakdçkadkaçdkçakdç
75jdiajdoajdoouiuojsajdlajdladjla
80oaoidadjoajdoajdoajdoajdajdlajdqwenqeqlejqljeqljelqojoajcojcoj
80oeiepiqpiepiepqiepoqiepoiqeiqpeipqiep
80djosjsdojojojdjdojsodjosjdosjdosdjosd
80eriroieroieorieoiroeiroieorieoiroe
80eorieuu388438408340284082048028402840280480248028402840
60asjdlajddjjljlsdjlajdla
65ajdajdlajdljadljaldjlajdlajdl
66adlajdajdljaldjlajdlajdljaldjaljdlajdlajdljaldjlajdla
70adçakdçakdçakdçkadkaçdkçakdç
75jdiajdoajdoouiuojsajdlajdladjla
80oaoidadjoajdoajdoajdoajdajdlajdqwenqeqlejqljeqljelqojoajcojcoj
80oeiepiqpiepiepqiepoqiepoiqeiqpeipqiep
80djosjsdojojojdjdojsodjosjdosjdosdjosd
80eriroieroieorieoiroeiroieorieoiroe
80eorieuu388438408340284082048028402840280480248028402840
60asjdlajddjjljlsdjlajdla
65ajdajdlajdljadljaldjlajdlajdl
66adlajdajdljaldjlajdlajdljaldjaljdlajdlajdljaldjlajdla
70adçakdçakdçakdçkadkaçdkçakdç
75jdiajdoajdoouiuojsajdlajdladjla
80oaoidadjoajdoajdoajdoajdajdlajdqwenqeqlejqljeqljelqojoajcojcoj
80oeiepiqpiepiepqiepoqiepoiqeiqpeipqiep
80djosjsdojojojdjdojsodjosjdosjdosdjosd
80eriroieroieorieoiroeiroieorieoiroe
80eorieuu388438408340284082048028402840280480248028402840
60asjdlajddjjljlsdjlajdla
65ajdajdlajdljadljaldjlajdlajdl
66adlajdajdljaldjlajdlajdljaldjaljdlajdlajdljaldjlajdla
70adçakdçakdçakdçkadkaçdkçakdç
75jdiajdoajdoouiuojsajdlajdladjla
80oaoidadjoajdoajdoajdoajdajdlajdqwenqeqlejqljeqljelqojoajcojcoj
80oeiepiqpiepiepqiepoqiepoiqeiqpeipqiep
80djosjsdojojojdjdojsodjosjdosjdosdjosd
80eriroieroieorieoiroeiroieorieoiroe
80eorieuu388438408340284082048028402840280480248028402840



Responder

04/08/2008

Paulo

Resolvi assim: Como o arquivo geral, também é criado por nós aqui, então coloquei um coringa no final de cada parte, no meu caso o curinga é o 999. Logo ao dar um Readln na última linha, ele vai pular essa linha posicionado exatamente na linha correta. Já funcionando. Valeu a todos aí e ao Zanel: Parece dofícil, mas não é fácil não,ehehehehehe!!!


Responder