Contador de separadores de campos

En una gran aseduradora nos volcaban ficheros inmensos de datos de operaciones sobre polizas desde el host, ficheros con millones de registros. Eran ficheros planos y ellos mismos elegían el carácter separador de campos. Esos ficheros los subíamos, a su vez, a otra base de datos que los cargaba utilizando, para interpretar la separación de campos, el carácter indicado en cada caso. Esta carga se realizaba empleando el programa de carga suministrado junto con el sistema de gestión de la base de datos.

El proceso de carga era lento y, además, con frecuencia, el carácter que habían elegido, aparecía en algún campo de texto de algún registro. Por ejemplo, elegían el asterisco y algunos campos de observaciones contenían asteriscos. Al llegar al primer registro con más separadores de los esperados el proceso de carga abortaba tras horas de ejecución.

La solución era programar un comprobador de ficheros, muy rápido, que antes de iniciar el proceso de carga, comprobara que todas las líneas del fichero contuvieran el mismo números de caracteres separadores de campo, asumiendo como correcto el número de separadores de la primera línea del fichero. Y sólo comenzar la carga a la base de datos tras comprobar que el fichero era correcto.

Hacía ya mucho tiempo que no programaba en C y esta era una ocasión para volver a él. El programa se llama chksep.exe, esta hecho en lenguaje C en pocas horas, por lo que seguro que se puede mejorar. Se ejecuta como chksep 42 < fichero.txt, donde el 42 es el código ASCII del caracter *, que era el separador de campos habitual, aunque se puede elegir cualquier otro carácter, por ejemplo, chksep 59 < fichero.txt, para el punto y coma.

El programa visualiza las líneas donde el número de separadores de campo es diferente al de la primera línea. En un computador portatil normal este programa es capaz de revisar un Giga en 2 minutos 15 segundos, lo que equivalía con los ficheros reales que nos daban a unos 800.000 registros por minuto. Por lo que en 5 ó 10 minutos se podía evitar que luego abortara una carga de horas. El programa también cuenta el número de líneas del fichero.

A continuación pongo el ciclo principal del programa y en el fichero PDF adjunto a este post el código fuente completo.

Me gustan mucho los programas eficaces de pocas líneas de código y que sean eficientes ya lo considero un regalo.


while((chrInp=getc(stdin)) != EOF)
{
       if(chrInp==sepChr) { sepCnt++; }     /* Es un separador */
  else if(chrInp==EOL)                 /* Es un salto de linea */
  {
    if(linCnt==1)                  /* Estabamos en la 1ª linea */
    {
      sepFst = sepCnt;   /* Referencia para el resto de lineas */
      printf("\n[%d] [%s] en la primera linea.", sepFst, sepStr);
    }
    else                                       /* Linea normal */
    {
      if(sepFst!=sepCnt)        /* Faltan o sobran separadores */
      {
        printf("\nlinea %d: [%d] [%s] en vez de [%d].",
               linCnt, sepCnt, sepStr, sepFst);
      }
    }
    linCnt++;             /* Incrementar el contador de lineas */
    sepCnt = 0;     /* Poner a cero el contador de separadores */
  }
}
printf("\nProcesadas [%d] lineas.", linCnt);
  

Página del abogado Bartolomé Quesada Valles

Página del abogado Bartolomé Quesada Valles

Realización del registro de dominio .es, diseño, maquetación, desarrollo y mantenimiento en internet de la primera versión de la página web del despacho de abogados de Bartolomé Quesada Valles.

Bartolomé Quesada Valles es abogado, tiene más de 20 años de ejercicio profesional y está colegiado en el Ilustre Colegio de Abogados de Madrid (ICAM).

Esta primera versión de la página web estuvo operativa desde mediados del verano de 2008 hasta inicios del verano de 2010.

Actualmente está en funcionamiento la segunda versión de esta página web, que ha sido desarrollada en Joomla! por Luis Torrijos.

