Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-02-2008
luxus luxus is offline
Miembro
 
Registrado: oct 2004
Posts: 134
Poder: 20
luxus Va por buen camino
Generación de Código Alfanúmerico Automatico

Hola Amigos,

Vamos a ver si me explico para no liarnos y a ver si me podeis echar una mano.

Tengo que implmentar un pequeño programa para que un codigo alfanumérico de 14 dígitos se autoincremente de forma automática. Es decir, si el código es LX345J8ON9913 el siguiente codigo sea LX345J8ON9914 y así sucesivamente. ¿Sabeis si hay un programa con prestaciones similares y donde puedo descargarlos? ¿Alguna sugerencia para su implementación?

Gracias y un saludo a todos.
Responder Con Cita
  #2  
Antiguo 13-02-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Bueno, depende de cómo funcione ese código alfanumérico. El ejemplo que has puesto se entiende, pero, ¿y si el código es 1234567890AAA9? ¿Qué pasaría? ¿Se convertiría en 1234567890AAB0? ¿O en 1234567890AAAA? Dinos, cómo funciona con las letras, por favor. Gracias.


Salu2.

P.D.: También sería bueno saber si tienen una cierta estructura (tantas letras, tantos números en ciertas posiciones) o si es completamente mezclado.
Responder Con Cita
  #3  
Antiguo 13-02-2008
luxus luxus is offline
Miembro
 
Registrado: oct 2004
Posts: 134
Poder: 20
luxus Va por buen camino
Hola ixMike,

Gracias por tu ayuda. Con respecto a tus dudas, del ejemplo que te mostré el siguiente codigo generado será el primero de los ejemplos.

En cuanto a la estructura, no hay ninguna secuencia determinada, solamente es una combinación de numeros y letras mezclados.

Gracias nuevamente por tu ayuda.
Responder Con Cita
  #4  
Antiguo 13-02-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Pero sigo sin saber, ¿después del 9 va un 0, un 1 o una A? ¿y después de una Z? ¿Va un 0, un 1 o una A?
Responder Con Cita
  #5  
Antiguo 13-02-2008
luxus luxus is offline
Miembro
 
Registrado: oct 2004
Posts: 134
Poder: 20
luxus Va por buen camino
Hola ixMike,

En respuesta a tu pregunta, después de un 9 irá un 0, incrementándo el número o letra del lado izquierdo. Por ejemplo, si tenemos 1234567890AAA9 el siguiente será 1234567890AAB0.

Si llegamos al caso de la combinación 1234567890AAZ9 el siguiente sería 1234567890ABA0, y así sucesivamente.

Espero que ahora me haya explicado mejor.

Gracias y un saludo
Responder Con Cita
  #6  
Antiguo 13-02-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
ok, ya se entiende

Prueba con algo así:

Código Delphi [-]
var //variables globales
  codigo: array[1..14] of char;
//nota: así podrás usar la variable como un string.

procedure Incrementar(pos: integer);
begin
if (codigo[pos] in ['0'..'8']) or (codigo[pos] in ['A'..'Y']) then codigo[pos]:=Ord(codigo[pos]+1) else
if codigo[pos]='9' then
  begin
  codigo[pos]:='0';
  incrementar(pos-1);
  end
else if codigo[pos]='Z' then
  begin
  codigo[pos]:='A';
  incrementar(pos-1);
  end;
end;


Nótese que tú sólo tendrás que llamar a la función con el parámetro 14 (el último caracter). Lo del parámetro es para la recursividad, y así optimizar el código.

Espero que te sirva.



Salu2.


Edito: tenía un "bug" donde la fución Ord. Solucionado (gracias Delphius por probarlo).

Última edición por ixMike fecha: 15-02-2008 a las 20:18:54.
Responder Con Cita
  #7  
Antiguo 14-02-2008
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Me parece que esta mal como lo están planteando....y si el código termina en letra???

Me parece podría definirse un número de base 24, es decir la secuencia posibles valores para cualquier dígito vendría dada por:

01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ

pero aqui tenemos las siguientes variantes:

despues de 0 sigue A y despues de Z sigue 0
despues de Z sigue A y despues de 0 sigue 1

tendrías que escoger cuales van a ser las reglas a aplicar ya que como puedes ver solo es posible aplicar 2 a la vez
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #8  
Antiguo 14-02-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Yo creo que tal cual está planteado las letras son independientes de los números. Y así lo he planteado yo en mi código.

En otras palabras: las letras son siempre letras y los números siempre números.

Así, a A9 sigue B0 y a 3Z sigue 4A.

Al menos así lo he entendido, según la explicación.


Salu2.
Responder Con Cita
  #9  
Antiguo 14-02-2008
Avatar de PeterPunk
PeterPunk PeterPunk is offline
Miembro
 
Registrado: ene 2008
Ubicación: Vigo
Posts: 22
Poder: 0
PeterPunk Va por buen camino
Por curiosidad, ¿qué sigue a Z9?, ¿A0, AA0, 1A0? ¿otra distinta?
Responder Con Cita
  #10  
