Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
Generar Un Identificador único Universal
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Generar Un Identificador único Universal 
 
Hola a todos.
Necesitaba generar un identificador universal en un programa y se me ocurrió esta función que usa ordenes de la shell de linux.
Public Function UUIDGen() As String ''Devuelve un Identificador único universal generado mediante la orden <b>uuidgen</b>

  Dim str As String

  Shell "uuidgen" To str

  If String.Len(str) > 36 Then
    str = String.Mid(str, 1, 36)
  Endif

  Return str

End
 

Pero me gustaría saber si en gambas hay algun componente o función que genere dicho identificador sin tener que usar shell.
¿Alguna idea?
Saludos.
 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Generar Un Identificador único Universal 
 
tincho escribió: [Ver mensaje]
... sin tener que usar shell.
¿Alguna idea?


Yo propondría una solución con llamada de funciones externas:

Library "libuuid"

' void uuid_generate(uuid_t out)
' Create a new unique UUID value.
Private Extern uuid_generate(_out As Byte[])

' void uuid_unparse(const uuid_t uu, char *out)
' convert a UUID from binary representation to a string.
Private Extern uuid_unparse(uu As Byte[], _out As Byte[])


Public Sub Main()

  Dim ot, us As New Byte[37]
  
  uuid_generate(ot)
  
  uuid_unparse(ot, us)
  
  Print String@(us.Data)

End

 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Generar Un Identificador único Universal 
 
Y yo propondría uno basado en la función now() que incluya los milisegundos. Esa no falla, es de gambas y es sencilla.
Algo así: (cito de memoria)

format(now(),"yyyymmddhhmmss")&str(timer)

Saludos
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Generar Un Identificador único Universal 
 
vuott escribió:  
tincho escribió:  
... sin tener que usar shell.
¿Alguna idea?


Yo propondría una solución con llamada de funciones externas:

Library "libuuid"

' void uuid_generate(uuid_t out)
' Create a new unique UUID value.
Private Extern uuid_generate(_out As Byte[])

' void uuid_unparse(const uuid_t uu, char *out)
' convert a UUID from binary representation to a string.
Private Extern uuid_unparse(uu As Byte[], _out As Byte[])


Public Sub Main()

  Dim ot, us As New Byte[37]
  
  uuid_generate(ot)
  
  uuid_unparse(ot, us)
  
  Print String@(us.Data)

End


Gracias por el aporte Vuott.
Cual seria la forma de incorporar esto a un proyecto gambas?
Yo suelo crear funciones que pongo dentro de un módulo, y luego las llamo al estilo Elmodulo.Lafuncion() pero tu ejemplo tiene variables globales así que lo correcto seria crear una clase sola para esto no?

Saludos.
 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Generar Un Identificador único Universal 
 
tincho escribió:  
pero tu ejemplo tiene variables globales...


Do... donde están las variables globales ?  

Private Extern ....... es una declaración de Función externa.
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Generar Un Identificador único Universal 
 
tincho escribió:  

Cual seria la forma de incorporar esto a un proyecto gambas?
... lo correcto seria crear una clase sola para esto no?


Si no tiene Eventos, puedes usar un Modulo.

Por ejemplo, tenemos un Modulo, que se llama Module1.
Este Modulo tiene una Función que se llama UuidModulo ( ) y devuelve una cadena:

Library "libuuid"

' void uuid_generate(uuid_t out)
' Create a new unique UUID value.
Private Extern uuid_generate(_out As Byte[])

' void uuid_unparse(const uuid_t uu, char *out)
' convert a UUID from binary representation to a string.
Private Extern uuid_unparse(uu As Byte[], _out As Byte[])


Public Sub UuidModulo() As String

Dim ot, us As New Byte[37]

uuid_generate(ot)

uuid_unparse(ot, us)

Return String@(us.Data)

End

 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Generar Un Identificador único Universal 
 
shordi escribió: [Ver mensaje]
Y yo propondría uno basado en la función now() que incluya los milisegundos. Esa no falla, es de gambas y es sencilla.
Algo así: (cito de memoria)

format(now(),"yyyymmddhhmmss")&str(timer)

Saludos

Si, de hecho es lo que uso ahora mismo.
Format(Now(), "yyyy-mm-dd-hh-nn-ss-")

Pero quería aprender sobre este UUID ya que se usa en muchos sitios.
Lo curioso es que los UUID (no se si todos los casos) también incluyen un timestamp
Por ejemplo acá hay una libreria que seguro usa mucho Vuott  
https://pythonhosted.org/time-uuid/
Ejemplo de código
import uuid
import time_uuid

my_uuid = uuid.UUID('{12345678-1234-5678-1234-567812345678}')
ts = time_uuid.TimeUUID(bytes=my_uuid.bytes).get_timestamp()
 

Bueno algo así es lo que me interesaría que exista en gambas.
Pero otro tema es que buscar algo en gambas es muy difícil. Pero pondré otro post para este tema.
Saludos.
 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Generar Un Identificador único Universal 
 
tincho escribió:  
.... una libreria que seguro usa mucho Vuott  


Aaaaaaargh !    
Vade retro, Satan !
Vade retro, Serpens !
  
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Generar Un Identificador único Universal 
 
vuott escribió:  
Do... donde están las variables globales ?  
Private Extern ....... es una declaración de Función externa.

Ok, si me refiero a eso.
Valga la redundancia estas declaraciones son externas a la función.
Saludos.
 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Generar Un Identificador único Universal 
 
shordi escribió:  
Y yo propondría uno basado en la función now() que incluya los milisegundos. Esa no falla, es de gambas y es sencilla.
Algo así: (cito de memoria)

format(now(),"yyyymmddhhmmss")&str(timer)

Saludos


me pregunto si no existe la posibilidad de dos llamadas seguidas a esta función den el mismo resultado, con lo que el identificador no seria único
 



 
tercoIDE - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes URM (Universal ROM Manager) drjuano Aplicaciones/Fragmentos de Código 17 Domingo, 08 Diciembre 2013, 23:48 Ver último mensaje
misael
No hay nuevos mensajes DBeaver. Manager Universal De Base De Datos Shell Bases de Datos 4 Martes, 11 Marzo 2014, 20:21 Ver último mensaje
jguardon
No hay nuevos mensajes Generar Reportes En Pdf alan General 1 Martes, 22 Marzo 2011, 19:04 Ver último mensaje
shordi
No hay nuevos mensajes Generar Informes magicboss Controles/Librerías/Componentes 1 Miercoles, 01 Diciembre 2010, 20:44 Ver último mensaje
jsbsan
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario