Fórum Txt e StringList #408924
28/10/2011
0
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
Curtir tópico
+ 0Posts
31/10/2011
Gustavo Bretas
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
31/10/2011
Emerson Nascimento
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
31/10/2011
Emerson Nascimento
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
31/10/2011
Emerson Nascimento
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
31/10/2011
Emerson Nascimento
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
31/10/2011
Leandro
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
01/11/2011
Weliton Oliveira
Até mais!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)