Máximo común divisor de 2 números

Cálculo en Excel del máximo común divisor (MCD) de 2 números

Ejemplo de hoja Excel para calcular el máximo común divisor (MCD) entre 2 números.

El fichero Excel de Microsoft está formado por una sola hoja de cálculo en la que los 2 números para los que se quiere calcular su máximo común divisor se introducen en las celdas azules.

La hoja Excel visualiza en la zona gris los divisores encontrados y arriba en grande y azul el máximo común divisor.

Este ejemplo Excel tiene limitaciones en el tamaño de los números y el método de cálculo.

La versión es la de Excel 97-2003.

Poemas jué jù, dinastía Táng, en Excel

Poemas jué jù, dinastía Táng, en Excel

En 2008 comencé a plasmar en Excel el resultado de mis traducciones de poemas de la disnastía Táng que luego imprimía en formato PDF. Realmente, no sólo a plasmar, pues al final llegué a traducir directamente sobre Excel.

Desarrollé varios modelos de hojas Excel, de los cuales uno de los últimos va adjunto a este post. Cuando alguien de una multinacional o gran compañía consultora se empeñaba en enseñarme y presumir de sus fabulosas hojas financieras Excel entonces, en vez de mostrarle otras hojas financieras, yo terminaba por eseñarle estas hojas Excel de soporte a la traducción de poemas mediavales chinos y el show de hojas Excel se terminaba rápido.

Excel daba más soporte que mis experientos iniciales en PowerPoint, pues permitía automatizar muchas tareas, pero llegó un punto, como suele suceder con Excel, que la complejidad de las hojas y las fórmulas, y especialmente su repetición en todas las hojas, dificultaban el avance, e incluso el recálculo de celdas podía hacerse muy pesado y la impresión de las hojas de resultados finales, no de intermedios, requería mucha atención.

Excel es, en mi opinión, lo mejor que ha hecho Microsoft en su historia. Muy pocas herramientas proporcionan un desarrollo inicial tan rápido como Excel, pero la velocidad de desarrollo de Excel se amortigua con el avance, hoy se avanza menos que ayer y más que mañana, por lo que para desarrollo de pocos días es ideal y para desarrollos de muchos meses insoportable.

Por ello, la vida de estas hojas Excel fue de mediados de 2008 a mediados 2009, prácticamente un año, a partir del cual retome la exploración de nuevas formas de dar soporte a la traducciones de poemas jué jù Táng buscando mayor automatismo y eficiencia en la traducción y composicion del resultado.

Varias publicaciones de mis traducciones de poemas Táng fueron realizadas con el soporte de Excel.

Pedro Reina, cifras y letras

Portada del número 379 de Investigación y Ciencia

Tuve la suerte de conocer a Pedro Reina en 1991, en la primera edición del curso Sistemas expertos en la empresa.

En 1992, Pedro acometió el desarrollo de dos programas cuyo objetivo era resolver los problemas del programa televisivo «Cifras y Letras». Primero desarrollo el programa que resolvía el problema de las cifras y luego el de las letras. Durante ese tiempo pude discutir con Pedro sus enfoques de solución a esos dos problemas.

En abril de 2008, Juan M. R. Parrondo dedicó su sección de Juegos Matemáticos de la revista Investigación y Ciencia, a los dos algoritmos desarrollados por Pedro Reina para resolver los problemas de «Cifras y Letras». En este artículo, Pedro Reina me cita amablemente a la hora de describir el mecanismo usado para resolver el problema de las letras:

«...la solución que nos ofrece Reina es muy sencilla, gracias a una idea sumamente ingeniosa que el propio autor atribuye al profesor de inteligencia artificial Antonio Salmerón...».

