Dúvida de lógica
01/08/2008
0
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:
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.
É 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.
Paulo
Curtir tópico
+ 0
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:
Arquivo:
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
Clique aqui para fazer login e interagir na Comunidade :)