Ir para conteúdo
Fórum Script Brasil
  • 0

Delphi E Txt (Resolvido)


Nosdaj

Pergunta

TUDO BEM PESSOAL, PRECISO DE UMA ROTINA QUE ME EXIBA EM QUATRO EDIT'S, QUATRO VALORES QUE ESTÃO ARMAZENADOS NUM ARQUIVO TXT(EM ORDEM DE POSICIONAMENTO), E UMA ROTINA DE ALTERAÇÃO, OU A ROTINA DE ALTERAÇÃO FUNCIONA DA MESMA MANEIRA QUE A DE INSERIR REGISTROS NO TXT, GRATO PELA ATENÇÃO.

E-MAIL:JADSONLEAO@POP.COM.BR

MESSENGER:NOSDAJ@HOTMAIL.COM biggrin.gif

Link para o comentário
Compartilhar em outros sites

19 respostass a esta questão

Posts Recomendados

  • 0

Olá Nosdaj,

cara você num foi muito claro na sua pregunta, existe "1001 formas" de se trabalhar com arquivo texto, o que seria essa "ORDEM DE POSICIONAMENTO" ?

De que forma estão armazenados esses 4 valores no txt? em linha? coluna? okê?? huh.gif

tipo: assim:

VALOR1 VALOR2 VALOR3 VALOR4

ou assim:

VALOR1

VALOR2

VALOR3

VALOR4

dry.gif

Abs. Progr'amador.

Link para o comentário
Compartilhar em outros sites

  • 0

e ai beleza programador, é tipo assim, exemplo, tenho CNPJ,SIGLA,RAZÃO SOCIAL E ESTADO, insiro estes valores em um arquivo TXT, quero que quando a pessoa fechar e abrir o sistema novamente estes valores inseridos apareçam nos seus respectivos campos caso ela queira alterar, pois posteriormente nesta sequencia que aparece lá no arquivo txt(CNPJ,SIGLA,RAZÃO SOCIAL E ESTADO) será inserido em uma base de dados interbase.Se você tiver tambem uma rotina de exportação e importação ira me ajudar muito, grato pela atenção.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Nosdaj,

beleza, mas vamos supor que esse arquivo tenha mais de uma linha, qual linha ira pros edit's? sendo que são 4 edit's e se o arquivo tem 3 linhas por exemplo (4x3=12) ele não podera jogar os 12 valores nos 4 edit's, entendeu? Ou você quer fazer tipo uma pesquisa no arquivo txt e selecionar determinada linha? Ou esse arquivo só tem uma linha mesmo?

De qualquer forma ae vai alguns exemplos.

usando 4 edit's:

procedure TForm1.Button1Click(Sender: TObject);
var ArqTxt : TextFile;
    linha  : string;
begin
  AssignFile(ArqTxt,'C:\Meus documentos\arquivo_texto.txt');
  Reset(ArqTxt);
  Readln(ArqTxt, Linha);
  Edit1.Text := Copy(Linha,1,5);
  Edit2.Text := Copy(Linha,6,10);
  Edit3.Text := Copy(Linha,11,15);
  Edit4.Text := Copy(Linha,16,20);
  Closefile(ArqTxt);
end;
*Dessa forma os edits ira receber os valores da primeira linha, independente do numero de linhas. um outro exemplo, só que usando o Memo, dessa forma virar pro memo todoas as linhas do arquivo.
procedure TForm1.Button1Click(Sender: TObject);
var ArqTxt : TextFile;
    linha  : string;
begin
  AssignFile(ArqTxt,'C:\Meus documentos\arquivo_texto.txt');
  Reset(ArqTxt);
  Readln(ArqTxt, Linha);                             
  while not eof(ArqTxt) do begin
     Readln(ArqTxt, Linha);
     Memo1.Lines.Add(Linha);
  end;
  Linha := '';     
  Closefile(ArqTxt);
end;

Vê se alguma dessas formas serve pro seu caso.

Qualquer dúvida posta ae, falou!!! wink.gif

Abs. Progr'amador.

Link para o comentário
Compartilhar em outros sites

  • 0

beleza programador, o negocio é o seginte exemplo: tenho 2 edits, um vai receber o cnpj da cooperativa e o outro recebera a sigla; lá no arquivo TXT vai mostrar assim: (5241547854;cooperfarma), como faço para mostrar os mesmos valores que foram inseridos em outros dois edit's.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Nasdaj,

descupa ae cara, é que eu demoro pra entender as coisas... hehhee biggrin.gif

Pelo que eu entendi, você quer trazer somente ultimo insedo, né?

com base no eu exemplo (5241547854;cooperfarma):

procedure TForm1.Button1Click(Sender: TObject);
var ArqTxt : TextFile;
    linha  : string;
    i : integer;