Juan M. R. Parrondo, «Cifras y Letras de Pedro Reina», sección de Juegos matemáticos, revista Investigación y Ciencia (traducción española de Scientific America), ISSN 0210-136X, número 379, páginas 90-91, Barcelona, abril de 2008.

  • Cited in «Numbers and Letters of Pedro Reina» by Juan M. R. Parrondo, Reseach & Science Magazine, Barcelona, April of 2008.
  • Citado en «Cifras y Letras de Pedro Reina» por Juan M. R. Parrondo, Revista Investigación y Ciencia, Barcelona, abril de 2008.

Análisis sensorial de sistemas

psoe.es y pp.es en la campaña electoral 2008

Cuaderno con casos prácticos:

psoe.es y pp.es en la campaña electoral 2008 y otros casos de estudio, elaborado del 21 al 29 de febrero de 2008.

Cuando somos niños creemos que los personajes de los libros, de las obras de teatro o de las películas hablan por sí mismos, sin embargo, pronto aprendemos que son los autores los que hablan a través de ellos y que, por tanto, podemos intentar conocer y comprender a los autores a través de sus obras.

Cuando interactuamos con sistemas a menudo seguimos creyendo, como los niños, que son dichos sistemas los que dicen y hacen y no los autores que los programaron y las entidades que los crearon.

Como en cualquier creación humana, podemos conocer y comprender a las entidades, su dueños, directivos y trabajadores a través de los comportamientos, acciones, mensajes y errores de los sistemas que fabrican o de los que se sirven. A menudo las verdaderas ideas y sentimientos de las personas y los grupos se pueden ver mejor reflejadas en sus sistemas que en sus mensajes comerciales, ya que mientras en otros tipos de comunicación se presta especial atención a los mensajes que se emiten, en los sistemas hay 2 razones por la que los sentimientos auténticos de la organización afloran con mayor facilidad:

  1. la atención a los aspectos tecnológicos, la subcontratación y las dificultades de desarrollo restan atención al cuidado de los mensajes que se emiten diciendo más directamente lo que se piensa y
  2. la conexión directa de muchos sistemas con el aparato de la organización hace que a través de esas conexiones aflore su verdadera personalidad.
Análisis sensorial de sistemas, Partido Popular, Mariano Rajoy
  • Author of «Sensory analysis of systems», Intellectual Property Register, number 16/2009/5854, Madrid, March of 2008. Essay on the analysis of computer systems through the senses and about how to lear this technique.
  • Autor de «Análisis sensorial de sistemas», Registro de la Propiedad Intelectual, número 16/2009/5854, Madrid, Marzo de 2008. Ensayo sobre el análisis de sistemas informáticos a través de los sentidos y sobre el aprendizaje de esta técnica.

Traducción de juejus de la dinastía Táng

Traducción de juejus de la dinastía Táng

6 traducciones buscando la literalidad

de poemas de Li Bái, Wáng Wéi y Yú Shì-nán.

Los poemas son de Li Bái «Pensamiento en noche serena» y «Sentado sólo en la montaña Jìng Tíng», de Wáng Wéi «Entre los bambúes», «Adiós al partir» y «La cerca de los ciervos» y de Yú Shì-nán «Cigarras».

Son los 6 primeros poemas con los que comencé a trabajar en este área y con ellos empecé a establecer también las bases de mi proceso metodológico de traducción de poemas jueju.

  • Author of «Translation of juejus of the Tang dynasty», Intellectual Property Register, number 16/2009/5853, Madrid, February of 2008.
  • Autor de «Traducción de juejus de la dinastía Táng», Registro de la Propiedad Intelectual, número 16/2009/5853, Madrid, febrero de 2008.

Les fleurs du mal, Charles Baudelaire

Poster con las ilustraciones de Les fleurs du mal

«Les fleurs du mal», édition de 1861, Charles Baudelaire,

une édition illustrée par InkWatercolor.

Contiene una ilustración para cada poema de Baudelaire, estas ilustraciones fueron desarrolladas con técnicas mixtas (tintas, rotuladores, pinturas plásticas, etc.) sobre papel couché de colores, a menudo con difusión de fuego o frotamientos con alcohol.

