|
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
leo_bruno Profissional
Registrado: Sexta-Feira, 16 de Abril de 2010 Mensagens: 666
|
Enviada: Qui Mai 10, 2018 1:15 pm Assunto: {resolvido} sequencia alfa numerica |
|
|
Olá Pessoal:
Preciso de ajuda com um algorítmo pra retornar a proxima sequencia alfanumerica valida.
Eu quero passar uma string com o valor atual, o tamanho da string e receber a proxima sequencia valida.
a constante com as posicoes seria:
Código: |
const
cSeq = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
Deste modo, teriamos:
001, 002, 003 ... 009, 00A e assim sucessivamente.
Após 00Z seria 011, 012, 013 ... 019, 01A, 01B etc.
Alguem pode me ajudar?
Obrigado
Editado pela última vez por leo_bruno em Sex Mai 11, 2018 3:06 pm, num total de 1 vez |
|
Voltar ao Topo |
|
|
strak2012 Colaborador
Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Qui Mai 10, 2018 8:09 pm Assunto: |
|
|
Código: | function GeradorSequenciaAlfaNum(index: integer): string;
const
cSeq = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var
a, b, c: integer;
ix: integer;
begin
ix := 0;
result := '';
for a := 1 to length(cSeq) do
for b := 1 to length(cSeq) do
for c := 1 to length(cSeq) do
begin
inc(ix);
if ix = index then
begin
result := cSeq[a] + cSeq[b] + cSeq[c];
exit;
end;
end;
end;
|
modo de uso
Código: | edit1.text:=GeradorSequenciaAlfaNum(100); // 100 é a sequencia de numero 100 ou seja '02R'
ou
for x:=1 to 500 do
memo1.lines.add(GeradorSequenciaAlfaNum(x)); // neste caso o memo vai receber as 500 primeiras seguencias
|
Deste modo, teriamos:
001, 002, 003 ... 009, 00A e assim sucessivamente.
Após 00Z seria 011, 012, 013 ... 019, 01A, 01B etc. // obs depois do 00Z o proximo deveria ser 010 e não 011
Espero que lhe ajude no que estar a precisar. _________________ Tudo podemos quando tudo sabemos! |
|
Voltar ao Topo |
|
|
leo_bruno Profissional
Registrado: Sexta-Feira, 16 de Abril de 2010 Mensagens: 666
|
Enviada: Sex Mai 11, 2018 2:56 pm Assunto: |
|
|
Obrigado pela resposta amigo.
Acabei chegando num algoritmo diferente do seu.
Código: |
class function TStrUtils.GetSeqAlfaNum(var aStrAtual: string): string;
var
I: integer;
_Novo: char;
begin
I := length(aStrAtual);
result := aStrAtual;
while I > 0 do
begin
if GetChar(aStrAtual[I], _Novo) then
begin
result[I] := _Novo;
I := 0;
end
else
begin
result[I] := '0';
Dec(I);
end;
end;
end;
function GetChar(aAtual: char; var ret: char): boolean;
const
cSeq = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
begin
result := false;
if (Pos(aAtual, cSeq) + 1) <= length(cSeq) then
begin
ret := cSeq[Pos(aAtual, cSeq)+1];
result := true;
end;
end;
|
o método getchar, retorna false se o indice da posicao atual +1 estiver fora da constante cSeq.
Desta forma, no método GetSeqAlfaNum, desce uma posição e chama o metodo interno mais uma vez, sucessivamente ate um resultado ser encontrado,
strak2012 escreveu: | Código: | function GeradorSequenciaAlfaNum(index: integer): string;
const
cSeq = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var
a, b, c: integer;
ix: integer;
begin
ix := 0;
result := '';
for a := 1 to length(cSeq) do
for b := 1 to length(cSeq) do
for c := 1 to length(cSeq) do
begin
inc(ix);
if ix = index then
begin
result := cSeq[a] + cSeq[b] + cSeq[c];
exit;
end;
end;
end;
|
modo de uso
Código: | edit1.text:=GeradorSequenciaAlfaNum(100); // 100 é a sequencia de numero 100 ou seja '02R'
ou
for x:=1 to 500 do
memo1.lines.add(GeradorSequenciaAlfaNum(x)); // neste caso o memo vai receber as 500 primeiras seguencias
|
Deste modo, teriamos:
001, 002, 003 ... 009, 00A e assim sucessivamente.
Após 00Z seria 011, 012, 013 ... 019, 01A, 01B etc. // obs depois do 00Z o proximo deveria ser 010 e não 011
Espero que lhe ajude no que estar a precisar. |
|
|
Voltar ao Topo |
|
|
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|