Antiguo 14-02-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Cita:
Empezado por PeterPunk Ver Mensaje
Por curiosidad, ¿qué sigue a Z9?, ¿A0, AA0, 1A0? ¿otra distinta?
yo diría que:

-como el código es de 14 dígitos, a 00000000000000Z9 sigue 000000000001A0.
-como el que has puesto es de sólo dos, pues un reset a A0 o se añade otro dígito, 1A0, o también AA0, ya que el dígito anterior no estaba...

de todas formas, en un código de 14 iniciado previamente de alguna forma no se creará tanta confución (claro, a no ser que sea 9Z9Z9Z9Z9Z9Z9Z )
Responder Con Cita
  #11  
Antiguo 14-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Disculpen que meta más leña al fuego... pero hay que preguntarlo ahora:
¿Se contempla la Ñ?

Esto lo digo porque muchas veces cuando hablan de letras, y más cuando involucra al abecedario entero, se olvidan que el castellaño tiene una letra más.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #12  
Antiguo 14-02-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Cita:
Empezado por Delphius Ver Mensaje
Disculpen que meta más leña al fuego... pero hay que preguntarlo ahora:
¿Se contempla la Ñ?

Esto lo digo porque muchas veces cuando hablan de letras, y más cuando involucra al abecedario entero, se olvidan que el castellaño tiene una letra más.

Saludos,
Mi código no comptempla la Ñ
Responder Con Cita
  #13  
Antiguo 14-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por PeterPunk Ver Mensaje
Por curiosidad, ¿qué sigue a Z9?, ¿A0, AA0, 1A0? ¿otra distinta?
Cita:
Empezado por ixMike Ver Mensaje
yo diría que:

-como el código es de 14 dígitos, a 00000000000000Z9 sigue 000000000001A0.
-como el que has puesto es de sólo dos, pues un reset a A0 o se añade otro dígito, 1A0, o también AA0, ya que el dígito anterior no estaba...

de todas formas, en un código de 14 iniciado previamente de alguna forma no se creará tanta confución (claro, a no ser que sea 9Z9Z9Z9Z9Z9Z9Z )
A ver... no estamos liando. Y es normal que suceda porque no esta bien aclarada la regla.

1. Leer caracter N-ésimo:
2. Evaluar caracter:
2.1. Si es numero:
2.1.1. incrementar valor según módulo 10.
2.1.2. Si caracter es ahora 9:
2.1.3. Volver a paso 1 siendo el caracter (N-1)-ésimo.
2.2. Si es letra:
2.2.1. incrementar valor caracter.
2.2.2. Si caracter es ahora Z:
2.2.3. Volver a paso 1 siendo el caracter (N-1)-ésimo.

¿Voy bien?
Ahora mi pregunta es ¿que hacer cuando se llega al final de la cadena y si el valor es 9 o Z?

De cualquier modo... no está bien dicho la cosa.

Cita:
Empezado por ixMike Ver Mensaje
Mi código no comptempla la Ñ
Cita:
Empezado por AzidRain Ver Mensaje

01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ
Pues precisamente a eso me refiero. Tanto tu como Azid no han contemplado la Ñ. ¿La usamos?

luxus, debes definir concretamente como son las reglas para que el algoritmo funcione como debe.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #14  
Antiguo 14-02-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por Delphius Ver Mensaje
Disculpen que meta más leña al fuego... pero hay que preguntarlo ahora:
¿Se contempla la Ñ?
Si queremos que sea portable, no se debe contemplar, muy a pesar de cervantes
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #15  
Antiguo 15-02-2008
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Ya se me van a quemar vivo pero para mi (y para muchos) la Ñ no es letra, como tampoco lo es "Ch" y "Ll".
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #16  
Antiguo 15-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por AzidRain Ver Mensaje
Ya se me van a quemar vivo pero para mi (y para muchos) la Ñ no es letra, como tampoco lo es "Ch" y "Ll".
Tal vez no se la use mucho... pero para mi tiene uso. Es una letra... si figura en el diccionario... pues ¡aceptarla!

En fin, no me hagas caso.... hoy he estado un poco cabrón
Es muy cierto que la Ñ se la pasan de largo, y es por ese motivo que yo la incluyo.
Pero aqui, para "práctica" podemos obviarla. Vale.

Quería preguntarte... como lo estás entendiendo a esto?
Pues mo me hice lio

EDITO:
¿ Y luxus va a dar presencia, o explicar mejor el asunto? Porque hace 4 horas estuvo presente y si al menos hubiera dicho una mínima explicación hubiera sido mejor. Porque al modo en lo veo, pareciera que le estamos haciendo la tarea.

Saludos
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 15-02-2008 a las 05:10:13.
Responder Con Cita
  #17  
Antiguo 15-02-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por Delphius Ver Mensaje
pareciera que le estamos haciendo la tarea.
No es que pareciera... es que lo es
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #18  
Antiguo 15-02-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
uy, uy.. discusión lingüística... ¡me apunto!