Todas las ilustraciones de la obra, bajo el título «Ilustraciones para Les fleurs du mal - 128 cuadros para 128 poemas de C. Baudelaire», están inscritas en el Registro de la Propiedad Intelectual de Madrid, con el número de asiento registral 16 / 2008 / 9489, fecha de presentación y efectos 25 de febrero de 2008, clase de la obra pintura y titular de los derechos Antonio Salmerón Cabañas.

Las ilustraciones se comenzaron a crear en el año 1986, a partir de una versión bilingüe (francés / español) de la edición de 1861 de «Las flores del mal» de Charles Baudelaire. Se crearon unas 400 más ilustraciones, las últimas de ellas hacia 1991. Desde entonces ha existido una aproximación parcial al conjunto de la obra, pero completamente desarrollada soporte físico de papel. Durante unos 14 años el conjunto de la obra estuvo muy avanzada pero inconclusa, fundamentalmente por temas tecnológicos.

En agosto de 2005 se retoman los trabajos de composición del libro desde el comienzo, realizando la selección definitiva de 128 ilustraciones, procediendo a su digitalización y a su primera difusión por internet.

En 2008 se termina una primera versión completa de esta edición ilustrada de «Les fleurs du mal» de Charles Baudelaire.

Esta obra se distribuye con la licencia de creativecommons.org denominada Reconocimiento-NoComercial-CompartirIgual 2.5 España, que permite copiar, distribuir, comunicar y hacer obras derivadas bajo las condiciones de reconocer los créditos al autor, no usar la obra con fines comerciales y compartir las obras derivadas bajo la misma licencia.

Illustrations for Les fleurs du mal; 128 painting for 128 poems of C. Baudelaire
  • Author of «Illustrations for Les fleurs du mal; 128 painting for 128 poems of C. Baudelaire», Intellectual Property Register, number 16/2008/9489, Madrid, February of 2008.
  • Autor de «Ilustraciones para Les fleurs du mal; 128 cuadros para 128 poemas de C. Baudelaire», Registro de la Propiedad Intelectual, número 16/2008/9489, Madrid, febrero de 2008.

asalmeron en issuu.com

asalmeron en issuu.com, obras online

Tabla ASCII generada con TOL

Tabla ASCII generada con el lenguaje de programación TOL

Este es un programa sencillo, orientado al aprendizaje del lenguaje TOL.

El programa escribe un fichero con los 128 primeros caracteres de la tabla ASCII.

Los 32 primeros son caracteres especiales por lo que sus siglas se almacenan en un conjunto TOL (Set).

Los siguientes caracteres se generan mediante la función TOL Text Char(Real asc).

Se muestra a continuación el código completo del programa que también se puede consultar en el documento PDF adjunto a este post, se incluye junto con el código el fichero resultante con la tabla ASCII.


Set AscFst =
[[
  "NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "BEL",
  "BS ", "TAB", "LF ", "VT ", "FF ", "CR ", "SO ", "SI ",
  "DLE", "DC1", "DC2", "DC3", "DC4", "NAK", "SYN", "ETB", 
  "CAN", "EM ", "SUB", "ESC", "FS ", "GS ", "RS ", "US "
]];

Text fil = "ascii.txt";
Text WriteFile(fil, "Tabla ASCII");

Set  cic = For(0, 127, Text(Real asc)
{
  // Each 8 jump new line
  Text new = If(asc % 4, "", "\n");

  // The fist 32 are special characters
  Text chr = If(LT(asc, 32), AscFst[asc+1], "["+Char(asc)+"]");

  // Append character to file
  Text lin = new + FormatReal(asc, "%03.0lf") + " " + chr +" | ";
  Text AppendFile(fil, lin);
  
  chr // Return the character
});
  

Triángulo mágico de la diosa hindú Durga

