Fórum Txt e StringList #408924

28/10/2011

0

Olá todos!!
Vejam:
1) Tenho que carregar um TXT em um StringList;
2) Depois tenho que localizar no StringList a linha que contenha a palavra ERROS;;
3) E à partir desta linha, até o final do StringList, copiar para minha tabela os registros separados por ponto e vírgula.

TXT:

RELATÓRIO DE ERROS
DATA DE EMISSÃO 28/10/2011
RESPONSÁVEL: WELITON DE OLIVEIRA
.......
ERROS;WELITON;25/12/1972;RG;CPF
ERROS;MARIA JOSÉ DA SILVA;01/01/2000;RG;CPF
...........
Aqui, no exemplo, a palavra ERROS; apareceu na 5º linha, mas pode variar muito, podemos ter acima de 100 linhas antes que ela apareça.

Alguém poderia me dar esta força??
Desde já agradeço.
Weliton Oliveira

Weliton Oliveira

Responder

Posts

31/10/2011

Gustavo Bretas

Welinton, veja se esse exemplo pode te ajudar!

procedure TForm2.Button1Click(Sender: TObject);
var
>>i: Integer;
>>vlsAux : String;
begin
>>Memo2.Lines.Clear;
>>for i := 0 to Memo1.Lines.Count - 1 do
>>begin
>>>>if Pos(ERROS;, Memo1.Lines.Strings[i]) > 0 then
>>>>begin
>>>>>>vlsAux := Memo1.Lines.Strings[i];
>>>>>>while (Pos(;, vlsAux) > 0) or (vlsAux <> EmptyStr) do
>>>>>>begin
>>>>>>>>if (Pos(;, vlsAux) > 0) then
>>>>>>>>begin
>>>>>>>>>>Memo2.Lines.Add(Copy(vlsAux, 0, Pos(;, vlsAux)));
>>>>>>>>>>vlsAux := Copy(vlsAux, Pos(;, vlsAux) + 1, Length(vlsAux));
>>>>>>>>end
>>>>>>>>else if Length(vlsAux) > 0 then
>>>>>>>>begin
>>>>>>>>>>Memo2.Lines.Add(Copy(vlsAux, 0, Length(vlsAux)));
>>>>>>>>>>vlsAux := EmptyStr;
>>>>>>>>end;
>>>>>>end;
>>>>end;
>>end;
end;


Att
Responder

Gostei + 0

31/10/2011

Emerson Nascimento

tente assim:

procedure TForm15.Button1Click(Sender: TObject);
var
  i: integer;
  slArquivo: TStringList;
  slRegistro: TStringList;
  strAviso, strNome, strData, strDoc1, strDoc2: string;
begin
  slArquivo := TStringList.Create;
  slArquivo.LoadFromFile(c:\teste.txt);

  slRegistro := TStringList.Create;
  slRegistro.Delimiter := ;;
  slRegistro.StrictDelimiter := True;

  for i := 0 to slArquivo.Count - 1 do
    if Copy(slArquivo[i],1,6) = ERROS; then
    begin
      slRegistro.DelimitedText := slArquivo[i];
      strAviso := slRegistro[0];
      strNome := slRegistro[1];
      strData := slRegistro[2];
      strDoc1 := slRegistro[3];
      strDoc2 := slRegistro[4];

      ShowMessage(strAviso+#13+strNome+#13+strData+#13+strDoc1+#13+strDoc2);
    end;
end;
Responder

Gostei + 0

31/10/2011

Emerson Nascimento

esse editor está cada vez pior: além de suprimir os espaços, está suprimindo também as aspas....

vamos tentar novamente:

procedure TForm15.Button1Click(Sender: TObject);
var
  i: integer;
  slArquivo: TStringList;
  slRegistro: TStringList;
  strAviso, strNome, strData, strDoc1, strDoc2: string;
begin
  slArquivo := TStringList.Create;
  slArquivo.LoadFromFile(c:\teste.txt);

  slRegistro := TStringList.Create;
  slRegistro.Delimiter := ;;
  slRegistro.StrictDelimiter := True;

  for i := 0 to slArquivo.Count - 1 do
    if Copy(slArquivo[i],1,6) = ERROS; then
    begin
      slRegistro.DelimitedText := slArquivo[i];
      strAviso := slRegistro[0];
      strNome := slRegistro[1];
      strData := slRegistro[2];
      strDoc1 := slRegistro[3];
      strDoc2 := slRegistro[4];

      ShowMessage(strAviso+#13+strNome+#13+strData+#13+strDoc1+#13+strDoc2);
    end;
end;
Responder

Gostei + 0

31/10/2011

Emerson Nascimento

terceira tentativa...

procedure TForm15.Button1Click(Sender: TObject);
var
  i: integer;
  slArquivo: TStringList;
  slRegistro: TStringList;
  strAviso, strNome, strData, strDoc1, strDoc2: string;
begin
  slArquivo := TStringList.Create;
  slArquivo.LoadFromFile(c:\teste.txt);

  slRegistro := TStringList.Create;
  slRegistro.Delimiter := ;;
  slRegistro.StrictDelimiter := True;

  for i := 0 to slArquivo.Count - 1 do
    if Copy(slArquivo[i],1,6) = ERROS; then
    begin
      slRegistro.DelimitedText := slArquivo[i];
      strAviso := slRegistro[0];
      strNome := slRegistro[1];
      strData := slRegistro[2];
      strDoc1 := slRegistro[3];
      strDoc2 := slRegistro[4];

      ShowMessage(strAviso+#13+strNome+#13+strData+#13+strDoc1+#13+strDoc2);
    end;
end;

onde você estiver vendo aspas duplas, troque por aspas simples.
Responder

Gostei + 0

31/10/2011

Emerson Nascimento

mais uma vez...

procedure TForm15.Button1Click(Sender: TObject);
var
  i: integer;
  slArquivo: TStringList;
  slRegistro: TStringList;
  strAviso, strNome, strData, strDoc1, strDoc2: string;
begin
  slArquivo := TStringList.Create;
  slArquivo.LoadFromFile(`c:\teste.txt´);

  slRegistro := TStringList.Create;
  slRegistro.Delimiter := `;´;
  slRegistro.StrictDelimiter := True;

  for i := 0 to slArquivo.Count - 1 do
    if Copy(slArquivo[i],1,6) = `ERROS;´ then
    begin
      slRegistro.DelimitedText := slArquivo[i];
      strAviso := slRegistro[0];
      strNome := slRegistro[1];
      strData := slRegistro[2];
      strDoc1 := slRegistro[3];
      strDoc2 := slRegistro[4];

      ShowMessage(strAviso+#13+strNome+#13+strData+#13+strDoc1+#13+strDoc2);
    end;
end;
Responder

Gostei + 0

31/10/2011

Leandro

StrLista.LoadFromFile(SeuArquivo.txt);

for i:=0 to StrLista.Count-1 do
begin
if Pos(ERROS,StrLista[I]) > 0 then
begin
// a linha contem a palavra ERROS

end;

end;
Responder

Gostei + 0

01/11/2011

Weliton Oliveira

Obrigado a todos, cada uma das respostas teve sua utilidade.
Até mais!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar