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.
Listado
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