Excel para resolver el problema del triángulo mágico de la diosa Durga

Fichero Excel (Libro de Excel 97-2003) con 4 hojas de cálculo. En la primera hoja se plantea resolver el problema del llamado triángulo mágico de la diosa hindú Durga.

Hay que poner los números del 1 al 9, todos y sin repetición, en los 3 lados del triángulo, de forma que los 3 lados sumen lo mismo. En cada lado se ponen 4 números del 1 al 9 y hay 3 celdas que son comunes a 2 lados, teniendo en total 9 celdas.

Las 3 hojas siguiente muestran las 3 soluciones posibles. En principio no habría que verlas hasta haber solucionado por uno mismo el problema del triángulo.

Las operaciones se corrigen automáticamente. Si el número introducido sale azul es que está bien y si sale en rojo es que está mal.

En la primera hoja hay una celda de control que permite fijar la solución que hay que buscar de entre las 3 existentes (sin contar giros).

15 puzle (3x3) y 65 puzle (5x5)

Excel con el 15 puzle (3x3) y 65 puzle (5x5) resueltos

Fichero Excel de Microsoft formado por una sola hoja de cálculo, que contiene:

  • El llamado problema del 15 puzle, de 3x3 celdas, con todos los números de 1 al 9, uno por celda sin repetirse, que suman siempre 15 tanto por filas, como por columnas y diagonales, y
  • El problema del 65 puzle, menos conocido que el anterior, de 5x5 celdas, con todos los números de 1 al 25, uno por celda sin repetirse, que suman siempre 65 tanto por filas, como por columnas y diagonales.

En este fichero Excel se muestran ambos problemas ya resueltos. La versión es la de Excel 97-2003.

Libro Blanco de los Quioscos de Prensa en Madrid

Resumen ejecutivo del Libro Blanco de los quioscos de Madrid

Universidad Rey Juan Carlos, «Libro Blanco del Quiosco de Prensa en Madrid», elaborado por encargo del Ayuntamiento de Madrid, Agencia de Desarrollo Económico Madrid Emprende y desarrollado con la colaboración de la Asociación de Vendedores Profesionales de Prensa de Madrid (AVPPM), Madrid, 2007.

Colaboré como investigador en la creación de este Libro Blanco que posteriormente tuvo una influencia fundamental en la Ordenanza municipal del Ayuntamiento de Madrid, «Ordenanza Reguladora de los Quioscos de Prensa», aprobada por el Pleno del Ayuntamiento, en sesión ordinaria celebrada el día 27 de febrero de 2009, publicada en el Boletín Oficial de la Comunidad de Madrid, BOCM, número 69, páginas 102 a 108, Madrid, lunes 23 de marzo de 2009.

  • Coresearcher of «White Book of Newspapers Sales Stores», Council of Madrid & Rey Juan Carlos University, Madrid, January of 2007.
  • Coinvestigador de «Libro Blanco de los quioscos de Madrid», Ayuntamiento de Madrid y Universidad Rey Juan Carlos, Madrid, enero de 2007.

InkWatercolor, invierno 2007

Cuando el sol se niega a brillar, when the sun refuses to shine, catálogo de invierno 2007

Cuando el sol se niega a brillar | When the sun refuses to shine

Catálogo de invierno del año 2007 de InkWatercolor, 16 páginas, color, inglés y español.

Este catálogo contiene un proceso paso a paso de elaboración de una obra del inicio al fin y obras artísticas como: when the sun refuses to shine ~ cuando el sol se niega a brillar; news of the new world [Apocalypse] ~ noticias del nuevo mundo [Apocalipsis]; against the violet sky [squeletum of a underlying fractal] ~ contra un cielo violeta [esqueleto del fractal subyacente]; requiescant in pace [Vincent van Gogh] ~ descanse en paz [Vincent van Gogh]; a very long speach [Paul Klee] ~ un discurso muy largo [Paul Klee]; representation of the uncertainty ~ representación de la incertidumbre; random, ordered, or networked [Marvin Minsky] ~ aleatorio, ordenado o conectado [Marvin Minsky]; hills architecture and landscaping ~ arquitectura de colinas y paisajismo; y praying mantis ~ mantis religiosa.

