DouglasP 1 Denunciar post Postado Agosto 30, 2009 Boa tarde, queria saber como ler um txt no seguinte formato: Código: #root 12202,teste.dll #Data/ 10012,macro.txt onde oque tem # antes seria o local de onde o arquivo esta e oque vem depois é o tamanho do arquivo e o nome separado por virgula. preciso jogar esses campos em um listbox para poder baixar e salvar no local certo. grato. Compartilhar este post Link para o post Compartilhar em outros sites
Raficcha 1 Denunciar post Postado Agosto 31, 2009 Pode fazer assimc cara: procedure TrataArquivo(FileName: string); var pasta, nome, temptamanho : string; tamanho, cont: integer; arq: TextFile; temp : string; begin if (FileExists(FileName)) then begin AssignFile(arq, FileName); Reset(arq); try while (not(EOF(arq))) do begin //ler a pasta Readln(arq, temp); pasta := Copy(temp, 2, Length(temp)-1); //ler tamanho e nome Readln(arq, temp); temptamanho := ''; for cont := 1 to length(temp) do begin if temp[cont] = ',' then break else temptamanho := temptamanho+temp[cont]; end; tamanho := StrToInt(temptamanho); nome := Copy(temp, cont+1, Length(temp)-Cont); {******************************************************************************************} {aqui estão os valores que você quer respectivamente nas variaveis pasta, nome e tamanho} ShowMessage(pasta); ShowMessage(nome); ShowMessage(IntToStr(tamanho)); {******************************************************************************************} end; finally end; end else EConvertError.Create('Arquivo não encontrado.'); end; espero que ajude Compartilhar este post Link para o post Compartilhar em outros sites
DouglasP 1 Denunciar post Postado Agosto 31, 2009 Funcionou exatamente como eu queria, agora como faço para pegar os dados e gravar separadamente em um combobox ? tipo a pasta no combobox1, o nome do arquivo no combobox2 e o tamanho no combobox3. grato. Compartilhar este post Link para o post Compartilhar em outros sites
DouglasP 1 Denunciar post Postado Agosto 31, 2009 Se eu coloco assim: #root 12202,teste.dll.rar #Data\ 10012,macro.txt.rar 10018,novo.txt.rar #Data\Local 20012,Player.bmd.rar da erro :/ fala que #Data\Local não é inteiro algo do genero. Compartilhar este post Link para o post Compartilhar em outros sites
Raficcha 1 Denunciar post Postado Agosto 31, 2009 Opa beleza, então fica assim declare isso na sessão "type" da sua unit TRegFiles = record FileSize: integer; FileName: string; end; TRegPasta = record Endereco : string; Arquivos : array of TRegFiles; FilesCount : integer; end; arrayRetorno = array of TRegPasta; esses são as estruturas e tipos de dados que a função vai utilizar e retornar e aqui vai a função function TrataArquivo(FileName: string): ArrayRetorno; var temptamanho : string; cont: integer; arq: TextFile; temp : string; tempRP : TRegPasta; begin SetLength(Result, 1); if (FileExists(FileName)) then begin AssignFile(arq, FileName); Reset(arq); try Readln(arq, temp); while (not(EOF(arq))) do begin //ler a pasta if (temp[1] = '#') then begin tempRP.Endereco := Copy(temp, 2, Length(temp)-1); //ler tamanho e nome readln(arq, temp); setLength(tempRP.Arquivos, 1); tempRP.FilesCount := 0; while ((Length(temp)>0) and (temp[1] <> '#')) do begin inc(tempRp.FilesCount); setLength(tempRP.Arquivos, tempRP.FilesCount+1); temptamanho := ''; for cont := 1 to length(temp) do begin if temp[cont] = ',' then break else temptamanho := temptamanho+temp[cont]; end; tempRP.Arquivos[tempRP.FilesCount].FileSize := StrToInt(temptamanho); tempRP.Arquivos[tempRP.FilesCount].FileName := Copy(temp, cont+1, Length(temp)-Cont); readln(arq, temp); end; {******************************************************************************************} {aqui estão os valores que você quer respectivamente utilizando: tempRP.Endereco -> endereco da pasta tempRP.FilesCOunt -> total de arquivos tempRP.Arquivos[n].FileSize -> tamanho do arquivo "n" tempRP.Aquivos[n].FileName -> nome do arquivos "n" } {Você pode tratar os valores aqui, mas eu coloquei todo o arquivo em um array que é retornado pela função} {******************************************************************************************} Setlength(Result, Length(Result)+1); Result[Length(Result)-1] := tempRP; end; end; finally end; end else EConvertError.Create('Arquivo não encontrado.'); end; se quiser dar uma testada, coloque ai no seu form um "TOpenDialog" e um "TButton" e no evento "onClick" do seu Botão coloque isto: procedure TForm1.Button1Click(Sender: TObject); var teste : arrayRetorno; cont, cont2: integer; cbs : array of TComboBox; topinc : integer; begin if (OpenDialog1.execute) then begin teste := TrataArquivo(OpenDialog1.FileName); topinc :=0; for cont := 1 to Length (teste)-1 do begin SetLength(cbs, cont+1); cbs[cont] := TComboBox.Create(nil); cbs[cont].Parent := Self; cbs[cont].Top := topinc; inc(topinc, cbs[cont].Height+10); cbs[cont].Show; for cont2 := 1 to teste[cont].FilesCount do begin cbs[cont].Items.Add(teste[cont].arquivos[cont2].FileName + '( '+inttostr(teste[cont].arquivos[cont2].FileSize)+')'); end; end; end; end; espero que ajude Compartilhar este post Link para o post Compartilhar em outros sites
DouglasP 1 Denunciar post Postado Setembro 1, 2009 Deu erro nessa linha: TRegFiles = record coloquei o código logo abaixo do fim das procedures dos objetos que o form usa. Compartilhar este post Link para o post Compartilhar em outros sites
DouglasP 1 Denunciar post Postado Setembro 1, 2009 usei um exemplo de um amigo do chmod bem mais simples e funcional como eu queria vlws. Compartilhar este post Link para o post Compartilhar em outros sites
Raficcha 1 Denunciar post Postado Setembro 1, 2009 Bom, que bom que conseguiu, mas so explicando caso alguém um dia venha a precisar. "TRegFiles = record" retornou erro pois estas declarações devem ser volocadas logo após a diretiva "type" da unit, antes das declarações das classes Compartilhar este post Link para o post Compartilhar em outros sites