2024(e)ko apirilaren 20(a), larunbata

13. astea | fitxategi beraren edukia modu desberdinez pantailaratzen








Demagun erregistroen fitxategi bat sortu dugula. Fitxategiaren elementu bakoitza erregistro bat da, eta erregistroak bi eremu ditu: lehena Integer datu-motakoa eta bigarrena Real datu-motakoa.
     trdIntReal = RECORD
                     Lehena   : integer ;
                     Bigarrena: real ;
                  END ;
Demagun sortutako fitxategiaren izena Zenbakiak.dat dela eta bere edukia datu-mota desberdineko fitxategien bitartez pantailaratzea nahi dugula. Eduki bera pantailaratzeko lau fitxategiren datu-motak erabiliko dira.

1


Zenbakiak.dat fitxategiaren edukia pantailaratzeko erabiliko dugun datu-mota DM_rdIntReal da, hots, sorrerako datu-mota berbera. Ondorioz, pantailaratuko den informazioa "jatorrizkoa" izango da. Adibidean:
1. eremuan 163 balioa eta 2. eremuan 1.1295338E+001 balioa.

2


Zenbakiak.dat fitxategiaren edukia pantailaratzeko erabiliko dugun datu-mota DM_rdRealInt da, jatorrizkoaren antzekoa baina eremuen datu-motak elkar trukaturik (lehena Real datu-motakoa eta bigarrena Integer datu-motakoa):
     trdRealInt = RECORD
                     Lehena   : real ;
                     Bigarrena: integer ;
                  END ;
Ondorioz, nahiz eta Zenbakiak.dat fitxategiaren edukia ez den aldatu, pantailaratuko den informazioa bestelakoa izango da. Adibidean:
1. eremuan 9.7150463E+302 balioa eta 2. eremuan 1076270902 balioa.

3


Zenbakiak.dat fitxategiaren edukia pantailaratzeko erabiliko dugun FILE datu-mota DM_fbyBytak da, hots, fitxategian BYTE datu-motako informazioa dagoela interpretatzen duen fitxategia. Horregatik, Zenbakiak.dat fitxategiaren edukia hainbat byten sorta delakoan, byte guztiak banan-banan pantailaratuko dira.


4


Zenbakiak.dat fitxategiaren edukia pantailaratzeko erabiliko dugun FILE datu-mota DM_fcKaraktereak da, hots, fitxategian CHAR datu-motako informazioa dagoela interpretatzen duen fitxategia. Horregatik, Zenbakiak.dat fitxategiaren edukia hainbat karakteren sorta delakoan, karaktere guztiak banan-banan pantailaratuko dira; bide batez, karaktere bakoitzaren ordinala ere erakusten da (3 urratseko informazio bera da).



Hona hemen, fitxategi beraren edukia modu desberdinez pantailaratzen duen programa:

{----------------------------------------------------------------
  Erregistroak gordetzen dituen "Zenbakiak.dat" fitxategia sortu 
  eta datu-mota desberdineko fitxategien bitartez atzitu.
 ----------------------------------------------------------------}

program Fitxategi_integerrealbytechar;

type
   tsKate99 = string[99];

   trdIntReal = record
                   Lehena   : integer;
                   Bigarrena: real;
                end;
 
   tfrdIntReal = file of trdIntReal;

   trdRealInt = record
                   Lehena   : real;
                   Bigarrena: integer;
                end;

   tfrdRealInt = file of trdRealInt;

   tfbyBytak = file of byte;

   tfcKaraktereak = file of char;

{--------------bakarra den fitxategia sortu--------------}
procedure INTEGER_REAL_FitxategiaSortu(sFitxIzen: tsKate99);
var
   f: tfrdIntReal;
   rdZenbakiak: trdIntReal;
   k, iZenbat: integer; 
begin
   assign(f, sFitxIzen);
   rewrite(f);
   
   write('Zenbat elementu nahi dituzu (2 elementu adibidez): ');
   readln(iZenbat);
   
   randomize;
   for k:=1 to iZenbat do
   begin 
      rdZenbakiak.Lehena := random(256);      (* byte baten balioak    *)
      rdZenbakiak.Bigarrena := random*100;    (* 0.0 eta 99.99 artekoa *)
      write(f, rdZenbakiak);
   end;
   
   close(f);
end;

{-----bakarra den fitxategia INTEGER_REAL bezala ikusi-----}
procedure INTEGER_REAL_FitxategiaIkusi(sFitxIzen: tsKate99);
var
   f: tfrdIntReal;
   rdZenbakiak: trdIntReal;
