Txt e StringList
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.
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
Curtidas 0
Respostas
Gustavo Bretas
28/10/2011
Welinton, veja se esse exemplo pode te ajudar!
Att
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
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;
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
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;
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
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.
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
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;
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
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;
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
28/10/2011
Obrigado a todos, cada uma das respostas teve sua utilidade.
Até mais!
Até mais!
GOSTEI 0