Cuando el sol se niega a brillar, InkWatercolor, invierno 2007

640 palabras con las 5 vocales, una de cada

Creo que hay 640 palabras en español que contienen todas las 5 vocales a, e, i, o y u, una de cada y sin repetirse ninguna. Algunas de ellas son estupendas, por ejemplo, la primera de ellas abrenuncio, que es tan buena que la tengo apadrinada en la Reserva de Palabras.

A continuación enumero estas 640 palabras:

abrenuncio, aceituno, acudidero, acuífero, adoquier, adulterino, adulterio, aguerrido, aguiero, aguijeño, aguileño, ahuizote, ajicuervo, ajipuerro, albugíneo, almizqueño, amiguero, anfineuro, anguilero, angurriento, anquiseco, antequino, antetítulo, anticuerpo, aperturismo, aquenio, aquileño, ariqueño, arquetipo, arquíptero, arquitecto, arquitector, arseniuro, arundíneo, asecución, aucténtico, audímetro, aurífero, aurígero, auténtico, autocine, aztequismo, azufeifo, barbiluengo, barbiquejo, barquillero, betuminosa, bielorrusa, birrectángulo, bisabuelo, bisagüelo, blanquecino, blanquimento, blanquinegro, bolsiquear, boquifresca, boquillera, boquinegra, boquiseca, borinqueña, borriqueña, borriquera, botijuela, branquífero, braquícero, bribonzuela, brumamiento, bucelario, bufonería, buhonería, buñolería, burielado, buscamiento, buscapleitos, butadieno, butifarrero, buzamiento, cabeciduro, cachicuerno, calumbriento, campichuelo, cañihueco, capitulero, caquéctico, carguerío, carguillero, castilluelo, catequismo, caulífero, cauliforme, cauterio, cedulario, celulario, celulósica, censuario, centrifugado, centrifugador, centunvirato, cigoñuela, cigüeñato, cincuentavo, cincuentona, cochiquera, coguilera, colecturía, coliquera, collipullensa, comiquear, comisquear, comunicable, comunicante, concienzuda, concurrencia, conducencia, confesuría, confiturera, confluencia, confulgencia, conglutinante, congruencia, conquistable, consecutiva, contertulia, contradique, contumelia, contundencia, conventícula, coquería, coquinera, coquizable, corpulencia, correduría, cortisquear, cosquillear, criaduelo, cruentación, cruzamiento, cuadernillo, cuadriforme, cuadrillero, cuajicote, cuajilote, cuajiote, cuakerismo, cuarcífero, cuartelillo, cuartillero, cuatrerismo, cuellicorta, cuellilargo, cuentahílos, cuestación, cuestionar, cuicacoche, culteranismo, cuñaderío, cuodlibetal, curamiento, curanderismo, curialesco, curiosear, charquecillo, chupaderito, chuzonería, decuriato, deglutoria, degustación, delicaducho, delictuosa, delusoria, demudación, denticulado, denudación, denunciador, depuración, depurativo, desahucio, desboquillar, descontinua, descontinuar, descubridora, descuidado, descuitado, desdibujado, desguisado, deslánguido, despumación, destitulado, destruidora, desucación, desudación, deturpación, devolutiva, dominguera, doquiera, droguería, dudamiento, duenario, dulzainero, duodécima, duodecimal, duomesina, eburnación, ecuación, educación, educativo, elocutiva, emboquillar, embrosquilar, embustidora, embutidora, emulación, emulsionar, emundación, encáustico, encubridora, englutativo, enguichado, engullidora, engurriado, enjundiosa, enluciado, enlucidora, enmochiguar, enquillotrar, enquistado, enrubiador, ensuciador, entubación, enturbiador, entusiasmo, enunciado, equitador, equívoca, equivocar, eructación, eruginosa, erupcionar, erutación, escorbútica, escrutiñador, escuálido, escudillador, escudriñador, escultórica, escupidora, escupitajo, esfumación, esguízaro, espiráculo, esquiador, esquifazón, esquilador, esquinado, esquinanto, esquinazo, esquinzador, esquipazón, esquistosa, esquizado, estanquillo, estimulador, estimulosa, estuación, estuario, estudiado, estudiador, estudiantón, estudiosa, estuosidad, euboica, eubolia, eucalipto, eucrático, eufonía, eufónica, euforia, eufórica, eufótida, eutrofia, eutrófica, eutrofizar, evolutiva, excautivo, excluidora, exculpación, excusación, exhaustivo, exhumación, expugnación, expurgación, exudación, exultación, fabriquero, faleucio, fecundación, fecundativo, fecundizador, ferruginosa, feudalismo, filautero, flamenquismo, freudiano, frumentario, funerario, galleguismo, gatuperio, gerundiano, gesticulador, gesticulosa, granujiento, guadijeño, guaridero, guarnecido, gubernación, gubernativo, guijarreño, guineano, guionaje, guisandero, guitarreo, guitarrero, guitarresco, guitonear, gusaniento, hevicultora, hidalguejo, hidalgüelo, hieródula, hipotenusa, hociquear, hormiguear, hormigüela, hormiguera, hormiguesca, humectación, humectativo, humilladero, hurgamiento, hurtadineros, imbabureño, impetuosa, incestuosa, incompuesta, inconmutable, ineducado, inexhausto, infernáculo, inocultable, insepultado, interruptora, interurbano, invernáculo, iroquesa, irresoluta, jaquimero, jerárquico, juntamiento, juramiento, juzgamiento, latigueo, latiguero, latréutico, laudemio, laurífero, lauríneo, lectuario, leguario, leguminosa, lengüicorta, lengüilargo, letuario, lombriguera, longuería, loquería, loriguera, lucianesco, luciérnago, lucharniego, lustramiento, luteranismo, lloriquear, maldispuesto, mallequino, manguillero, manguitero, manigüero, manipuleo, maniqueo, manuelino, manutención, manutergio, maquilero, marisqueo, marisquero, matihuelo, meditabundo, menorquina, menstruación, mensuración, mensurativo, metalúrgico, meticulosa, milonguera, moquitear, morceguila, mordisquear, morisqueta, mosquitera, mudamiento, muestrario, multilátero, murciégalo, murciélago, murcigallero, narigueto, navichuelo, nebulizador, nebulosidad, neptuniano, neumático, neumonía, neumónica, neurálgico, neuroglia, neurótica, neutralismo, neutrónica, niquelado, niquelador, nucleario, numeración, numerario, numerosidad, obsequiar, obsequias, ocurrencia, ojienjuta, ojituerta, olisquear, opulencia, orquestina, orquídea, pacienzudo, palitoque, palitroque, pandemónium, pañizuelo, paquidermo, parquímetro, patimuleño, patituerto, patizuelo, pauperismo, paupérrimo, pecuario, peliagudo, perdulario, perduración, perfunctoria, perjudicado, perjudicador, permutación, persuadidor, persuasión, persuasivo, perturbación, peruanismo, peruviano, petrarquismo, picapuerco, pichagüero, pichuleador, pindonguear, piragüero, piruétano, pitanguero, plumbagíneo, porquecilla, porquería, porqueriza, precaución, preciosura, pregustación, prepositura, presunciosa, primuláceo, progenitura, pronunciable, prosénquima, pudelación, pujamiento, pulsamiento, pulverizador, punicáceo, punzonería, purgamiento, putrefacción, putrefactivo, quebradillo, quebradizo, quejicosa, quejillosa, querindango, quietador, quijotesa, quijotesca, quincallero, quinceavo, quinolear, quintaleño, quintalero, quiroteca, ranquelino, raquídeo, reasunción, rebollidura, recitáculo, reconquista, reconquistar, reconstructiva, recusación, redargución, reducidora, refugiado, refundidora, refutación, regulación, regulativo, reproductiva, republicano, reputación, requintador, resolutiva, resucitado, resucitador, resudación, reumático, reumatismo, revulsoria, riachuelo, rompesquinas, rosquillera, rostrituerta, rubefacción, rubiáceo, rufianesco, rumeliota, saduceísmo, sahumerio, salubérrimo, salutífero, sanguífero, sanguíneo, sanluiseño, sanluisero, saquerío, sardónique, secundario, secutoria, seguidora, segundario, sensualismo, sericultora, sesquiplano, seudónima, simultáneo, sobrequilla, soguería, sonrisueña, sortijuela, subarriendo, subdirectora, subdominante, subitáneo, sublevación, subordinante, subvencionar, sucesoria, sudorienta, sudorífera, sugeridora, sugestionar, superación, superádito, superiora, superlación, superlativo, supersónica, supervisora, supletoria, surrealismo, suspensoria, sustentación, tabiquero, tampiqueño, taquillero, taquímetro, taquinero, tenutario, tertuliano, teutónica, tiracuello, tiracuero, topiquera, toquería, tosiguera, triaquero, trirrectángulo, truncamiento, tuberosidad, tumefacción, turbamiento, turronería, ugrofinesa, ulceración, ulcerativo, ultraligero, unipersonal, univocarse, untamiento, urogenital, urticáceo, useñoría, vaqueiro, vaquerizo, ventrílocua, venusiano, vesiculosa, vestuario, vituperador, vituperosa, volumetría, volumétrica, vomipurgante, vulneración, vulnerario, yeguarizo, zatiquero y zurrapiento.

