Ola amigos obrigado pelas sugestões algumas ja foram implementadas por mim e outros colegas , vejam o codigo abaixo e nos ajudem a melhorar, implementar.
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.Button1Click(Sender: TObject); var S : String; Ultimo : Boolean; Lista : TStringList; begin Lista:= TStringList.Create; S:= ''; // Ou um valor qualquer ex: '1234'; Ultimo := False; // ListBox1.Items.BeginUpdate; while not Ultimo do begin Sequencia( 5, S, Ultimo ); // ListBox1.Items.Add( S ); Lista.Add(S) end; // ListBox1.Items.EndUpdate; // Lista.Add(ListBox1.Items.GetText); Lista.SaveToFile('c:\log.txt'); Lista.Free; end; end.
o problema é que com 4 ate 5 carcteres tudo bem, mas com 6 ja falta memoria, por isso estou pensando em uma maneira de gravar direteamente para o arquivo em quanto ele esta criando as sequencias, assim a memoria ficaria livre para ir despejando para o arquivo.
O tamnho seria uns 8 mb eu axxo que da pra caregar tranquilo, tamb deveira ter um nome diferente a medida que ia sendo criado varios arquivos.
Se pudesemos fazer o sistema gerar os carcteres tipo
AAAAAAAA
AAAAAAAB
e nao começarar com
AA
AB
e so então chegar no 8 carcteres acho que iria diminuir o tamnho do arquivo e tamb o tempo de processamento.
não sei se consegui explicar duvidas temo ai.
alguma ideia de como podemos fazer?
Abraço