Lendo arquivo de texto
Galera alguem me ajuda pf, eu quero que meu programa leia um código no arquivo de texto, e que se houver o código 124 ele envie esse txt para uma outra pasta, vou por o código que tenho, agradeço desde ja
procedure TForm1.btnOkClick(Sender: TObject);
var
arq: TextFile; { declarando a variável "arq" do tipo arquivo texto }
linha: string;
o, d: PAnsiChar;
begin
AssignFile(arq, edtRecebeCaminho.Text);
{$I-} // desativa a diretiva de Input
Reset(arq); // [ 3 ] Abre o arquivo texto para leitura
{$I+} // ativa a diretiva de Input
// verifica o resultado da operação de abertura
if(IOResult <> 0) then
begin
while (not eof(arq)) do
begin
readln(arq, linha); // [ 6 ] Lê uma linha do arquivo
end;
end;
//se achar o código 124
if (linha = '124') then
begin
//ele ira receber o caminho, o destino e vai mover o meu arquivo para a pasta desejada
o := PCHAR(edtRecebeCaminho.Text + edtDestino.Text + '*.txt');
d := PCHAR(edtDestino.Text + edtRecebeCaminho.Text + '*.txt');
MoveFile(o,d);
CloseFile(arq); // [ 8 ] Fecha o arquivo texto aberto
end
else
showmessage('Não existem erros de : Cupom já registrado no sistema !!!');
end;
procedure TForm1.btnOkClick(Sender: TObject);
var
arq: TextFile; { declarando a variável "arq" do tipo arquivo texto }
linha: string;
o, d: PAnsiChar;
begin
AssignFile(arq, edtRecebeCaminho.Text);
{$I-} // desativa a diretiva de Input
Reset(arq); // [ 3 ] Abre o arquivo texto para leitura
{$I+} // ativa a diretiva de Input
// verifica o resultado da operação de abertura
if(IOResult <> 0) then
begin
while (not eof(arq)) do
begin
readln(arq, linha); // [ 6 ] Lê uma linha do arquivo
end;
end;
//se achar o código 124
if (linha = '124') then
begin
//ele ira receber o caminho, o destino e vai mover o meu arquivo para a pasta desejada
o := PCHAR(edtRecebeCaminho.Text + edtDestino.Text + '*.txt');
d := PCHAR(edtDestino.Text + edtRecebeCaminho.Text + '*.txt');
MoveFile(o,d);
CloseFile(arq); // [ 8 ] Fecha o arquivo texto aberto
end
else
showmessage('Não existem erros de : Cupom já registrado no sistema !!!');
end;
Lucas Garcia
Curtidas 0
Respostas
Ricardo Rodrigues
30/09/2013
E o que está acontecendo ?
GOSTEI 0
Lucas Garcia
30/09/2013
Ele não esta recebendo valores na variavel arq , e quando recebe ele não encontra o código no arquivo, entretanto eu mesmo fiz um arquivo onde só tem este código e ele não encontra o código e cai direto na showmessage
GOSTEI 0
Ricardo Rodrigues
30/09/2013
Verificou se o software está com acesso na pasta que se encontra o arquivo ?
GOSTEI 0
Lucas Garcia
30/09/2013
Sim, ele tem acesso
GOSTEI 0
Ricardo Rodrigues
30/09/2013
olha um exemplo que utilizo bastante abaixo :
procedure TForm1.BitBtn9Click(Sender: TObject);
var
Arq : TextFile;
Texto : string;
Txt : TStringList;
begin
memo1.clear;
Txt := TStringList.Create;
Txt.Delimiter := ';';
try
Screen.Cursor := crHourGlass;
AssignFile(Arq,'Caminho do arquivo');
Reset(Arq);
if not EOF(Arq) then
repeat
ReadLn(Arq, Texto);
texto := StringReplace(StringReplace(Texto,' ','*',[rfReplaceAll]),'#32',' ',[rfReplaceAll]);
Txt.DelimitedText := Texto;
Memo1.Lines.Add(' insert into grupo (cod_empr, cod_grup, descricao, sigla) values ('+
'1,'+
txt[0]+','+
''''+copy(stringreplace(Txt[1],'*',' ',[rfReplaceAll]),1,40)+''','+
''''+copy(stringreplace(Txt[3],'*',' ',[rfReplaceAll]),1,3)+''');');
Memo1.Lines.Add(' ');
until EOF(Arq);
finally
Closefile(Arq);
Screen.Cursor := crDefault;
end;
FreeAndNil(Txt);
end;
GOSTEI 0
Lucas Garcia
30/09/2013
Então no seu código ele vai abrir, vai verificar o conteudo e listar na memo correto ? então no caso, o meu conteúdo não é necessário listar, ele só vai checar se existe o codigo no arquivo, se existir ele move para outra pasta se não ele só vai lançar uma mensagem, ai no momento ele até consegue abrir o arquivo mais ele não localiza o código que eu deixei de chave, mesmo se ter somente este código no txt
GOSTEI 0
Marcos Saffran
30/09/2013
Olá Lucas,
tente o AnsiPos:
tente o AnsiPos:
if AnsiPos('124', linha) > 0 then
begin
ShowMessage('Encontrou 124, na posição : ' + IntToStr(AnsiPos('124', linha); //aqui coloque o código de encontrado
end
else
begin
ShowMessage('Não encontrou 124'); //aqui coloque o código de não encontrado.
end;GOSTEI 0
Marcos Saffran
30/09/2013
Opa tem outra coisa :
do jeito que está o seu código o comando while vai ler o arquivo todo, a última linha do arquivo é que será salva na variável linha, recomendo que coloque a verificação do conteúdo dentro do while e cancele-o se for encontrado o desejado.
if(IOResult <> 0) then
begin
while (not eof(arq)) do
begin
readln(arq, linha); // [ 6 ] Lê uma linha do arquivo
end;
end;
//se achar o código 124
if (linha = '124') then
begindo jeito que está o seu código o comando while vai ler o arquivo todo, a última linha do arquivo é que será salva na variável linha, recomendo que coloque a verificação do conteúdo dentro do while e cancele-o se for encontrado o desejado.
GOSTEI 0
Lucas Garcia
30/09/2013
Marcos, obrigado pela dica, e foi resolvido, o código ficou assim
begin
A:=false;
Ch := edtRecebeCaminho.Text;
Ch2 := edtDestino.Text;
sc_vt := FindFirst(Ch + '???????????????????.???', faArchive, sc_vai);
While sc_vt = 0 Do
Begin
If Length(sc_vai.Name) < 20 Then
Begin
sc_vt := FindNext(sc_vai);
Continue;
End;
AssignFile(arq, edtRecebeCaminho.Text + sc_vai.Name);
Reset(arq); // [ 3 ] Abre o arquivo texto para leitura
while not eof(arq) do
begin
readln(arq, linha); // [ 6 ] Lê uma linha do arquivo
T:= copy(linha, 1, 23);
if ( T = ('ALERTA : Cupom Fiscal j')) then
begin
T:= copy(linha, 27, 30);
if( T = ('registrado no sistema na linha')) then
begin
A:=true;
end;
end;
end;
CloseFile(arq);
if A=true then
begin
Ch:=Ch + sc_vai.Name;
Ch2:=Ch2 + sc_vai.Name;
MoveFile(PCHAR(Ch),PCHAR(ch2));
showmessage('Arquivos Separados');
end;
sc_vt:= FindNext(sc_vai);
end;
end;
GOSTEI 0
Marcos Saffran
30/09/2013
Boa tarde Lucas,
ficou muito bom parabéns!
Sempre que possível estamos aqui para poder ajudar.
ficou muito bom parabéns!
Sempre que possível estamos aqui para poder ajudar.
GOSTEI 0