Txt e StringList

Delphi

28/10/2011

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

Curtidas 0

Respostas

Gustavo Bretas

Gustavo Bretas

28/10/2011

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
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

28/10/2011

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;
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

28/10/2011

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;
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

28/10/2011

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.
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

28/10/2011

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;
GOSTEI 0
Leandro

Leandro

28/10/2011

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;
GOSTEI 0
Weliton Oliveira

Weliton Oliveira

28/10/2011

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