Gerando arquivo txt dividido em partes delphi

Delphi

03/09/2009

Ola, esse é o meu primeiro post aqui no forum, não consigo fazer o codigo abaixo gerar arquivos pequenos sem gerar o arquivo maior.

O sistema gera um arquivo enorme exemplo 16 digitos, ultrapsa 200gb e só então divide em partes de 5mb.

O que eu estou tendo fazer e não gerar o arquivo grande e sim gerar arquivos pequenos em ordem txt1.txt, txt2.txt, e etc.... ate acabar as sequencias.


alguém se habilita?



const 
 _cst_validchars = ´ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789´; 
 
function Tform1.CharInStr( const aChar : Char ) : Integer; 
var 
  i : Integer; 
  Achou : Boolean; 
begin 
   i:=0; 
   Achou := False; 
   while (not Achou ) and (i<length(_cst_validchars)) do begin 
         inc(i); 
         Achou := ( aChar = _cst_validchars[i] ); 
   end; 
 
   // Se encontrar, tá certo. 
   // Se não encontrar retornaremos o ultimo caracter valido 
   // na esperança de sairmos de algum loop. 
   Result := i; 
end; 
 
procedure TForm1.Sequencia( const aTam : Integer;  var aSequencia : String; var aUltimo : Boolean ); 
var 
  i,k,l  : Integer; 
begin 
    while Length(aSequencia)<aTam  do 
          aSequencia := aSequencia + _cst_validchars[1]; 
 
    aUltimo := False; 
    l := Length( _cst_validchars ); 
    k := aTam; 
    i := CharInStr(aSequencia[k]); 
    // Ainda tem caracteres validos para listar? 
    if i<l then 
       // Sim. 
       aSequencia[k] := _cst_validchars[i+1] 
    else begin 
         // Não. temos que retroceder. 
         // Esse laço vai procurar o caracter na combinação 
         // que pode ser incrementado. 
         repeat 
               dec(k); 
               i := CharInStr( aSequencia[k] ); 
         until (k=0) or (i<l); 
         // Encontramos o caracter que pode ser incrementado? 
         if k>=1 then begin 
            // Incrementado caracter encontrado 
            aSequencia[k] := _cst_validchars[i+1]; 
            // Resetando os outros a partir de k 
            while k<aTam do begin 
                  inc(k); 
                  aSequencia[k] := _cst_validchars[1]; 
            end; 
         end 
         else 
            aUltimo := True; 
    end; 
end; 
 
procedure TForm1.QuebraArquivo(FileName: string; MaxSizeByte: LongInt = 524288); 
 var 
     Arq, Arq2 : file of byte; 
     buffer: array [1 .. 524288] of byte;//buffer de 1MB 
     bufferSize: integer; 
     cont, cont2 : integer; 
 begin 
     AssignFile(Arq, FileName); 
     Reset(Arq); 
     bufferSize := Length(buffer); 
     cont := 0; 
     while(not(eof(Arq))) do 
     begin 
         inc(cont); 
         AssignFile(Arq2, FileName+inttostr(cont)); 
         Rewrite(Arq2); 
         //faz duas leituras de 512Kb 
         for cont2 := 1 to Round(MaxSizeByte/length(buffer))+10 do 
         begin 
             BlockRead(Arq, buffer, bufferSize, BufferSize); 
             BlockWrite(Arq2, buffer, BufferSize, BufferSize); 
         end; 
         CloseFile(Arq2); 
     end; 
     CloseFile(Arq); 
 end; 
 
 
 
 
   procedure TForm1.Button2Click(Sender: TObject); 
var 
  S : String; 
  Ultimo : Boolean; 
  O : TextFile; 
 Fname : String; 
 
   begin 
      Fname := ´E:\codigos\log.txt´; 
AssignFile(O,Fname); 
Rewrite(O); 
  Ultimo := False; 
 
   while not Ultimo do begin 
        Sequencia( 16, S, Ultimo ); 
 
 Writeln(O,S); 
 
 Edit1.Text:=(S); 
        end; 
 
CloseFile(O); 
  QuebraArquivo(´E:\codigos\log.txt´); 
        end;




Junior2009

Junior2009

Curtidas 0
POSTAR