Alguem sabe se o Delphi tem algo assim?

Delphi

26/08/2003

Ou tenho que fazer testes ate chegar no utimo item 200(DM).

Eu tenho um campo que conta a quantidade de itens em um pedido, que pode ir ate 200 itens mas o campo eh caracter de 2 posicoes, Se a qtd de itens for > que 99 numera os itens com letras

ex:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,......99, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, AA, AB, AC, AD, AE,......, BA, BB, BC, BD, BE,......CA, CB, CC, CD, CE,......)


Claudio_f

Claudio_f

Curtidas 0

Respostas

Castilho

Castilho

26/08/2003

Eu fiz um lance desse uma vez, vc precisa criar uma tabela com tds as letras do alfabetos, e colocar sua função para buscar as letras em forma de comparação de números e letras.


GOSTEI 0
Eniorm

Eniorm

26/08/2003

Ou tenho que fazer testes ate chegar no utimo item 200(DM). Eu tenho um campo que conta a quantidade de itens em um pedido, que pode ir ate 200 itens mas o campo eh caracter de 2 posicoes, Se a qtd de itens for > que 99 numera os itens com letras ex: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,......99, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, AA, AB, AC, AD, AE,......, BA, BB, BC, BD, BE,......CA, CB, CC, CD, CE,......)


tá querendo criar um gerador de senha é ?!?!?!


GOSTEI 0
Allen74

Allen74

26/08/2003

Cláudio,

Quais são as letras permitidas no código? Vão de A até Z, mas estão incluídos os caracteres da língua inglesa (K,W,Y)?

A sequência começando com A, vai de A0, A1 até AZ para depois começar com B0 até BZ?

Pelas minhas contas, o item de número 200 seria representado pelo código CS ao invés de DM, se o alfabeto definido para a representação fosse:

[b:5d5a6384f3]0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ[/b:5d5a6384f3]

Por isso imaginei que algumas letras podem não estar contidas no código ou então a sequência não vai até a última letra do alfabeto.


GOSTEI 0
Okama

Okama

26/08/2003

Me desculpe o óbvio, mas não seria melhor contar com inteiro, ou aumentar uma casa?


GOSTEI 0
Claudio_f

Claudio_f

26/08/2003

Ola Allen,

Eh isso mesmo, eu pretendo incluir todas as letras, inclusive (K,W,Y), A sequencia comecaria (depois do item 99) com A0, A1 ate AZ, e depois comecaria novamente com a letra B0 ate BZ.

O alfabeto seria mesmo: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ.

Eu tinha pensado em fazer como o Castilho sugeriu criar uma tabela com todas as letras do alfabeto, mas penso que a gravacao de um pedido grande se tornaria muito lenta, mas se nao tiver outra maneira vou ter de fazer assim mesmo.

O banco que eu uso eh Oracle, e o sistema atual faz isso mas eh desenvolvido em um dialeto de Clipper usado pela Microsiga, e eu nao tenho acesso aos fontes para saber como ele faz.

---

Oi Okama, estou desenvolvendo um modulo a parte do sistema que usamos na empresa, mas usando a mesma base de dados, por isso nao posso alterar o tamanho e as caracteristicas dos campos.


GOSTEI 0
Nildo

Nildo

26/08/2003

Criar uma tabela seria loucura.
Acho que agora seria uma hora perfeita para se auto-desafiar com esta lógica de programação.
Uma dica: Ord(´A´) = 65


GOSTEI 0
Allen74

Allen74

26/08/2003

Cláudio,

Neste caso, você pode utilizar estas duas funções que criei:

function Codifica (num : integer) : string;
const
  Alfabeto = ´0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ´;
var
  D0,D1,Dif : integer;
begin
  Result := ´´;
  Dif := 10 * Length(Alfabeto) - 100;

  if (num >= 0) and (num <= 99)
  then Result := IntToStr(num)
  else begin
    num := num + Dif;
    D0 := num mod Length(Alfabeto) + 1;
    D1 := num div Length(Alfabeto) + 1;
    Result := Alfabeto[D1]+Alfabeto[D0];
  end;
end;

function Decodifica (cod : string) : integer;
const
  Alfabeto = ´0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ´;
var
  D0,D1,Dif : integer;
begin
  Result := -1;
  Dif := 10 * Length(Alfabeto) - 100;

  If Length(Cod) in [1..2]
  then begin
    If Length(cod) = 1
    then Cod := ´0´+Cod;

    D0 := Pos(Cod[2], Alfabeto) - 1;
    D1 := Pos(Cod[1], Alfabeto) - 1;

    If (D0 < 10) and (D1 < 10)
    then Result := D1 * 10 + D0
    else Result := (D1 * Length(Alfabeto) + D0) - Dif;
  end;
end;


A primeira irá codificar seu inteiro para uma string de dois caracteres, de acordo com as regras já estabelecidas e com o alfabeto informado. A segunda faz o caminho inverso.

O limite de representação será 1035, que corresponde a ZZ


GOSTEI 0
Claudio_f

Claudio_f

26/08/2003

Blz pessoal,

Allen vou testar as tuas funcoes, valeu pela forca.
:D


GOSTEI 0
POSTAR