Dúvida - TXT

Delphi

29/08/2009

assignfile(arquivo,opendialog1.FileName); 
reset(arquivo); // ARMAZENA
readln(arquivo,conteudotxt); 


Tenho uma pergunta fiz um programa porém ele só ler a quantidade de linha que eu quiser.. como eu faço para ele ler todo o txt independendo da quantidade de linha que o mesmo tenha??

Obrigado!! ;)


Ipeixoto

Ipeixoto

Curtidas 0

Respostas

Prmcibor

Prmcibor

29/08/2009

Se entendi o que voce quer, vc pode fazer um While NOT EOF



assignfile(arquivo,opendialog1.FileName);
reset(arquivo); // ARMAZENA
WHILE NOT EOF(arquivo) do
begin
  readln(arquivo,conteudotxt); 
end;




GOSTEI 0
Marco Salles

Marco Salles

29/08/2009

Pode tb usar a VCL ( RichEdit , Memo , ListBox etc...)

procedure TForm1.Button1Click(Sender: TObject);
begin
opendialog1.InitialDir:=´C:\CaminhoPreferido\etx´;
if opendialog1.Execute then
  richedit1.Lines.LoadFromFile(openDialog1.FileName);
end;



GOSTEI 0
Ipeixoto

Ipeixoto

29/08/2009

opendialog1.InitialDir := ´C:\´;
if opendialog1.Execute then //LER O ARQUIVO
assignfile(arquivo,opendialog1.FileName);
reset(arquivo);
WHILE NOT EOF(arquivo) do
begin
readln(arquivo,textoo);
for i := 1 to length(textoo) do {varre da primeira posição até a última}
begin


Deixa eu tentar explicar.. e porque o seguinte eu to carregando um arquivo txt de multiplas linhas.. depois eu teria que salvar esse conteudo (textfile) em um string.. após isso ler caractere por caractere para fazer um processo de encriptação.. que é o que está ocorrendo no último FOR..(matéria da encriptação da faculdade.) e após encriptado simplismente mandar esse texto encriptado (string) que irá enviar como parametro para um procedimento para salvar em outro txt.. meu problema e só conseguir ler todo esse arquivo txt multiplas linhas e por em uma string.. eu tava tentando com o código acima só que da erro 104 I/o =/

alguém pode me ajudar?


GOSTEI 0
Marco Salles

Marco Salles

29/08/2009

não há dificuldade nisso

procedure TForm1.Button1Click(Sender: TObject);
var
Lista:TStrings;
idx:integer;
begin
Lista:=TStringList.Create;
try
lista.LoadFromFile(´CaminhoDoArquivoValido´);
for idx:= 0 to Lista.Count - 1 do
  lista.Strings[idx]:=´Posso a cada Linha Alterar o Conteudo´ ;
Lista.SaveToFile(´QuerSalvarAonde\ArquivoEncriptografato.txt´);
finally
Lista.Free;
end;
end;
end;



é claro que aonde vc lê

lista.Strings[idx]:=´Posso a cada Linha Alterar o Conteudo´ ;

Provavelmente é uma função Criptografia


function Criptografar(const Str:String):String;
begin
result:=Str;
result:=´Muda Aqui Faça Assim Modifique´;
end;


lista.Strings[idx]:=Criptografar(  lista.Strings[idx]);



GOSTEI 0
Ipeixoto

Ipeixoto

29/08/2009

marcos mais na verdade oque o professor disse e eu não soube falar e o seguinte..

eu tenhu uma txt por exemplo:

aajsnia
asjnaisjn
ajsniahs
ajsniahsniasj

ou seja vários caracteres em várias linhas diferentes.. e eu tenho que ler caractere por caractere fazer a função de encriptar entendeu??

não colocar toda uma linha ou todo um txt em uma string pq dependendo do tamanho pode da estouro.. =//


GOSTEI 0
Marco Salles

Marco Salles

29/08/2009

para ler caracter por caracter basta usar ;

