Censo

Descripción del contenido de la página

Programa escrito en Clipper para elaborar el censo de padres de un colegio.

Etiquetas:

He aquí un pequeño tesoro más del baúl de los recuerdos. A partir de 1991 trabajé mucho con Clipper, un lenguaje de programación orientado a bases de datos, compatible con dBase. Escribí varias aplicaciones grandes y alguna pequeñita como la que muestro en esta página: un programa para poner orden en un censo de padres de un colegio. Creo recordar que se trataba de crear una base de datos bien estructurada y sin duplicados a partir de un fichero en formato de WordPerfect bastante caótico.

Clipper tenía la peculiaridad de poder redefinir los nombres de sus comandos. Esto permitía crear una especie de metalenguaje, o macros, o simplemente, como hice yo en este caso, traducir el lenguaje a otro idioma. Por eso los comandos están en esperanto; las traducciones estaban en el fichero eo.prg que se carga al principio.

Código fuente

padres-a

* padres-a.prg
* Copyright (C) 1993 Marcos Cruz (http://programandala.net)
* Licencia/License: http://programandala.net/license

#include "eo.prg"
#include "inkey.ch"

uzu padres
index on sencxapela(trim(apellidos))+sencxapela(trim(nombre)) to padres
copy to padres2.dbf
quit

dum vera
    dum vera
        accept "Dirección:             " to adreso
        sercxu (adreso:=nommajuskla(adreso))
        se trovita()
            cls
            ? "Dirección ya existente en:"
            dum direcci_n=adreso kaj ne fajlfino()
                ? apellidos,trim(nombre)
                skip
            dumfino
        sefino
        accept "Nombre del padre (f/n): " to icxnomo
        kazoj
        kaze icxnomo estas_en "fF"
            eliru
        kaze icxnomo estas_en "Nn"
            loop
        kazfino
        accept "Nombre de la madre:     " to innomo
        accept "1er apellido:           " to fnomo1
        accept "2o apellido:            " to fnomo2
        ? "Intro para aceptar, otra tecla para corregir..."
        se klavo(0)=K_ENTER
            eliru
        sefino
    dumfino
    se icxnomo estas_en "Ff"
        eliru
    sefino
    append blank
    anstatauxigu nombre per nommajuskla(icxnomo)
    anstatauxigu apellidos per majuskla(fnomo1)
    anstatauxigu direcci_n per adreso
    ? replicate("-",50)
    ? trim(nombre),trim(apellidos)
    append blank
    anstatauxigu nombre per nommajuskla(innomo)
    anstatauxigu apellidos per majuskla(fnomo2)
    anstatauxigu direcci_n per nommajuskla(adreso)
    ? trim(nombre),trim(apellidos)
    ? direcci_n
    ? replicate("-",50)
    ?
dumfino
close all
quit



*******************************************************************************
* modjulo pri tekstoj
*******************************************************************************



funkcio majuskla(teksto_k)

    * 1993 02 21

    * majuskligas tekston laux la karaktraro uzata

    * teksto_k = teksto

revenu umuskla(teksto_k,vera)



funkcio minuskla(teksto_k)

    * 1993 02 21

    * minuskligas tekston laux la karaktraro uzata

    * teksto_k = teksto

revenu umuskla(teksto_k,malvera)



funkcio umuskla(teksto_k,majuskligi_l)

    * 1993 02 21

    * minuskligas aux majuskligas tekston laux la karaktraro uzata

    * teksto_k = teksto
    * minuskligi_l = ¿cxu minuskligi?

    loka litero_n,loko_n
    loka kodopagxo_n := 850 &&
    loka alfabeto_m := matrico(2)

    kazoj
    kaze kodopagxo_n=850
        alfabeto_m[laux(majuskligi_l,2,1)]:=;
            "AÁÀÄÂBCDEÉÈËÊFGHIÍÌÎJKLMNÑOÓÒÖÔPQRSTUÜÚÙÛVWXYZ"
        alfabeto_m[laux(majuskligi_l,1,2)]:=;
            "aáàäâbcdeéèëêfghiíìîjklmnñoóòöôpqrstuüúùûvwxyz"
    kaze kodopagxo_n=437
        alfabeto_m[laux(majuskligi_l,2,1)]:=;
            "AAAÄABCDEÉEEEFGHIIIIJKLMNÑOOOÖOPQRSTUÜUUUVWXYZ"
        alfabeto_m[laux(majuskligi_l,1,2)]:=;
            "aáàäâbcdeéèëêfghiíìîjklmnñoóòöôpqrstuüúùûvwxyz"
    kazfino

    ekde litero_n = 1 gxis longo(teksto_k)
        se (loko_n:=teksterloko(tekstero(teksto_k,litero_n,1),alfabeto_m[1]))#0
            teksto_k := stuff(teksto_k,litero_n,1,tekstero(alfabeto_m[2],loko_n,1))
        sefino
    sekva

revenu teksto_k



funkcio sencxapela(teksto_k)

    * 1993 02 21

    * sencxapeligas tekston

    * teksto_k = teksto

    loka litero_n,loko_n
    loka kodopagxo_n := 850 &&
    loka alfabeto_m := matrico(2)

    kazoj
    kaze kodopagxo_n=850
        alfabeto_m[1]:=;
            "aÁáÀàÄäÂâbcdeÉéÈèËëÊêfghiÍíÌìÏïÎîjklmnñoÓóÒòÖöÔôpqrstuÜüÚúÙùÛûVvwxyz"
        alfabeto_m[2]:=;
            "AAAAAAAAABCDEEEEEEEEEFGHIIIIIIIIIJKLMNÑOOOOOOOOOPQRSTUUUUUUUUUVVWXYZ"
    kazfino

    ekde litero_n = 1 gxis longo(teksto_k)
        se (loko_n:=teksterloko(tekstero(teksto_k,litero_n,1),alfabeto_m[1]))#0
            teksto_k := stuff(teksto_k,litero_n,1,tekstero(alfabeto_m[2],loko_n,1))
        sefino
    sekva

revenu teksto_k


funkcio nommajuskligita(tutnomo_k)

    * majuskligas gxuste nomojn

    loka esceptoj_m := {;
        {" De "," Del "," La "," Las "," El "," Los ", " Y ", " E "},;
        {" Ii "," Iii ", " Iv "," Vi "," Vii "," Viii ", " Ix ",;
        " Xi "," Xii "," Xiii "," Xiv "," Xv "," Xvi "," Xvii "," Xviii ",;
        " Xix "," Xx "}}
    loka escepto_n
    loka karaktro_n

    tutnomo_k := " "+minusklacxa(tutnomo_k)

    // majuskligi la unuan literon de cxiu vorto:
    ekde karaktro_n = 1 gxis longo(tutnomo_k)
        se tekstero(tutnomo_k,karaktro_n,1) estas_en " -'"
            // trovita vortokomenco, cxar post spaco aux streketo
            tutnomo_k := stuff(tutnomo_k,karaktro_n+1,1,;
                majuskla(tekstero(tutnomo_k,karaktro_n+1,1)))
        sefino
    sekva

    // aliigi la esceptajn vortojn:
    ekde esceptaro_n = 1 to 2
        ekde escepto_n=1 gxis longo(esceptoj_m[esceptaro_n])
            tutnomo_k := strtran(tutnomo_k,esceptoj_m[esceptaro_n,escepto_n];
                ,laux(esceptaro_n=1;
                    ,minuskla(esceptoj_m[esceptaro_n,escepto_n]);
                    ,majuskla(esceptoj_m[esceptaro_n,escepto_n]);
                    );
                )
        sekva
    sekva

revenu alltrim(tutnomo_k)

padres-b

* padres-b.prg
* Copyright (C) 1993 Marcos Cruz (http://programandala.net)
* Licencia/License: http://programandala.net/license

#include "eo.prg"
#include "inkey.ch"

numero_n := 1

uzu padres2 // index padres
index on sencxapela(apellidos+nombre) to padres
set printer to censo.txt
set printer on
dum ne fajlfino()
    ? padl(numero_n++,3),apellidos,nombre,dni,direccion
    skip
dumfino
quit


funkcio sencxapela(teksto_k)

    * 1993 02 21

    * sencxapeligas tekston

    * teksto_k = teksto

    loka litero_n,loko_n
    loka kodopagxo_n := 850 &&
    loka alfabeto_m := matrico(2)

    kazoj
    kaze kodopagxo_n=850
        alfabeto_m[1]:=;
            "aÁáÀàÄäÂâbcdeÉéÈèËëÊêfghiÍíÌìÏïÎîjklmnñoÓóÒòÖöÔôpqrstuÜüÚúÙùÛûVvwxyz"
        alfabeto_m[2]:=;
            "AAAAAAAAABCDEEEEEEEEEFGHIIIIIIIIIJKLMNÑOOOOOOOOOPQRSTUUUUUUUUUVVWXYZ"
    kazfino

    ekde litero_n = 1 gxis longo(teksto_k)
        se (loko_n:=teksterloko(tekstero(teksto_k,litero_n,1),alfabeto_m[1]))#0
            teksto_k := stuff(teksto_k,litero_n,1,tekstero(alfabeto_m[2],loko_n,1))
        sefino
    sekva

revenu teksto_k