Shell   22-11-2021, 17:36
#1
Buenas!.

Pues en este ejemplo es donde estuve "complicándome" con el carácter de tabulación.
Hice un ejemplo en Gambas donde usaba dos colores y luego con los "mismos colores" y también el mismo ejemplo pero
para Python con la librería Tk.

Con Gambas:

[Imagen: DwPrv1D.png]

Con Python y la librería TkInter:

[Imagen: 4WpY9e5.png]

Aunque el nombre de la constante es el mismo para los colores, la configuración no lo es.
En TkInter es como más apagado.

Así que encontré un archivo en /usr/share/X11/rgb.txt

Donde se encuentran todas las configuraciones de colores y creé un ejemplo para poder leerlas.
¿ Sabéis cuantas configuraciones encontré con nombres distintos y configuraciones que podían ser iguales ?
Un total de: 753 configuraciones!.

Y es que podemos encontrar por ejemplo: "floral white" y "FloralWhite"...

Entonces construí una especie de diccionario de sinónimos. Una colección invertida.

Original, ejemplo, parte:

[Imagen: QCibQOY.png]


Y con la inversión puede ser así:

[Imagen: fErYsu9.png]

Código:
Public Sub Form_Open()

  Dim fichero As String
  Dim ruta As String = "/usr/share/X11/rgb.txt"
  Dim linea As String
  Dim nombredelcolor As String
  Dim posicion As Integer
  Dim ccolores As New Collection
 
  Try fichero = File.Load(ruta)

  For Each linea In Split(fichero, "\n", "'", True, False)
    If Left(linea, 1) = "!" Or IsNull(linea) Then
      Continue
    Else
      'Lugar donde se encuentra el primer caracter tabulador por la derecha
      posicion = RInStr(linea, "\t")
      'El nombre del color se encuentra en una posición más allá del caracter tabulador hasta el final
      nombredelcolor = Mid(linea, posicion + 1)
      'La nueva linea de texto ya no va a contener el nombre del color
      linea = Trim(Left(linea, posicion))
      'Sustituyo todos los caracteres de tabulación por espacios
      linea = Replace(linea, "\t", " ")
      'Añado los valores RGB en decimal como texto y como clave el nombre del color
      ccolores.Add(linea, nombredelcolor)            
    Endif
  Next

  If Error Then
    Print Subst("No encontré el archivo &1 en &2", Split(ruta, "/").last, ruta)
  Else
    Print "He encontrado " & ccolores.Length & " configuraciones de colores con repetición." '753
  Endif
 
  InvertirColeccion(ccolores)
 
End

Public Function InvertirColeccion(clavevalor As Collection) As Collection
    
  Dim valores_clave As New Collection
  Dim valor As String
  Dim clave As String
  Dim aclaves As String[]
 
  For Each valor In clavevalor
    'Obtengo una clave
    clave = clavevalor.Key
    'Compruebo que el valor no existe como clave en valores_clave
    If Not valores_clave.Exist(valor) Then
      'En caso de no existir. Creo un array que va contener las claves que sus valores son iguales
      aclaves = New String[]
      aclaves.Add(clave)
      'Asigno a la coleccion como valores el array de claves y como clave el valor que es el mismo con las claves de clavevalor
      valores_clave[valor] = aclaves
    Else
      'Si ya existe una clave valor, añado otra clave de clavevalor al array
      valores_clave[valor].Add(clave)      
    Endif
  Next
  Print "He encontrado " & valores_clave.Length & " configuraciónes de colores sin repetición " '505
 
  Return valores_clave
 
End


Y ahora pues estoy intentando crear un ejemplo que me muestre en pantalla todas esas configuraciones con colores. Smile
Os subo la parte que maneja las colecciones con los colores.

Saludos
Archivos adjuntos
.gz
ColoresDelSistema-0.0.1.tar.gz (Tamaño: 12.93 KB Descargas: 1)

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
  
Usuarios navegando en este tema: 1 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.