procedure TForm1.Button2Click(Sender: TObject);
var
Lista:TStrings;
idx,i,Tamanho:integer;
linha:String;
begin
  Lista:=TStringList.Create;
  try
    lista.LoadFromFile(´CaminhoDoArquivoValido´);
    for idx:= 0 to Lista.Count - 1 do
      begin
      Linha:=lista.Strings[idx];
      tamanho:=length(linha);
        for i:=1 to tamanho do
          Linha[i]:=´A´;  //Aqui entra as suas condiçoes
        lista.Strings[idx]:=Linha
      end;
    Lista.SaveToFile(´QuerSalvarAonde\ArquivoEncriptografato.txt´);
  finally
    Lista.Free;
    end;
end;



GOSTEI 0
Ipeixoto

Ipeixoto

29/08/2009

Marcos só tá dando um erroo..!

procedure TForm1.Button1Click(Sender: TObject);
var
encriptLista:TStrings;
idx,i,Tamanho, codasc, key, calc:integer;
linha:String;
temp : Char;
begin
  encriptLista:=TStringList.Create;
  key := strtoint(edit1.Text);
  try
    encriptlista.LoadFromFile(´C:\original.txt´);
    for idx:= 0 to encriptLista.Count - 1 do
      begin
      Linha:=encriptlista.Strings[idx];
      tamanho:=length(linha);
        for i:=1 to tamanho do
        begin
        calc := key mod 256;
        codasc := ord(linha[i]);
        calc := calc + codasc;
        temp := Chr(calc);
        Linha[i]:=temp;
        encriptlista.Strings[idx]:=Linha
        end;
      end;
    encriptLista.SaveToFile(´C:\encript.txt´);
  finally
    encriptLista.Free;
    end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
decriptLista:TStrings;
didx,di,dTamanho, dcodasc, dkey, dcalc:integer;
dlinha:String;
dtemp : Char;
begin
  decriptLista:=TStringList.Create;
  try
    decriptlista.LoadFromFile(´C:\encript.txt´);
    dkey := strtoint(edit1.Text);
    for didx:= 0 to decriptLista.Count - 1 do
      begin
      dLinha:=decriptlista.Strings[didx];
      dtamanho:=length(dlinha);
        for di:=1 to dtamanho do
        begin
        dcalc := dkey mod 256;
        dcodasc := ord(dlinha[di]);
        dcalc := dcodasc - dcalc;
        dtemp := Chr(dcalc);
        dLinha[di]:=dtemp;
        decriptlista.Strings[didx]:=dLinha
        end;
      end;
    decriptLista.SaveToFile(´C:\decript.txt´);
  finally
    decriptLista.Free;
    end;
end;

end.


Acontece o seguinte quando eu coloco a chave de encriptação 1 por exemplo.. ele retorna a txt original mesmo.. ou seja isso fala q a rotina de encriptação que e uma soma besta e decriptção está certa.. pq quando eu coloco outros números da errado??

=// to desesperado já!


GOSTEI 0
Marco Salles

Marco Salles

29/08/2009

Dá errado pq vc ta colocando as coisas no Lugar ERRADO

Vamos primeiro na encriptação

procedure TForm1.Button1Click(Sender: TObject); var encriptLista:TStrings; idx,i,Tamanho, codasc, key, calc:integer; linha:String; temp : Char; begin encriptLista:=TStringList.Create; key := strtoint(edit1.Text); try encriptlista.LoadFromFile(´C:\original.txt´); for idx:= 0 to encriptLista.Count - 1 do begin Linha:=encriptlista.Strings[idx]; tamanho:=length(linha); for i:=1 to tamanho do begin calc := key mod 256; codasc := ord(linha[i]); calc := calc + codasc; temp := Chr(calc); Linha[i]:=temp; encriptlista.Strings[idx]:=Linha *******LOCAL TA ERRADO end; end; encriptLista.SaveToFile(´C:\encript.txt´); finally encriptLista.Free; end; end;



