Censo
Descripción del contenido de la página
Programa escrito en Clipper para elaborar el censo de padres de un colegio.
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