2024(e)ko apirilaren 8(a), astelehena

34. Ariketa: unitateak (III)

ZER DAKIDAN:
Karpeta batean kokaturik dagoen .PAS iturburu-programa batetik abiatuta .EXE programa exekutagarria lortzen ikasi dut. Bestalde, badakit ere unitate bat sortzen eta konpilatzen aurreko 32. Ariketa: unitateak (I) atalean ikasi dudalako. Bestalde, badakit aurrekonpilatutako unitate bat erabiltzen 33. Ariketa: unitateak (II) atalean ikasi dudalako. 



ZER IKASIKO DUDAN:
Aurrekonpilatutako Unitateak erabiltzen dakidanez, hori praktikatuko dut direktorio bateko fitxategien izenak array batean gordez.




diskoa izeneko unitatea

Programa bat idatziko dugu diskoa izeneko unitatea erabiliko duena, bezero-programa honi FitxategiakDirektorioan.pas deituko diogu, eta bere kodea programatuko duen programatzaileak unitatearen interfazea ezagutu behar du (INTERFACE blokea ezagutu behar du). Ikusi diskoa unitateak eskaitzen duen interfazea:

{---------------------------------------------------------------------------}
unit diskoa ;

INTERFACE
const KOPURUMAX = 200 ;

type tasFitxIzenak = array[1..KOPURUMAX] of string ;

procedure DirektorioarenEdukia(sZer: string) ;

procedure FitxategienIzenak( sZer: string ;
var asFitxIzenak: tasFitxIzenak ;
var liLuzera: longint) ;
{---------------------------------------------------------------------------}

Lau elementu hauek partekatzen ditu diskoa unitateak:

  • KOPURUMAX konstante bat
  • Kateen array bat eraezagutzen duen tasFitxIzenak datu-mota
  • Karpeta edo direktorio batean dauden fitxategien zerrenda pantailaratzen duen DirektorioarenEdukia prozedura. Datutzat prozedura honek karaktere-kate bat behar du, zer itxurako fitxategiak pantailaratu nahi diren adierazten duen karaktere-katea
  • Karpeta edo direktorio batean dauden fitxategien izenak array batera igarotzen dituen FitxategienIzenak prozedura, honek hiru parametro beharko ditu:
    1. sZer karaktere-katea, zer itxurako izenak gorde nahi diren adierazten duena 
    2. asFitxIzenak karaktere-kateen arraya, sZer aurreko moldearekin bat egiten duten fitxategien izenak gordeko dituen arraya
    3. liLuzera kopuru osoa, asFitxIzenak arrayaren luzera efektiboa

Dakigunez diskoa unitatea eta FitxategiakDirektorioan.pas bezero-programa karpeta jakin batean egongo dira, helburu den FitxategiakDirektorioan.exe bezero-programa exekutagarria lortze aldera. FitxategiakDirektorioan.exe bezero-programa egikaratzean bere karpetako fitxategiak arakatuko ditu. Beste karpeta batzuen fitxategiak eskuratzeko Chdir prozedura aplikatuko dugu.


FitxategiakDirektorioan.exe fitxategia lortzen

Ordenadorearen disko gogorreko edozein tokitan (mahaigainean adibidez) karpeta bat sortuko dugu, esate baterako IzenakHartu izeneko karpeta. IzenakHartu karpetan hiru fitxategi hauek kokatuko ditugu konpilazioa hasi aurretik:

  1. FitxategiakDirektorioan.pas iturburu-programa
  2. diskoa.ow unitatearen objektu-kodea
  3. diskoa.ppw unitate konpilatua


FitxategiakDirektorioan.pas bezero-programa konpilatu ondoren eta dena ondo badoa, IzenakHartu karpetan bost fitxategi hauek izango ditugu:

  1. FitxategiakDirektorioan.pas iturburu-programa
  2. diskoa.ow unitatearen objektu-kodea
  3. diskoa.ppw unitate konpilatua
  4. FitxategiakDirektorioan.ow iturburu-programaren objektu-programa
  5. FitxategiakDirektorioan.exe programa exekutagarria


FitxategiakDirektorioan.pas fitxategiak diskoa izeneko unitatea erabili behar du, horregatik derrigorrezkoak dira diskoa.ow eta diskoa.ppw fitxategi aurrekonpilatuak IzenakHartu karpetan.


FitxategiakDirektorioan.exe fitxategia exekutatzen

FitxategiakDirektorioan.exe fitxategia exekutatzean bera dagoen karpetako fitxategi guztien zerrenda agertuko du pantailan, horretarako sZer datuak molde hau '*' edukiko du. Ondoren, baldin eta Datuak direktorioa existitzen bada, Datuak karpetara mugitu eta 'A_*.DAT' betetzen dtuen fitxategien zerrenda agertuko du pantailan. Helburuko fitxategien izenak pantailan erakutsi ondoren, Datuak karpetako 'A_*.DAT' betetzen duten fitxategien izenak asFitxIzenak arrayan gordeko dira. Bukatzeko, asFitxIzenak arrayaren edukia erakutsiko da.