begin
   assign(f, sFitxIzen);
   reset(f);
   
   while not eof(f) do
   begin
      read(f, rdZenbakiak);
      writeln(filepos(f)-1, ' posizioan    1. eremua = ', rdZenbakiak.Lehena:3, '2. eremua = ':25, rdZenbakiak.Bigarrena:0:2);
   end;
   
   close(f);
end;

{-----bakarra den fitxategia REAL_INTEGER bezala ikusi-----}
procedure REAL_INTEGER_FitxategiaIkusi(sFitxIzen: tsKate99);
var
   f: tfrdRealInt;
   rdZenbakiak: trdRealInt;
begin
   assign(f, sFitxIzen);
   reset(f);
   
   while not eof(f) do
   begin
      read(f, rdZenbakiak);
      writeln(filepos(f)-1, ' POSIZIOAN    1. EREMUA =', rdZenbakiak.Lehena:12, '2. EREMUA = ':16, rdZenbakiak.Bigarrena:2);
   end;
   
   close(f);
end;

{-----bakarra den fitxategia CHAR bezala ikusi-----}
procedure CHAR_FitxategiaIkusi(sFitxIzen: tsKate99);
var
   f: tfcKaraktereak;
   cKarakterea: char;
   k: integer;
begin
   assign(f, sFitxIzen);
   reset(f);
   
   k:= 0;
   while not eof(f) do
   begin
      read(f, cKarakterea);
      k := k + 1;
      writeln(k:3, '. elementua = |', cKarakterea, '|    ', Ord(cKarakterea):3);
   end;
   
   close(f);
end;

{-----bakarra den fitxategia BYTE bezala ikusi-----}
procedure BYTE_FitxategiaIkusi(sFitxIzen: tsKate99);
var
   f: tfbyBytak;
   byByte: byte;
   k: integer;
begin
   assign(f, sFitxIzen);
   reset(f);
   
   k:= 0;
   while not eof(f) do
   begin
      read(f, byByte);
      k := k + 1;
      writeln(k:3, '. elementua = ', byByte:3);
   end;
   
   close(f);
end;

var {---------------------- Programa Nagusiko aldagaiak ---------------}
   sFitxIzen: tsKate99;

begin {--------------------------- Programa Nagusia -------------------}
   
   { sFitxIzen := 'C:\Datuak\Zenbakiak.dat';
     writeln('Fitxategi bitarraren izena: ', sFitxIzen); }
   
   sFitxIzen := 'Zenbakiak.dat'; 
   writeln('Fitxategi bitarraren izena: ', sFitxIzen);
   
   writeln;
   writeln('sizeof(tsKate99)   = ', sizeof(tsKate99):3, ' byte');
   writeln('sizeof(integer)    = ', sizeof(integer):3, ' byte');
   writeln('sizeof(real)       = ', sizeof(real):3, ' byte');
   writeln('sizeof(byte)       = ', sizeof(byte):3, ' byte');
   writeln('sizeof(char)       = ', sizeof(char):3, ' byte');
   writeln('sizeof(trdIntReal) = ', sizeof(trdIntReal):3, ' byte');
   writeln('sizeof(trdRealInt) = ', sizeof(trdRealInt):3, ' byte');
   writeln;
   writeln('RETURN sakatu aurrera egiteko!');
   readln;
   
   INTEGER_REAL_FitxategiaSortu(sFitxIzen);  { Lehen eremua integer }
   writeln;                                  { Bigarren eremua real }
   
   writeln('Zenbakiak.dat fitxategiaren edukia integer-real bezala azterturik:');
   writeln('------------------------------------------------------------');
   INTEGER_REAL_FitxategiaIkusi(sFitxIzen);
   writeln('------------------------------------------------------------');
   writeln;
   
   writeln('Zenbakiak.dat fitxategi bera real-integer bezala azterturik:');
   writeln('------------------------------------------------------------');
   REAL_INTEGER_FitxategiaIkusi(sFitxIzen);
   writeln('------------------------------------------------------------');
   writeln;
   
   writeln('Zenbakiak.dat fitxategi bera BYTE bezala azterturik:');
   writeln('------------------------------------------------------------');
   BYTE_FitxategiaIkusi(sFitxIzen);
   writeln('------------------------------------------------------------');
   writeln;
   
   writeln('Zenbakiak.dat fitxategi bera CHAR bezala azterturik:');
   writeln('------------------------------------------------------------');
   CHAR_FitxategiaIkusi(sFitxIzen);
   writeln('------------------------------------------------------------');
   writeln;
   
   writeln;
   writeln ('Programa amaitzeko RETURN tekla sakatu');
   readln;
   
end.   { PROGRAMAREN BUKAERA }
 

iruzkinik ez:

Argitaratu iruzkina

Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.