FILE
DEFINIZIOA FILE edo fitxategi datu-mota informazio homogeneo gordetzen duen bilduma bat da. Fitxategia identifikadore bakar batez izendatuko dugu STRING bat izango dena. Fitxategi bat datu-mota bereko osagaiak dituen multzo bat da eta disko zein zintetan egon ohi da. Fitxategiek array linealekin zerikusia dutelako jarraian datu-mota biren arteko alderaketa egingo dugu: |
ESKEMA Hona hemen zenbaki osoak gordetzen dituen array eta fitxategi baten eskemak: Fitxategiaren eskeman agertzen den egituran, zenbaki osoak biltzen dira eta lehenago esan dugun bezala memoriatik kanpo aurkitzen da. Memoriatik kanpo dagoen egitura horri fitxategi fisiko deritzo eta hura lantzeko beharrezkoa den FILE datu-motako f aldagaiari fitxategi logiko esaten zaio. |
DATU-MOTA SORTZEN Zenbaki errealak gordetzeko fitxategiekin lan egiteko, lehenik FILE datu-mota bat deklaratuko dugu eta gero f aldagaia sortuko dugu. Baina, diskoan dagoen fitxategiak izen bat du eta horregatik erabiliko dugu STRING bat: TYPE
DM_Fitxategi = FILE OF REAL ;VAR Diskoan dagoen informazioa atzitu ahal izateko sFitxIzen aldagaia erabiliko dugu eta fitxategiarekin lan egiteko f aldagaia (FILE datu-motatakoa) beharko dugu. Aldagai biak, noski, konputagailuaren memorian kokatzen dira. Baina konputagailuaren memorian ez dira kokatzen diskoan dauden fitxategiaren datuak. Diskoan kokaturik dagoen egiturari fitxategi fisiko esango diogu. Adibidez, zenbaki errealak biltzen dituen DATUAK.DAT izeneko egiturari fitxategi fisiko esaten diogu eta hona hemen bere balizko eskema bat: Fitxategi logikoa adierazten duen f aldagaia eta diskoan dagoen fitxategi fisikoa elkar uztartzeko Assign prozedura daukagu, eta elkarketa egiteko fitxategi fisikoaren izenaren bitartez lortzen da, STRING baten bitartez alegia. Ikusi eskema hauetan Assign(f,'DATUAK.DAT') prozedura aplikatu aurreko eta ondorengo egoerak: |
OINARRIZKO ERAGIKETA: FITXATEGITIK IRAKURRI Fitxategi fisikoan, diskoan, dagoen datu bat memoriara ekartzeko irakurketa bat egin behar da. Demagun f aldagaia (FILE datu-motatakoa) daukagula eta Assign(F, 'DATUAK.DAT') bitartez uztartu egin dugula 'DATUAK.DAT' izena duen diskoko fitxategiarekin. Honela irakurtzen da datu bat f fitxategi batetik: Read (f, rElem) ;Non rElem aldagaia memorian dagoen eta fitxategiko datua jasoko duen. Ikusi eskema: Irakurketa bakoitzeko elementu bakar bat irakur daiteke, fitxategiaren erakusleak adierazten duen elementua hain zuzen ere. Irakurketa gertatu ondoren erakusleak aurrera egiten du. |
OINARRIZKO ERAGIKETA: FITXATEGIAN IDATZI Memorian dagoen datu bat diskoan gordetzeko, idazketa bat egin beharko da diskoan. Demagun lehen bezala, f aldagaia daukagula uztartu egin duguna 'DATUAK.DAT' izena duen diskoko fitxategiarekin. Memorian aurkitzen den rElem aldagaian datua dago. Honela idazten da datu hori fitxategi batean, lehen bezala f aldagaiaren bitartez: Write (f, rElem) ;Memorian dagoen rElem aldagaiaren edukia fitxategian idatzi. Ikusi eskema: Hasieran, fitxategia hutsik egon da (fitxategiaren erakusle 0 posizioan dagoelako). Idazketa burutu ondoren, datu berri bat dago fitxategian eta erakusleak aurrera egiten du 1 posizioan kokatuz. rElem aldagaiaren edukia berriztuz eta bigarren idazketa bat eginez gero, egoera honako hau izango litzateke, ikusten denez fitxategia luzatu egiten da elementu berri bat daukalako: Baina hirugarren idazketa bat egin aurretik fitxategiaren erakuslea tokiz aldatzen badugu (horretarako Seek erabili behar da), adibidez dagoen tokitik bat atzera egin dezala erakusleak, orduan idazketaren emaitza bestelakoa da. Izan ere, fitxategiaren elementua ordezkatzen du fitxategia luzatu gabe. Beraz, hau da erakuslea posizio bat atzeratzeko agindua Seek(f, FilePos(f)-1) eta idazketa burutzean irudia honelakoak izango lirateke: Ikusten da rElem aldagaiaren edukia berria 5.91 dela eta erakusleak posizio bat atzera egin duela, idazketa burutu ondoren elementu berriak zaharra ordezkatu du, erakusleak aurrera egin du, eta, fitxategiaren luzera ez da aldatu. |
LAN EGITEKO BALIABIDEAK Fitxategiekin trebatzeko adibideak prestatu dira. Bederatzi adibide dira eta aurreneko zortzi adibideek programa nagusia besterik ez daukate zuen arreta fitxategietara mugatzeko, bederatzigarren adibidea garrantzitsuena da bertan prozedurak eta funtzioak erabiltzen direlako. Adibideak exekutatu aurretik bi iruzkin:
|
FITXATEGIAK PARAMETRO BEZALA Programadoreak fitxategiak lantzen dituen errutinak idaztean aukera bi izango ditu, fitxategi logikoa bidaltzea azpiprogramara (FILE datu-motako aldagaia) edo bestela fitxategi fisikoaren izena igortzea azpiprogramara (String datu-motako aldagaia).
Guk bigarren bidea erabiliko dugu, hots, azpiprogrametara fitxategi fisikoaren izena bidaliko dugu String aldagai baten bitartez. Kontutan izan dezagun, nahiz eta azpiprogramaren barruan fitxategia aldatua izan, bere izena aldatzen ez den bitartean parametroa sarrerakoa izango dela (baliozko parametroa alegia).
Azpiprogrametan fitxategiekin lan egiteko hiru urrats emango dira:
Fitxategiaren izena kate bat da eta gogoratu String datu-mota sinplea dela. Horregatik, azpiprograma batean honela agertuko da jokamoldearen arabera:
|
FITXATEGIEN GAINEKO ERAGIKETAK Hurrengo puntuetan fitxategien gaineko zenbait eragiketa azalduko dugu, eragiketok beti azpiprogrametan gauzatuko ditugu eta horrela programa konplexu batetarako oinarrizko software zatiak izan daitezke. Erregistroen fitxategiak landuko ditugu. Beraz hemendik aurrera honelako definizioa sarritan ikusiko dugu, non fitxategiaren elementuaren oinarria hiru eremuko erregistroa den: TYPE DM_sKate49 = String[49] ; FITXATEGIA SORTU FitxategiaSortu.pas adibidean fitxategi berri bat sortu eta rdFitxa datu-motako erregistroak fitxategian gordetzen dira. FITXATEGIAREN EXISTENTZIA Gogoratu lehenago ikusi dugun 3FitxategiarenExistentzia.pas adibidea non fitxategi baten existentzia aztertzen den FileExist funtzioa erabiliz. FITXATEGI OSOA PROZESATU FitxategiOsoaProzesatu1.pas adibidean existitzen den fitxategi baten edukia erakusten da. FitxategiOsoaProzesatu2.pas adibidean fitxategiaren elementu guztien byDeialdia datuak unitate batean inkrementatzen dira. BILAKETA FITXATEGIAN BilaketaFitxategian.pas izeneko adibidean sIzenDeiturak eremuari dagokion datu bat irakutzen da programa nagusian eta funtzio batean datu horren bilaketa gauzatzen da. GEHIKETA FITXATEGIAN GehiketaFitxategian.pas izeneko adibidean fitxategi bati elementu berri bat gehitzen zaio (fitxategiaren bukaeran, noski). FITXATEGIAREN DATU BATEN ALDAKETA DatuBatenAldaketa.pas izeneko adibidean ikasle bati dagokion rNota eremuko balioa aldatu behar zaio. Lehenik, aldatu behar den elementuaren bilaketa egiten da eta gero aldaketa gauzatzen da. Baina kontuz, nahiz eta elementuaren eremu bakarra aldatu nahi izan, fitxategitik irakurtzean edo fitxategian idaztean elementu osoa prozesatzen da. FITXATEGIAN ELEMENTU BAT TARTEKATU Eragiketa hau egiteko array laguntzaile bat erabiliko dugu (ikusi hurrengo bi atalak: F→A eta A→F). Gogoratu arrayen algoritmoak, konkretuki Txertaketa (arrayaren k posizio ezagun batean elementu berri bat txertatu edo tartekatu). FITXATEGITIK ELEMENTU BAT KENDU Kendu beharreko elementua azkena bada Truncate prozedura aplika deazkegu, gainerako kasuetan array laguntzaile bat erabiliko dugu (ikusi hurrengo bi atalak: F→A eta A→F). Gogoratu arrayen algoritmoak, konkretuki Ezabaketa (arrayaren k posizio ezagun batean dagoen elementua ezabatu). FITXATEGI BAT ORDENATU Eragiketa hau egiteko array laguntzaile bat erabiliko dugu (ikusi hurrengo bi atalak: F→A eta A→F). Gogoratu arrayen elementuen Ordenazioa nola lortzen zen. |
FITXATEGI → ARRAY F→A algoritmoan informazioa diskoko fitxategi batean dago eta memoriako array batera eraman nahi da. Ikusi FitxategitikArrayera.pas programa non INFORM.DAT fitxategi batetik abiatuta memoriako array bat elikatzen duen. Programaren zatirik interesgarriena prozedura hau da: PROCEDURE FitxategiArray (VAR ardGela : DM_rdZerrenda, |
ARRAY → FITXATEGI A→F algoritmoan informazioa memoriako array batean daukagu eta diskoko fitxategi batera igaro nahi da. Aurreko F→A programa ikusirik, erraz ulertzen da array batean daukagun informazioa fitxategi batera eramateko prozedura hau: PROCEDURE ArrayFitxategi (CONST ardGela : DM_rdZerrenda, BEGIN |
ADIBIDEAK Hona hemen fitxategien zenbait programa:
|
Última modificación: martes, 6 de agosto de 2013, 14:24