[Programación] Archivos de acceso aleatorio

Sebastián D. Criado scriado@ciudad.com.ar
Thu, 12 Dec 2002 09:55:15 -0300


--------------Boundary-00=_3WB0I8JGYX6TQKKZUS8L
Content-Type: text/plain;
  charset="iso-8859-1"
Content-Transfer-Encoding: 8bit

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Les paso un interesante programa, que esta a medio terminar, pero que genera 
un sistema de registros para leer y escribir datos directamente a archivos 
con acceso aleatorio a los datos, simulando una base de datos.

El programa lo porte de C++ para Borland, lo cual hace que todav´ia me falte 
hacer algunos toques, pero sirve para que vayan viendo un poco como funciona 
este tipo de desarrollos en C++.

Saludos.-
- -- 
- --
Sebastián D. Criado - scriado@ciudad.com.ar
L.U.G.R.o - http://www.lugro.org.ar
GNU/Linux Registered User # 146768
- -------------------------------------------------------------------
"Si el Universo fuera un programa estaría hecho en C, y correría sobre
un sistema UNIX"
                                                   Anónimo.

			
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQE9+Icz8hmHQ8ZCg0IRAhFEAJ4o2oOYMM/yl7uyBW6DEJ0T+lp2JQCfWn2K
W4m6SLiTjImCfDmNPzEcLDk=
=JLd2
-----END PGP SIGNATURE-----

--------------Boundary-00=_3WB0I8JGYX6TQKKZUS8L
Content-Type: text/x-c++;
  charset="iso-8859-1";
  name="alea.cpp"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="alea.cpp"

Ly8gYWxlYS5jcHA6IEFyY2hpdm9zIGRlIGFjY2VzbyBhbGVhdG9yaW8KLy8gUG9ydCBkZSBkZXNh
cnJvbGxvIGVuIEMrKyBkZSBCb3JsYW5kIHBvciBTZWJhc3RpbiBELiBDcmlhZG8gQ29weSBMZWZ0
OiAyMDAyCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDx1
bmlzdGQuaD4KCnN0cnVjdCBzdFJlZ2lzdHJvIHsKICAgY2hhciB2YWxpZG87ICAvLyBDYW1wbyBx
dWUgaW5kaWNhIHNpIGVsIHJlZ2lzdHJvIGVzIHbhbGlkbyBTLT5W4WxpZG8sIE4tPkluduFsaWRv
CiAgIGNoYXIgbm9tYnJlWzM0XTsKICAgaW50IGRhdG9bNF07Cn07CgppbnQgTWVudSgpOwp2b2lk
IExlZXIoc3RSZWdpc3RybyAmcmVnKTsKdm9pZCBNb3N0cmFyKHN0UmVnaXN0cm8gJnJlZyk7CnZv
aWQgTGlzdGFyKGxvbmcgbiwgc3RSZWdpc3RybyAmcmVnKTsKbG9uZyBMZWVOdW1lcm8oKTsKdm9p
ZCBFbXBhcXVldGFyKEZJTEUgKmZhKTsKCmludCBtYWluKCkKewogICBzdFJlZ2lzdHJvIHJlZzsK
ICAgRklMRSAqZmE7CiAgIGludCBvcGNpb247CiAgIGxvbmcgbnVtZXJvOwoKICAgZmEgPSBmb3Bl
bigiYWxlYS5kYXQiLCAicitiIik7ICAgICAgICAgIC8vIEVzdGUgbW9kbyBwZXJtaXRlIGxlZXIg
eSBlc2NyaWJpcgogICBpZighZmEpIGZhID0gZm9wZW4oImFsZWEuZGF0IiwgIncrYiIpOyAgLy8g
c2kgZWwgYXJjaGl2byBubyBleGlzdGUsIGxvIGNyZWEuCgogICBkbyB7CiAgICAgIG9wY2lvbiA9
IE1lbnUoKTsKICAgICAgc3dpdGNoKG9wY2lvbikgewogICAgICAgICBjYXNlICcxJzogLy8gQfFh
ZGlyIHJlZ2lzdHJvCiAgICAgICAgICAgIExlZXIocmVnKTsKICAgICAgICAgICAgLy8gSW5zZXJ0
YXIgYWwgZmluYWw6CiAgICAgICAgICAgIGZzZWVrKGZhLCAwLCBTRUVLX0VORCk7CiAgICAgICAg
ICAgIGZ3cml0ZSgmcmVnLCBzaXplb2Yoc3RSZWdpc3RybyksIDEsIGZhKTsKICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgJzInOiAvLyBNb3N0cmFyIHJlZ2lzdHJvCiAgICAgICAgICAg
IHN5c3RlbSgiY2xlYXIiKTsKICAgICAgICAgICAgcHJpbnRmKCJNb3N0cmFyIHJlZ2lzdHJvOiAi
KTsKICAgICAgICAgICAgbnVtZXJvID0gTGVlTnVtZXJvKCk7CiAgICAgICAgICAgIGZzZWVrKGZh
LCBudW1lcm8qc2l6ZW9mKHN0UmVnaXN0cm8pLCBTRUVLX1NFVCk7CiAgICAgICAgICAgIGZyZWFk
KCZyZWcsIHNpemVvZihzdFJlZ2lzdHJvKSwgMSwgZmEpOwogICAgICAgICAgICBNb3N0cmFyKHJl
Zyk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlICczJzogLy8gRWxpbWluYXIgcmVn
aXN0cm8KICAgICAgICAgICAgc3lzdGVtKCJjbGVhciIpOwogICAgICAgICAgICBwcmludGYoIkVs
aW1pbmFyIHJlZ2lzdHJvOiAiKTsKICAgICAgICAgICAgbnVtZXJvID0gTGVlTnVtZXJvKCk7CiAg
ICAgICAgICAgIGZzZWVrKGZhLCBudW1lcm8qc2l6ZW9mKHN0UmVnaXN0cm8pLCBTRUVLX1NFVCk7
CiAgICAgICAgICAgIGZyZWFkKCZyZWcsIHNpemVvZihzdFJlZ2lzdHJvKSwgMSwgZmEpOwogICAg
ICAgICAgICByZWcudmFsaWRvID0gJ04nOwogICAgICAgICAgICBmc2VlayhmYSwgbnVtZXJvKnNp
emVvZihzdFJlZ2lzdHJvKSwgU0VFS19TRVQpOwogICAgICAgICAgICBmd3JpdGUoJnJlZywgc2l6
ZW9mKHN0UmVnaXN0cm8pLCAxLCBmYSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
ICc0JzogLy8gTW9zdHJhciB0b2RvCiAgICAgICAgICAgIHJld2luZChmYSk7CiAgICAgICAgICAg
IG51bWVybyA9IDA7CiAgICAgICAgICAgIHN5c3RlbSgiY2xlYXIiKTsKICAgICAgICAgICAgcHJp
bnRmKCJOb21icmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdG9zXG4iKTsKICAgICAg
ICAgICAgd2hpbGUoZnJlYWQoJnJlZywgc2l6ZW9mKHN0UmVnaXN0cm8pLCAxLCBmYSkpIExpc3Rh
cihudW1lcm8rKywgcmVnKTsKICAgICAgICAgICAgCgkgICAgcGF1c2UoKTsKICAgICAgICAgICAg
CgkgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgJzUnOiAvLyBFbGltaW5hciBtYXJjYWRvcwogICAg
ICAgICAgICBFbXBhcXVldGFyKGZhKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgfSB3
aGlsZShvcGNpb24gIT0gJzAnKTsKICAgZmNsb3NlKGZhKTsKICAgcmV0dXJuIDA7Cn0KCi8vIE11
ZXN0cmEgdW4gbWVu+iBjb24gbGFzIG9wY2lvbmVzIGRpc3BvbmlibGVzIHkgY2FwdHVyYSB1bmEg
b3BjafNuIGRlbCB1c3VhcmlvCmludCBNZW51KCkKewogICBjaGFyIHJlc3BbMjBdOwoKICAgZG8g
ewogICAgICBzeXN0ZW0oImNsZWFyIik7CiAgICAgIHByaW50ZigiTUVOVSBQUklOQ0lQQUxcbiIp
OwogICAgICBwcmludGYoIi0tLS0tLS0tLS0tLS0tXG5cbiIpOwogICAgICBwcmludGYoIjEtIElu
c2VydGFyIHJlZ2lzdHJvXG4iKTsKICAgICAgcHJpbnRmKCIyLSBNb3N0cmFyIHJlZ2lzdHJvXG4i
KTsKICAgICAgcHJpbnRmKCIzLSBFbGltaW5hciByZWdpc3Ryb1xuIik7CiAgICAgIHByaW50Zigi
NC0gTW9zdHJhciB0b2RvXG4iKTsKICAgICAgcHJpbnRmKCI1LSBFbGltaW5hciByZWdpc3Ryb3Mg
bWFyY2Fkb3NcbiIpOwogICAgICBwcmludGYoIjAtIFNhbGlyXG4iKTsKICAgICAgZmdldHMocmVz
cCwgMjAsIHN0ZGluKTsKICAgfSB3aGlsZShyZXNwWzBdIDwgJzAnICYmIHJlc3BbMF0gPiAnNScp
OwogICByZXR1cm4gcmVzcFswXTsKfQoKLy8gUGVybWl0ZSBxdWUgZWwgdXN1YXJpbyBpbnRyb2R1
emNhIHVuIHJlZ2lzdHJvIHBvciBwYW50YWxsYQp2b2lkIExlZXIoc3RSZWdpc3RybyAmcmVnKQp7
CiAgIGludCBpOwogICBjaGFyIG51bWVyb1s2XTsKCiAgIHN5c3RlbSgiY2xlYXIiKTsKICAgcHJp
bnRmKCJMZWVyIHJlZ2lzdHJvOlxuXG4iKTsKICAgcmVnLnZhbGlkbyA9ICdTJzsKICAgcHJpbnRm
KCJOb21icmU6ICIpOwogICBmZ2V0cyhyZWcubm9tYnJlLCAzNCwgc3RkaW4pOwogICAvLyBsYSBm
dW5jafNuIGZnZXRzIGNhcHR1cmEgZWwgcmV0b3JubyBkZSBs7W5lYSwgaGF5IHF1ZSBlbGltaW5h
cmxvOgogICBmb3IoaSA9IHN0cmxlbihyZWcubm9tYnJlKS0xOyBpICYmIHJlZy5ub21icmVbaV0g
PCAnICc7IGktLSkgcmVnLm5vbWJyZVtpXSA9IDA7CiAgIGZvcihpID0gMDsgaSA8IDQ7IGkrKykg
ewogICAgICBwcmludGYoIkRhdG9bJTFkXTogIiwgaSk7CiAgICAgIGZnZXRzKG51bWVybywgNiwg
c3RkaW4pOwogICAgICByZWcuZGF0b1tpXSA9IGF0b2kobnVtZXJvKTsKICAgfQp9CgovLyBNdWVz
dHJhIHVuIHJlZ2lzdHJvIGVuIHBhbnRhbGxhLCBzaSBubyBlc3ThIG1hcmNhZG8gY29tbyBib3Jy
YWRvCnZvaWQgTW9zdHJhcihzdFJlZ2lzdHJvICZyZWcpCnsKICAgaW50IGk7CgogICBzeXN0ZW0o
ImNsZWFyIik7CiAgIGlmKHJlZy52YWxpZG8gPT0gJ1MnKSB7CiAgICAgIHByaW50ZigiTm9tYnJl
OiAlc1xuIiwgcmVnLm5vbWJyZSk7CiAgICAgIGZvcihpID0gMDsgaSA8IDQ7IGkrKykgcHJpbnRm
KCJEYXRvWyUxZF06ICVkXG4iLCBpLCByZWcuZGF0b1tpXSk7CiAgIH0KICAgICAgICAgICAgCgkg
ICAgcGF1c2UoKTsKICAgICAgICAgICAgCgp9CgovLyBNdWVzdHJhIHVuIHJlZ2lzdHJvIHBvciBw
YW50YWxsYSBlbiBmb3JtYSBkZSBsaXN0YWRvLCAKLy8gc2kgbm8gZXN04SBtYXJjYWRvIGNvbW8g
Ym9ycmFkbwp2b2lkIExpc3Rhcihsb25nIG4sIHN0UmVnaXN0cm8gJnJlZykKewogICBpbnQgaTsK
CiAgIGlmKHJlZy52YWxpZG8gPT0gJ1MnKSB7CiAgICAgIHByaW50ZigiWyU2bGRdICUtMzRzIiwg
biwgcmVnLm5vbWJyZSk7CiAgICAgIGZvcihpID0gMDsgaSA8IDQ7IGkrKykgcHJpbnRmKCIsICU0
ZCIsIHJlZy5kYXRvW2ldKTsKICAgICAgcHJpbnRmKCJcbiIpOwogICB9Cn0KCi8vIExlZSB1biBu
+m1lcm8gc3VtaW5pc3RyYWRvIHBvciBlbCB1c3VhcmlvCmxvbmcgTGVlTnVtZXJvKCkKewogICBj
aGFyIG51bWVyb1s2XTsKCiAgIGZnZXRzKG51bWVybywgNiwgc3RkaW4pOwogICByZXR1cm4gYXRv
aShudW1lcm8pOwp9CgovLyBFbGltaW5hIGxvcyByZWdpc3Ryb3MgbWFyY2Fkb3MgY29tbyBib3Jy
YWRvcwp2b2lkIEVtcGFxdWV0YXIoRklMRSAqZmEpCnsKICAgRklMRSAqZnRlbXA7CiAgIHN0UmVn
aXN0cm8gcmVnOwogICAKICAgZnRlbXAgPSBmb3BlbigiYWxlYS50bXAiLCAid2IiKTsKICAgcmV3
aW5kKGZhKTsKICAgd2hpbGUoZnJlYWQoJnJlZywgc2l6ZW9mKHN0UmVnaXN0cm8pLCAxLCBmYSkp
IAogICAgICBpZihyZWcudmFsaWRvID09ICdTJykgZndyaXRlKCZyZWcsIHNpemVvZihzdFJlZ2lz
dHJvKSwgMSwgZnRlbXApOwogICBmY2xvc2UoZnRlbXApOwogICBmY2xvc2UoZmEpOwogICByZW1v
dmUoImFsZWEuYmFrIik7CiAgIHJlbmFtZSgiYWxlYS5kYXQiLCAiYWxlYS5iYWsiKTsKICAgcmVu
YW1lKCJhbGVhLnRtcCIsICJhbGVhLmRhdCIpOwogICBmYSA9IGZvcGVuKCJhbGVhLmRhdCIsICJy
K2IiKTsKfQo=

--------------Boundary-00=_3WB0I8JGYX6TQKKZUS8L--