Las siguientes 35 líneas de código TOL muestran como extraer a partir de un fichero de palabras, una por línea, todas las palabras que tienen las 5 vocales, volcando en un fichero las que tienen las 5 vocales una de cada (sin repetición) y volcando en otro fichero las palabras que también tienen las 5 vocales pero con alguna repetida.


Text inpFil = "fichero.de.palabras.txt";
Text sinFil = "aeiou.sin.rep.txt";
Text conFil = "aeiou.con.rep.txt";

Text WriteFile(sinFil, "");
Text WriteFile(conFil, "");

Text filTxt = ReadFile(inpFil);
Set  linSet = Unique(Tokenizer(filTxt, "\n"));
Set  linCic = EvalSet(linSet, Real(Text linTxt)
{
  Text linRep = ReplaceTable(linTxt,
    [[ [["á", "a"]], [["é", "e"]], [["í", "i"]], [["ó", "o"]],
       [["ú", "u"]], [["ü", "u"]] ]]);

  Real aCnt = TextOccurrences(linRep, "a");
  Real eCnt = TextOccurrences(linRep, "e");
  Real iCnt = TextOccurrences(linRep, "i");
  Real oCnt = TextOccurrences(linRep, "o");
  Real uCnt = TextOccurrences(linRep, "u");
  
  If(And(EQ(aCnt,1), EQ(eCnt,1), EQ(iCnt,1), EQ(oCnt,1), EQ(uCnt,1)),
  {
    Text WriteLn(linTxt);
    Text AppendFile(sinFil, linTxt+"\n");
    1
  },
  If(And(GE(aCnt,1), GE(eCnt,1), GE(iCnt,1), GE(oCnt,1), GE(uCnt,1),
         GE(aCnt+eCnt+iCnt+oCnt+uCnt, 6)),
  {
    Text WriteLn(linTxt);
    Text AppendFile(conFil, linTxt+"\n");
    1
  },
  0))
});