begin
 AssignFile(ArqTxt,'C:\Meus documentos\arquivo_texto.txt');
 Reset(ArqTxt);
 Readln(ArqTxt, Linha);
 while not eof(ArqTxt) do begin
    Readln(ArqTxt, Linha);
    i := Length(Linha);
    Edit1.Text := Copy(Linha,1,10);
    Edit2.Text := Copy(Linha,12,i);
 end;
 Linha := '';
 Closefile(ArqTxt);
end;

Abs. Progr'amador.

Link para o comentário
Compartilhar em outros sites

  • 0

programador, tem jeito de eu pegar qualquer tamanho ate o final da virgula ai pula a virgula e pega o tamanho do outro registro ate a virgula e assim consecutivamente, sem depender de tamanho conforme o seu exemplo Edit1.Text := Copy(Linha,1,10); porque os dos edit's poderiam ser (524;farma).

Link para o comentário
Compartilhar em outros sites

  • 0

programador, tem jeito de eu pegar qualquer tamanho ate o final da virgula ai pula a virgula e pega o tamanho do outro registro ate a virgula e assim consecutivamente, sem depender de tamanho conforme o seu exemplo Edit1.Text := Copy(Linha,1,10); porque os dos edit's poderiam ser  (524;farma).

Olá Nosdaj,

agente arruma um jeito, hehehe biggrin.gif

só que no exemplo você ta usando ponto e virgula (;), Ex: (524;farma)

ae vai:

procedure TForm1.Button1Click(Sender: TObject);
var ArqTxt : TextFile;
   linha, virgula : string;
   i, nx, tam : integer;
begin
   AssignFile(ArqTxt,'C:\Meus documentos\arquivo_texto.txt');
   Reset(ArqTxt);
   Readln(ArqTxt, Linha);
   while not eof(ArqTxt) do begin
      Readln(ArqTxt, Linha);
      i := Length(Linha);
      for nx:=1 to i do begin
         virgula := Copy(Linha,nx,1);
         if virgula = ';' then
            tam := nx;
      end;
      Edit1.Text := Copy(Linha,1,tam-1);
      Edit2.Text := Copy(Linha,tam+1,i);
   end;
   Linha := '';
   Closefile(ArqTxt);
end;

Caso esteja usando virgula mesmo é só mudar aqui: if virgula = ',' then

Abs. Programador.

Link para o comentário
Compartilhar em outros sites

  • 0

porque será que não esta funcionando? Não aparece nada, o outro exemplo aparecia mas sem ser em ordem.

procedure TFrameCadastro.BitBtn4Click(Sender: TObject);

var ArqTxt : TextFile;

linha, virgula : string;

i, nx, tam : integer;

begin

AssignFile(ArqTxt,'c:\cooperativa\cooperativas.txt');

Reset(ArqTxt);

Readln(ArqTxt, Linha);

while not eof(ArqTxt) do begin

Readln(ArqTxt, Linha);

i := Length(Linha);

for nx:=1 to i do begin

virgula := Copy(Linha,nx,1);

if virgula = ';' then

tam := nx;

end;

edtCNPJ.Text := Copy(Linha,1,tam-1);

edtSigla.Text := Copy(Linha,tam+1,i);

end;

Linha := '';

Closefile(ArqTxt);

end;

Link para o comentário
Compartilhar em outros sites

  • 0

programador não sei porque não da certo aqui, mas me diz uma coisa, não seria melhor eu usar sem virgula colocando cada valor inserido um em baixo do outro.

Exemplo:

coopfarma

393

uldlld

nosdaj

programadot

Ai no caso ele contaria como linhas, uma em baixo da outra, se você tiver o código de inserção assim e o código para exibir novamente nos edit's sem a preocupação com o tamanho do que é inserido, acho que será mais fácil pra mim implementar, valeu pela força.

Link para o comentário
Compartilhar em outros sites

  • 0

Tenta esse:

procedure TForm1.Button1Click(Sender: TObject);
var ArqTxt : TextFile;
  linha : string;
  i : integer;
begin
  AssignFile(ArqTxt,'C:\Meus documentos\arquivo_texto.txt');
  Reset(ArqTxt);
  i := 0;
  while not eof(ArqTxt) do begin
     Readln(ArqTxt, Linha);
     i := i + 1;
     if i = 1 then Edit1.Text := Linha;
     if i = 2 then Edit2.Text := Linha;
     if i = 3 then Edit3.Text := Linha;
     if i = 4 then Edit4.Text := Linha;
     if i = 5 then Edit5.Text := Linha;
     if i = 6 then Edit6.Text := Linha;
  end;
  Linha := '';
  Closefile(ArqTxt);
end;

Abs. Progr'amador.

Link para o comentário
Compartilhar em outros sites

  • 0

como eu posso inserir pra que ele leia daquela maneira linha por linha, no código que você mandou?

ficando desta maneira no arquivo txt

nome

sigla

endereço

um em baixo do outro?

pois testei o código que você mandou e deu certo só que funciona se estiver um em baixo do outro.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...