Ir ao conteúdo
  • Cadastre-se

jw2009

Membro Júnior
  • Posts

    2
  • Cadastrado em

  • Última visita

Reputação

0
  1. 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
  2. Ola Amigos do forum, faz um bom tempo que parei de mexer com delphi e agora estou tendo que reapreender, estou tendo dificulade para gerar uma especie de lista com numeros e letras que nao se repitam, de maneira alguma começando dessa maneira: usando 8 digitos exemplo AAAAAAAA AAAAAAAB AAAAAAAC assim por diante AAAAAAA1 AAAAAAA9 AAAAAABA AAAAAABB AAAAAABC AAAAAA1A AAAAAA9A AAAAAA1B que so acabe apos usar todas as combinacoes possiveis dividindo em arquvivos de de 35000 sequencias ou talvez em 3 mb salvando em arquivo txt os codigos que possuo sao os seguintes: esse gera codigos aleatorios porém um so de cada vez, gostaria que fosse gerando ate nao ter mais combinacoes possiveis e então parar. Código: procedure TForm1.Button2Click(Sender: TObject); var i:integer; const letras='ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'; digitos=8; begin for i:=1 to digitos do Memo1.Text:=memo1.Text+letras[random(length(letras))+1]; end; esse outro faz gerar ate o numero colocado porém so numeros Código: procedure TForm1.Button1Click(Sender: TObject); var x: integer; begin for x := 0 to Pred(50) do begin Memo1.Lines.Add(IntToStr(x)); end; end; Esse outro carega arquivo txt, apaga a segunda linha e grava no arquivo txt a alteracao Código: procedure TForm1.Button3Click(Sender: TObject); Var Lista:TStringList; i:Integer; Begin Lista:=TStringList.Create; Lista.LoadFromFile('c:\log.txt'); For i:=0 to Lista.Count -1 do begin if Lista[i]='2' then Lista.Delete(i); End; Lista.SaveToFile('c:\log.txt'); Lista.Free; end; Como posso juntar esses 3 codigos para gerar letras e numeros e gravar no arquivo conforme sao geradas as sequencias ?

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...