Bueno, lo primero, es que uno no puede decir "esto me parece... esto no me parece...". Hay definiciones para cada cosa. Entre esas cosas, la de letra.

Si leéis el enlace (primera acepción) ya queda indiscutible que la ñ es una letra. Pero, ¿qué pasa con "ch" y "ll"? Según la segunda acepción, tradicionalmente también son letras. Pero claro, tradicionalmente... ¿y ahora? Desde luego, tienen su propia pronunciación, pero claro, requieren de más de un signo gráfico para representarlas, es decir, más de una letra. Che y elle son cada una un fonema con dos letras. ¿Por qué no?

Ya se prodía mirar más allá, con esto del Unicode y los CodePoint, pero a fin de cuentas, eso no son más que "artimañas" para simplificar (informáticamente hablando) las cosas.


Y para no desvirtualizar el hilo... ¡luxus, ¿dónde c0~@ te has metido?! Que nos tienes en intríngulis. ¿Metemos la eñe o no? ¿Los números se mezclan con las letras o no?...



Salu2.
Responder Con Cita
  #19  
Antiguo 15-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Bueno... creo que no hace falta nombrar lo que sabemos... si luxus no pone de su parte... pues... no creo que le encontremos solución, por ahora yo voy a seguir adivinando:

NOTA: comienzo a contar de derecha a izquierda. Doy por supuesto que los carateres son dependientes exclusivamente del anterior. Y que debe incrementar su valor independiente de si es un número o una letra.

1. ¿Que sucede cuando el primer caracter es un 9?
1.1. Se convertiría en un 0 (cero). bien... y ¿ahora?
1.2. ...el caracter a su izquierda debe "incrementarse". Perfecto, y si es ¿9?

2. ¿Que sucede cuando el primer caracter es Z?
2.1. Se convertiría en A. ¿y ahora?
2.2. ... el caracter a su izquierda debe "incrementarse". Perfecto, y si es ¿Z?

Estas dos situaciones, me llevan a:

3. ¿Que sucede cuando el último caracter es un 9?
3.1. Lo incrementamos. Perfecto... se obtuvo un 0 (cero). ¿Que hacemos?
3.1.1. Reemplazamos ese cero por A, dando inicio a las letras. O bien,
3.1.2. No hacemos nada.

4. ¿Que sucede cuando el último caracter es Z?
4.1. Lo incrementamos. Perfecto... se obtuvo A. ¿Que hacemos?
4.1.1. No hacemos nada.

A lo que voy es que la regla, necesariamente debe ser posicional y no sólo del caracter. Voy a pedir que luxus defina concretamente como vienen las reglas. ¡Que hable! ¿O es que este hilo deberá quedar sin solución?

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 15-02-2008 a las 18:53:47.
Responder Con Cita
  #20  
Antiguo 15-02-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
a ver si entendi lo que explicas, necesitas recursividad, algo como esto:

declara unas variables globales:

Código Delphi [-]
nLista: array[1..14] of integer;
    procedure Incrementar(cCadena: String);
    procedure Aumentar(nIndice:Integer);

luego este es el codigo, le pasa la cadena como parametro al procedimiento incrementar y te devolvera una cadena incrementada segun la regla de la A-Z y 0-9

Código SQL [-]
procedure TForm1.Incrementar(cCadena: String);
var
   nCaracter: String;
   nIdx: Integer;
begin
   //Carga el vector de enteros
   for nIdx := 1 to 14 do
   begin
      nCaracter := Copy(cCadena, nIdx, 1);
      nLista[nIdx] := Ord(nCaracter[1]);
   end;

   //Recorre el vector aumentando las cifras
   Aumentar(14);

   //Arma de nuevo la cadena
   cCadena := '';
   for nIdx := 1 to 14 do
   begin
      nCaracter := Char(nLista[nIdx]);
      cCadena := cCadena + nCaracter;
   end;

end;

procedure TForm1.Aumentar(nIndice: Integer);
begin
   //si llego al principio se sale
   if nIndice <= 0 then
      Exit;
   //Aumenta un caracter en la posicion deseada
   nLista[nIndice] := nLista[nIndice] + 1;
   //Si es 91 quiere decir que viene de la Z, lo devuelve al 65 = A, incrementa el anterior
   if nLista[nIndice] = 91 then
   begin
      nLista[nIndice] := 65;
      Aumentar(nIndice - 1);
   end
   //Si es 58 quiere decir que viene del 9, lo devuelve al 48 = 0, incrementa el anterior
   else if nLista[nIndice] = 58 then
   begin
      nLista[nIndice] := 48;
      Aumentar(nIndice - 1);
   end;
end;
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ordenar una table numericamente por un campo alfanumerico jose.mendez Tablas planas 2 31-12-2007 17:56:16
longitud de un campo alfanumerico dtomeysoto SQL 2 10-03-2007 20:08:55
Generacion de scripts AMO Oracle 2 10-10-2005 17:55:15
Generación de archivos dcu jplj Varios 2 26-04-2005 21:44:29


La franja horaria es GMT +2. Ahora son las 14:11:51.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi