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:
Con Python y la librería TkInter:
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:
Y con la inversión puede ser así:
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.
Os subo la parte que maneja las colecciones con los colores.
Saludos