viernes, 11 de enero de 2013

Más programas: un listín de direcciones


Pues vamos a seguir con esta racha de programación en C antes de que me dé por otra cosa. El programilla de hoy me ha costado sudor y lágrimas, pero al final ha salido, porque está demostrado que todo lo que se persigue con tenacidad al final sale. Lo que tiene de particular es que se emplean matrices con tres subíndices ¡y funciona! El programa lee de un fichero de texto algo que podríamos considerar como una colección de "registros". Cada registro está formado por cuatro campos, como, por ejemplo, nombre, dirección, ciudad y teléfono. El primer subíndice de la matriz corresponde al número del registro, el segundo al campo, y el tercero al número de caracteres de cada campo, de tal forma que si la matriz es nom[16][4][40], puede contener 16 registros, con 4 campos cada uno de 40 caracteres como máximo para cada campo. El fichero de texto del que lee, "datos16.dat", lo he hecho "a mano" poniendo en cada línea un campo; así, estos están separados por retornos de carro, que el C los reconoce por el signo '\n'. Hay algunas complicaciones a la hora de listar en forma de tabla, porque cuando hay acentos el número de caracteres aumenta, pues una letra acentuada supone 2 caracteres. He obviado la dificultad contando número de caracteres y de acentos en cada entrada de lectura. El truco para los acentos consiste en saber que las letras acentuadas tienen un número ASCII negativo. ¡Eso no lo sabe todo el mundo! Yo lo he descubierto experimentando. Bueno, pues ahí queda eso, que incluso puede servir para mantener un listín de nombres y direcciones. Ahí sí que no me creo capaz de rematar mi labor porque copiar cosas en el ordenador me produce una fatiga insoportable. Si a alguno le interesase el programa para copiarlo que me lo diga que se lo mando inmediatamente.
Bueno, todo el mundo sabe que esta forma de hacer las cosas no es la más inteligente, pues hay un desperdicio grande de memoria; efectivamente, asignamos el mismo espacio a cada uno de los campos del registro, siendo muy desiguales, pues el teléfono no va a ocupar nunca más de 10 caracteres, por ejemplo, y le asignamos 40, lo mismo que a los otros campos. La forma de hacer esto es mediante las "estructuras", pero eso queda para otro día.

No hay comentarios:

Publicar un comentario