FitxategiakDirektorioan.pas iturburu-programa

FitxategiakDirektorioan.pas itrurburu-programa dela eta, ondoko hauetan arreta jarri:

  • DirektorioarenEdukia prozedura diskoa unitatean garaturik dago
  • FitxategienIzenak prozedura diskoa unitatean garaturik dago
  • DirectoryExists funtzio boolearra FileExists funtzio boolearraren antzekoa da (Pascal instalazio batzuetan ez dabil, horregatik iruzkinduta utzi dugu)
  • Uneko karpetaren eduki osoa adierazteko '*' moldea erabili behar da, fitxategi eta direktorio guztiek betetzen duten moldea da
  • Chdir uneko direktoriotik beste direktorio batera aldatzeko:
    • Uneko direktorioa '.' da
    • Uneko direktorioaren gurasoa '..' da
    • Uneko direktorioaren menpekoa den 'Datuak' karpetara joateko Chdir('Datuak') egin behar da
  • Uneko karpeta zein den ikusteko GetCurrentDir funtzioari dei egitea aski da (GetCurrentDir funtzioak karaktere-kate bat itzultzen du)
  • Uneko karpetaren eduki zati bat adierazteko 'A_*.DAT' moldea erabili da ('A_'-tik hasten den edozein fitxategi eta 'DAT' luzapena duena)

{
INTERFACE
const KOPURUMAX = 200;
type tasFitxIzenak = array[1..KOPURUMAX] of string;
procedure DirektorioarenEdukia(sZer: string);
procedure FitxategienIzenak( sZer: string;
var asFitxIzenak: tasFitxIzenak;
var liLuzera: longint);
}

program FitxategiakDirektorioBateanBilatzen ;

uses
sysutils, diskoa ;

procedure FitxategienIzenakIkusi(const asFitxIzenak: tasFitxIzenak; liLuzera: longint) ;
var
n: longint ;
begin
for n:=1 to liLuzera do
begin
writeln(n:5, '. fitxategia: ', asFitxIzenak[n]) ;
end ;
end ;

{------------------------------------------- Programa Nagusia -------------------}

var
sZer: string ;
asFitxIzenak: tasFitxIzenak ;
liLuzera: longint ;

begin
writeln ;
writeln ;
writeln('=============================================================================') ;
writeln('Uneko direktorioa: ', GetCurrentDir) ;
writeln('Uneko direktorioan ''Datuak'' izeneko karpeta sorturik dagoela ziurtatu!!!') ;
writeln('=============================================================================') ;
writeln ;
writeln ;

sZer := '*' ;
DirektorioarenEdukia(sZer) ;

//if DirectoryExists('Datuak') then
//begin
Chdir('Datuak') ;
sZer := 'A_*.DAT' ;
DirektorioarenEdukia(sZer) ;

writeln ;
writeln('Uneko direktorioa: ', GetCurrentDir) ;
writeln('''Datuak'' karpetatik ''A_*.DAT'' irizpideko fitxategiak arrayra') ;
writeln ;
FitxategienIzenak(sZer, asFitxIzenak, liLuzera) ;

writeln('Hauek dira ''Datuak'' karpetan dauden ''A_*.DAT'' irizpideko fitxategiak:') ;
writeln ;
FitxategienIzenakIkusi(asFitxIzenak, liLuzera) ;
//end
//else
// writeln('Ez da aurkitu ''Datuak'' karpeta (direktorioa)') ;

readln;
end. { PROGRAMAREN BUKAERA }

FitxategiakDirektorioan.exe programa exekutagarria egikaratzean, IzenakHartu\Datuak direktorioaren edukia hau bada:


Emaitza hau litzateke:


Non:

  1. IzenakHartu direktorioaren fitxategi guztien (datua'*' izan da) informazioa erakusten da pantailan. Orotara 5 fitxategi eta 3 direktorio, hauek:
    • . puntuak adierazten duen uneko direktorioa
    • .. puntuek adierazten duten uneko direktorioaren gainekoa
    • Uneko direktorioaren azpian dagoen Datuak direktorioa
  2. Datuak direktorioa unekoa izan dadila eta 'A_*.DAT' moldea betetzen duten fitxategien informazioa erakutsi, guztira 4 fitxategi dira adibidean
  3. Datuak uneko direktorioa delarik, 'A_*.DAT' moldea betetzen duten fitxategien izenak asFitxIzenak arrayan gorde eta arrayaren edukia pantailan erakutsi





    Windows:
Arik-34.zip   bere barnean IzenakHartu izeneko karpeta bat ondoko edukiarekin:
  • Programa-bezeroaren FitxategiakDirektorioan.pas iturburu-kodea
  • diskoa.ow unitatearen objektu-kodea
  • diskoa.ppw unitate konpilatua
  • Datuak karpeta (datu-fitxategi batzuekin) 
    Mac:

 

iruzkinik ez:

Argitaratu iruzkina

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