procedure TForm1.Button1Click(Sender: TObject);
var
encriptLista:TStrings;
idx,i,Tamanho, codasc, key, calc:integer;
linha:String;
temp : Char;
begin
encriptLista:=TStringList.Create;
key := strtoint(edit1.Text);
try
encriptlista.LoadFromFile(´C:\original.txt´);
for idx:= 0 to encriptLista.Count - 1 do
begin
Linha:=encriptlista.Strings[idx];
tamanho:=length(linha);
for i:=1 to tamanho do
begin
calc := key mod 256;
codasc := ord(linha[i]);
calc := calc + codasc;
temp := Chr(calc);
Linha[i]:=temp;
end;
encriptlista.Strings[idx]:=Linha ******AQUI Hooooooooooooo
end;
encriptLista.SaveToFile(´C:\encript.txt´);
finally
encriptLista.Free;
end;
end;


GOSTEI 0
Ipeixoto

Ipeixoto

29/08/2009

procedure TForm1.Button1Click(Sender: TObject);
var
encriptLista:TStrings;
idx,i,Tamanho, codasc, key, calc:integer;
linha:String;
temp : Char;
begin
  encriptLista:=TStringList.Create;
  key := strtoint(edit1.Text);
  try
    encriptlista.LoadFromFile(´C:\original.txt´);
    for idx:= 0 to encriptLista.Count - 1 do
      begin
      Linha:=encriptlista.Strings[idx];
      tamanho:=length(linha);
        for i:=1 to tamanho do
        begin
        calc := key mod 256;
        codasc := ord(linha[i]);
        calc := calc + codasc;
        temp := Chr(calc);
        Linha[i]:=temp;
        end;
        encriptlista.Strings[idx]:=Linha
      end;
    encriptLista.SaveToFile(´C:\encript.txt´);
  finally
    encriptLista.Free;
    end;

end;
procedure TForm1.Button2Click(Sender: TObject);
var
decriptLista:TStrings;
didx,di,dTamanho, dcodasc, dkey, dcalc:integer;
dlinha:String;
dtemp : Char;
begin
  decriptLista:=TStringList.Create;
  try
    decriptlista.LoadFromFile(´C:\encript.txt´);
    dkey := strtoint(edit1.Text);
    for didx:= 0 to decriptLista.Count - 1 do
      begin
      dLinha:=decriptlista.Strings[didx];
      dtamanho:=length(dlinha);
        for di:=1 to dtamanho do
        begin
        dcalc := dkey mod 256;
        dcodasc := ord(dlinha[di]);
        dcalc := dcodasc - dcalc;
        dtemp := Chr(dcalc);
        dLinha[di]:=dtemp;
        end;
        decriptlista.Strings[didx]:=dLinha
      end;
    decriptLista.SaveToFile(´C:\decript.txt´);
  finally
    decriptLista.Free;
    end;
end;


Marcos bem fiz como vc falou porem ainda não deu certo.. =// séra o pascal?? pq em c da certo =/

coloquei chave 12 e nem deu.. pq as vezes no encript.txt aparece ? ai não da certo =//


GOSTEI 0
Marco Salles

Marco Salles

29/08/2009

Cara testa ai

Teste aqui e deu certinho

A função de encriptografar é sua.. Mas mesmo assim me arrisquei com
ela.. Encriptografei e descriptografei

Usei o Txt Original assim ;
Mudar testo
Outra Linha


Encriptografou assim
GOSTEI 0
Ipeixoto

Ipeixoto

29/08/2009

você usa qual S.O e versão do delphi??

aqui eu to usando o Windows Vista + delphi 2009 lite

ele encripta assim
GOSTEI 0
Marco Salles

Marco Salles

29/08/2009

Uso Vista + Delphi2007 .. e posso garantir que ficou beleza

Bem o tipo String e o Tipo Char no delphi2009 , houve uma pequena mudança
Ainda não cheguei lá . Mas acho que eles sofreram alterações para receber
os Padrões Unicode..


GOSTEI 0
Ipeixoto

Ipeixoto

29/08/2009

vou tentar o baixar o Delphi2007 pq tentei de tudo e o encript e decript não da mesmo.. tentei até com o delphi 7 e tbm não dá isso e pra segunda.. vou tentar obrigado ;(


GOSTEI 0
Ipeixoto

Ipeixoto

29/08/2009

Marcos meu amigoo deu certo muito obrigado pelo seu tempo..

:P


GOSTEI 0
POSTAR