Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Az Input-Output használata Az input-outputot a nyelv előredefiniált csomagokon keresztül valósítja meg. Mindegyik csomag az Ada alapcsomag gyereke.

Hasonló előadás


Az előadások a következő témára: "Az Input-Output használata Az input-outputot a nyelv előredefiniált csomagokon keresztül valósítja meg. Mindegyik csomag az Ada alapcsomag gyereke."— Előadás másolata:

1 Az Input-Output használata Az input-outputot a nyelv előredefiniált csomagokon keresztül valósítja meg. Mindegyik csomag az Ada alapcsomag gyereke.

2 Külső fájlok és fájlobjektumok n n külső fájl – – értéket lehet belőle olvasni – – értéket lehet bele írni n n Egy sztring (a fájl neve) azonosítja. n n Egy másik sztring is kapcsolódhat a fájlhoz, amely a fájl rendszerfüggő jellemzőit tartalmazza (pl. hozzáférési jogok).

3 Sequential_IO, Direct_IO sablon csomag n n példányosítjuk n n az eredmény csomag tartalmaz: fájl típust: File_Type műveleteket - pl. Open, Read, Write

4 Az olvasható forma input-outputja: Text_IO, ill. Wide_Text_IO csomag

5 Fájlok használata: n n a fájlt össze kell kapcsolni egy külső fájllal n n ezután egy kurrens üzemmódban van: type File_Mode is (In_File, Inout_File, Out_File) Direct_IO esetén, type File_Mode is (In_File, Out_File, Append_File); Sequential_IO, Text_IO, Wide_Text_IO, és Stream_IO esetén. A fájl üzemmódja változtatható.

6 n n A lehetséges hibajelzéseket az Io_Exceptions csomag definiálja. n n A fájltípusok limited private típusok.

7 A fájl kezelés: n n fájl-változó deklarálása, n n a fájl-változó összekapcsolása egy külső fájllal (fájl-nyitás), n n az olvasó, ill. író műveletek végrehajtása, n n a fájl lezárása.

8 Egységes névkonvenció: n n egy fájl létrehozása a Create, n n egy létező külső fájl megnyitása az Open, n n egy fájl lezárása a Close eljárással történik,

9 Soros és közvetlen elérésű fájlok n n Sequential_IO és a Direct_IO sablon csomagok n n Soros hozzáférés esetén a fájl értékek sorozata, amelyek megjelenésük sorrendjében elérhetőek. n n Ha a fájlt megnyitottuk, az átvitel In_File és Out_File mód esetén a fájl elején, Append_File mód esetén a fájl végén kezdődik.

10 n n Közvetlen hozzáférés esetén a fájl elemek egy halmaza, amelyek lineáris sorrendben egymás utáni pozíciókat foglalnak el, bármely pozícióra vihetünk ki a fájlba egy értéket, ill. olvashatunk be egy elemet.

11 Egy elem pozícióját az indexe mutatja: n n az első elem indexe 1, n n az utolsó elem indexe a pillanatnyi méret, ez 0, ha nincs eleme a fájlnak. n n A pillanatnyi méret a külső fájl egy jellemzője. n n Egy megnyitott direkt fájlnak van egy kurrens indexe, ami az az index, amit a következő olvasó vagy író utasítás használni fog. n n Amikor a direkt fájlt megnyitjuk, ez az eljárás a kurrens indexet egyre állítja. Egy direkt fájl kurrens indexe a fájl objektum jellemzője, nem a külső fájlé.

12 Külső fájlok vezérlése: n n szekvenciális fájloknál: procedure Create ( File : in out File_Type; Mode : in File_Mode:=Out_File; Name: in String:=""; Form: in String:=""); n n direkt fájloknál: procedure Create ( File : in out File_Type; Mode : in File_Mode:=InOut_File; Name: in String:=""; Form: in String:="");

13 n n Hibajelzések: – –Status_Error - ha az adott fájl már meg van nyitva, – –Name_Error - ha a névnél megadott jelsorozat nem használható a külső fájl azonosítására (pl. van már ilyen nevű külső fájl, – –Use_Error - ha a specifikált üzemmódra a környezet nem támogatja külső fájl létrehozását az adott névvel és formával.

14 procedure Open( File : in out File_Type; Mode : in File_Mode; Name: in String; Form: in String:=""); n n Hibajelzések: – –Status_Error - ha az adott fájl már meg van nyitva, – –Name_Error - ha nincs ilyen külső fájl, – –Use_Error - ha a specifikált üzemmódra a környezet nem támogatja külső fájl létrehozását az adott névvel és formával. (pl. nem megfelelő üzemmódot akarok, v. hibás a form rész, v. nincs jogom írásra stb.).

15 procedure Close ( File : in out File_Type ) ; n n Hibajelzések: – –Status_Error - ha az adott fájl nincs megnyitva, procedure Delete( File : in out File_Type); n n Hibajelzések: – –Status_Error - ha az adott fájl már meg van nyitva, – –Use_Error - ha a környezet nem támogatja a külső fájl törlését.

16 procedure Reset(File : in out File_Type; Mode : in File_Mode); procedure Reset(File : in out File_Type); n n Hibajelzések: – –Status_Error - ha az adott fájl nincs megnyitva, – –Use_Error - ha a környezet nem támogatja a külső fájlra a visszaállítást, vagy a specifikált üzemmódot.

17 function Mode ( File : in File_Type ) return File_Mode; n n Hibajelzések: – –Status_Error - ha az adott fájl nincs megnyitva, function Name( File : in File_Type) return String; n n Hibajelzések: – –Status_Error - ha az adott fájl nincs megnyitva, – –Use_Error - ha az objektumhoz kapcsolt fájl ideiglenes, azaz névvel nem azonosítható. function Form( File : in File_Type) return String; n n Hibajelzések: – –Status_Error - ha az adott fájl nincs megnyitva, function Is_Open( File : in File_Type) return Boolean;

18 Író-olvasó műveletek: n n mindig Status_Error, ha az adott fájl nincs előzőleg megnyitva

19 Szekvenciális fájlok procedure Read( File : in File_Type; Item : out Element_Type); n n Hibajelzések: – –Mode_Error - ha a fájl nincs In_File üzemmódban, – –End_Error - ha nem lehet több elemet kiolvasni az adott fájlból, – –Data_Error - ha az olvasott elem nem értelmezhető Element_Type típusú értékként.

20 procedure Write( File : in File_Type; Item : in Element_Type); n n Hibajelzések: – –Mode_Error - ha a fájl nincs Out_File vagy Append_File üzemmódban, – –Use_Error - ha a külső fájl kapacitása kimerült. function End_Of_File ( File : in File_Type ) return Boolean; n n Hibajelzések: – –Mode_Error - ha a fájl nincs In_File üzemmódban.

21 Közvetlen elérésű fájlok procedure Read( File : in File_Type; Item: out Element_Type) ; procedure Read( File : in File_Type; Item: out Element_Type; From : in Positive_Count) ; n n Hibajelzések: – –Mode_Error - ha a fájl Out_File üzemmódban van, – –End_Error - ha a használt index nagyobb a külső fájl méreténél, – –Data_Error - ha az olvasott elem nem értelmezhető Element_Type típusú értékként.

22 procedure Write( File : in File_Type; Item: in Element_Type); procedure Write( File : in File_Type; Item: in Element_Type; To : in Positive_Count); n n Hibajelzések: – –Mode_Error - ha a fájl In_File üzemmódban van, – –Use_Error - ha a külső fájl kapacitása kimerült.

23 procedure Set_Index( File : in File_Type; To : in Positive_Count); function Index( File : in File_Type) return Positive_Count; function Size(File : in File_Type) return Count; function End_Of_File(File : in File_Type) return Boolean; n n Hibajelzések: – –Mode_Error- ha a fájl Out_File üzemmódban van.

24 with Direct_Io; procedure DIOpélda is package Dio is new Direct_Io(Character); use Dio; F: Dio.File_Type; Begin Create(f, Name=>"példa.dat"); for J in Integer range 1..1000 loop Write(f, 'a'); end loop; for J in reverse Positive_Count Range 1..250 loop Write(F,'l', J*4-2); end loop; for J in Positive_Count Range 1..250 loop Set_Index(F, J*4-1); Write(F,'m'); end loop; Close(f); end DIOpélda;

25 Textfájlok kezelése n n A Text_IO csomag teszi lehetővé az olvasható formák input-outputját. n n Minden fájlt szekvenciálisan lehet olvasni, ill. minden fájlra szekvenciálisan lehet írni; a karakterek sorozatát sorokká, a sorok sorozatát oldalakká csoportosítjuk. n n Az előzőekben megadott fájlkezelési lehetőségek a szöveges input-outputra is alkalmazhatóak. n n A Read és Write eljárások helyett Get és Put eljárások (belső konverzió is van).

26 n n Alapértelmezett input, ill. output fájl: – –aktuális (kurrens) input - Current_Input, – –aktuális (kurrens) output - Current_Output n n A program indulásának pillanatában: – –standard text-fájlok. n n Interaktív rendszerekben: – –a klaviatúra a standard input - Standard_Input, – –a képernyő a standard output - Standard_Output. n n Átirányítás: – – Set_Input - Set_Output n n Visszairányítás: – –pl. Set_Input(Standard_Input)

27 Logikai szempontból: n n egy szövegfájl oldalak sorozata, n n egy oldal sorok sorozata, n n egy sor karakterek sorozata n n a sorok végét sorvégjel, n n az oldalak végét egy sorvégjel és egy azt követő lapvégjel n n a fájl végén egy sorvégjel, egy lapvégjel és egy fájlvégjel

28 Számozások: n n a karakterek a sorokon belül 1-gyel kezdve vannak megszámozva, n n a sorvégjel sorszáma eggyel nagyobb, mint a sorban található karakterek száma, n n a sorok az oldalakon belül, ill. az oldalak a fájlon belül ugyanezen rendszer szerint vannak megszámozva, n n az aktuális karakter sorszáma (oszlopszám) a következő karakter sorszáma, n n az aktuális sor sorszám az aktuális sor sorszáma, n n az aktuális lapszám az aktuális lap sorszáma.

29 n n Ezek a számok a Count típus Positive_Count altípusába esnek. type Count is range 0.. implementation-defined; subtype Positive_Count is Count range 1.. Count'Last; n n Egy output fájlra beállítható és lekérdezhető a maximális sorhossz, ill. oldalhossz. n n Ha a kiírandó érték nem fér bele a feldolgozás alatt álló sorba egy specifikált maximális sorhossz mellett, akkor automatikusan új sort kezd, mielőtt végrehajtaná az átvitelt, ugyanígy, ha egy új sor nem fér rá a feldolgozás alatt álló oldalra egy specifikált maximális oldalhossz mellett, akkor automatikusan új oldalt kezd. n n Amikor egy fájlt Out_File vagy Append_File üzemmódban nyitunk meg, mindkét érték 0, ez megegyezés szerint azt jelenti, hogy nincs rájuk korlát. n n Következésképpen az output egyetlen sorból áll, ha nem használjuk explicite a New_Line, ill. New_Page parancsokat!

30 n n A szövegfájlok megnyitási módjai, inicializáló és bezáró műveletei pontosan ugyanolyanok, mint a szekvenciális fájlok esetén, de bizonyos további hatásaik is vannak a ottaniakhoz képest: – –A Create és Open eljárásokban: ha a fájlt Out_File vagy Append_File üzemmódra nyitottunk meg, az oldalhossz és sorhossz nem korlátozott; mindhárom üzemmód esetén az aktuális oszlop, sor és oldal számot 1-re állítja. – –Append_File mód esetén implementációfüggő, hogy az eredeti szöveg és az új szöveg között lesz-e oldalvégjel. – –A Close eljárásban: Out_File és Append_File üzemmódú fájl esetén még egy New_Page eljárást hív, majd kiír egy fájlvég jelet. – –A Reset eljárás Out_File és Append_File üzemmódú fájl esetén még egy New_Page eljárást hív, majd kiír egy fájlvég jelet.

31 n n Ha Out_File üzemmódúra állítjuk a fájlt, az oldalhossz és sorhossz nem korlátozott; mindkét üzemmód esetén az aktuális oszlop, sor és oldal számot 1-re állítja. n n Append_File mód esetén implementációfüggő, hogy az eredeti szöveg és az új szöveg között lesz-e oldalvégjel. n n Mode_Error hibajelzés lép fel, ha a kurrens default input, ill. output fájl üzemmódját akarjuk változtatni.

32 Alapértelmezett fájlok kezelése: n n Ezeket a fájl paraméter nélküli Get és Put műveletek használják. procedure Set_Input(File : in File_Type); n n Hibajelzések: – –Mode_Error- ha a fájl nincs In_File üzemmódban – –Status_Error- ha az adott fájl nincs megnyitva procedure Set_Output(File : in File_Type); procedure Set_Error (File : in File_Type); n n Hibajelzések: – –Mode_Error- ha a fájl nincs Out_File vagy Append_File üzemmódban – –Status_Error- ha az adott fájl nincs megnyitva

33 function Standard_Input return File_Type; function Standard_Input return File_Access; function Standard_Output return File_Type; function Standard_Output return File_Access; function Standard_Error return File_Type; function Standard_Error return File_Access; function Current_Input return File_Type; function Current_Input return File_Access; function Current_Output return File_Type; function Current_Output return File_Access; function Current_Error return File_Type; function Current_Error return File_Access;

34 Standard szövegfájlok átirányítása: with Text_Io; use Text_Io; procedure Átirányít is F: File_Type; I: Character; Begin Create( F, Name =>"példa.txt"); Set_Output(F); Put("Ez a szöveg most nem a képernyőre,"); Put("hanem a példa.txt fájlba került."); New_Line; Set_Output(Standard_Output); Put_Line("A példa.txt fájl tartalma:"); Reset(F,In_File); Set_Input(F); while not End_Of_File loop while not End_Of_Line loop Get(I); Put(I); end loop; Skip_Line; New_Line; end loop; Close(F); end Átirányít;

35 Sor- és oldalhosszak beállítása és lekérdezése n n Minden esetben – –Status_Error, ha az adott fájl nincs megnyitva, – –Mode_Error, ha a fájl nincs Out_File vagy Append_File üzemmódban. procedure Set_Line_Length(File : in File_Type; To : in Count); procedure Set_Line_Length(To : in Count); n n Hibajelzések: – –Use_Error - ha a specifikált sorhossz nem felel meg a fájllal összekapcsolt külső fájlnak.

36 procedure Set_Page_Length(File : in File_Type; To : in Count); procedure Set_Page_Length(To : in Count); n n Hibajelzések: – –Use_Error - ha a specifikált oldalhossz nem felel meg a fájllal összekapcsolt külső fájlnak. function Line_Length(File : in File_Type) return Count; function Line_Length return Count; function Page_Length(File : in File_Type) return Count; function Page_Length return Count;

37 Oszlopok, sorok, és oldalak műveletei n n Minden esetben: – –Status_Error, ha az adott fájl nincs megnyitva. procedure New_Line(File : in File_Type; Spacing : in Positive_Count := 1); procedure New_Line(Spacing : in Positive_Count := 1); n n Hibajelzések: – –Mode_Error- ha a fájl nincs Out_File vagy Append_File üzemmódban

38 procedure Skip_Line(File : in File_Type; Spacing : in Positive_Count := 1); procedure Skip_Line(Spacing : in Positive_Count := 1); n n Hibajelzések: – –Mode_Error- ha a fájl nincs In_File üzemmódban – –End_Error- ha fájl végét akar olvasni function End_Of_Line(File : in File_Type) return Boolean; function End_Of_Line return Boolean; n n Hibajelzések: – –Mode_Error- ha a fájl nincs In_File üzemmódban

39 procedure New_Page(File : in File_Type); procedure New_Page; n n Hibajelzések: – –Mode_Error- ha a fájl nincs Out_File vagy Append_File üzemmódban procedure Skip_Page(File: in File_Type); procedure Skip_Page; n n Hibajelzések: – –Mode_Error- ha a fájl nincs In_File üzemmódban – –End_Error- ha fájl végét akar olvasni

40 function End_Of_Page(File : in File_Type) return Boolean; function End_Of_Page return Boolean; n n Hibajelzések: – –Mode_Error- ha a fájl nincs In_File üzemmódban function End_Of_File(File : in File_Type) return Boolean; function End_Of_File return Boolean; n n Hibajelzések: – –Mode_Error - ha a fájl nincs In_File üzemmódban

41 Az írás vagy olvasás aktuális pozíciójának vezérlése: procedure Set_Col(File : in File_Type; To : in Positive_Count); procedure Set_Col(To : in Positive_Count); n n - Out_File vagy Append_File üzemmódú fájlra n n Hibajelzés: – –Layout_Error - ha van megadva egy (nem 0) maximális sorhossz, és a To-beli érték ennél nagyobb. n n - In_File üzemmódú fájlra n n Hibajelzés: – –End_Error- ha fájl végét akar olvasni

42 procedure Set_Line(File : in File_Type; To : in Positive_Count); procedure Set_Line(To : in Positive_Count); n n - Out_File vagy Append_File üzemmódú fájlra n n Hibajelzés: – –Layout_Error - ha van megadva (nem 0) maximális oldalhossz, és a To-beli érték ennél nagyobb. n n - In_File üzemmódú fájlra n n Hibajelzések: – –End_Error- ha fájl végét akar olvasni

43 function Col(File : in File_Type) return Positive_Count; function Col return Positive_Count; n n Hibajelzés: – –Layout_Error- ha a visszaadott érték nagyobb, mint a Count típus felső határa. function Line(File : in File_Type) return Positive_Count; function Line return Positive_Count; n n Hibajelzések: – –Layout_Error- ha a visszaadott érték nagyobb, mint a Count típus felső határa. function Page(File : in File_Type) return Positive_Count; function Page return Positive_Count; n n Hibajelzések: – –Layout_Error- ha a visszaadott érték nagyobb, mint a Count típus felső határa.

44 with Text_io; use Text_io; procedure Oldalak is F: file_type; I: Character; Begin Create(f,name=>"példa.txt"); Set_Line_Length(F,20); Set_Page_Length(F,3); for I in Integer range 1..234 loop Put(F,'a'); end loop; Reset(F,mode=>in_file); while not End_Of_File(F) loop if End_Of_Line(F) then Put(" Sor vége"); New_Line; end if; if End_Of_Page(F) then Put("Lap vége"); New_Line; end if; Get(F,I); Put(I); end loop; New_Line; Put_line("File vége"); Close(F); end Oldalak;

45 Get és Put eljárások n n A Character és String típusú elemek Get és Put eljárásai egyedi karakter-értékeket kezelnek. n n A numerikus és felsorolási típusokra vonatkozó Get eljárások lexikai elemként analizálják a bejövő karakter- sorozatot, a Put eljárások pedig megfelelő lexikális elemként továbbítják az adott értékeket. n n Minden Get, ill. Get_Line egy In_File üzemmódban és minden Put, ill. Put_Line egy Out_File vagy Append_File üzemmódban lévő fájlra értelmes, megfelelően módosítják a specifikált fájl aktuális oszlop, sor és lap számát. n n Hibaüzenetek: – – Status_Error, ha meg nem nyitott fájlra hívjuk meg őket. – –Mode_Error hibát jeleznek a Get és Get_Line műveletek ha a fájl nem In_File üzemmódú, illetve a Put és Put_Line műveletek, ha a fájl üzemmódja nem Out_File vagy Append_File.

46 A karakter típus műveletei: procedure Get(File : in File_Type; Item : out Character); procedure Get(Item : out Character); n n Hibajelzés: – –End_Error - ha fájl végén túl akar olvasni procedure Put(File : in File_Type; Item : in Character); procedure Put(Item : in Character);

47 procedure Look_Ahead (File : in File_Type; Item : out Character; End_Of_Line : out Boolean); procedure Look_Ahead (Item : out Character; End_Of_Line : out Boolean); n n Hibajelzések: – –Mode_Error, ha a fájl nem In_File üzemmódú.

48 procedure Get_Immediate(File : in File_Type; Item : out Character); procedure Get_Immediate(Item : out Character); n n Hibajelzések: – – Mode_Error, ha a fájl nem In_File üzemmódú, – – End_Error a fájl végén. procedure Get_Immediate(File : in File_Type; Item : out Character; Available : out Boolean); procedure Get_Immediate(Item : out Character; Available : out Boolean); n n Hibajelzések: – – Mode_Error, ha a fájl nem In_File üzemmódú, – – End_Error a fájl végén.

49 String típus műveletei: procedure Get(File : in File_Type; Item : out String); procedure Get(Item : out String); n n Hibajelzés: – –End_Error - ha fájl végén túl akar olvasni procedure Put(File : in File_Type; Item : in String); procedure Put(Item : in String);

50 procedure Get_Line(File : in File_Type; Item : out String; Last : out Natural); procedure Get_Line(Item : out String; Last : out Natural); n n Hibajelzés: – –End_Error - ha fájl végén túl akar olvasni procedure Put_Line(File : in File_Type; Item : in String); procedure Put_Line(Item : in String);

51 with Text_Io; use Text_Io; procedure Get_Put is F: File_Type; I: Character; S:String(1..80); Last: Natural; B:Boolean:=True; begin -- példa.txt létrehozása Create(F, Name=>"példa.txt"); while not End_of_File loop Get(I); Put(F, I); if End_of _Line then Skip_Line; New_Line(F); end if; end loop; Close(F); Put_Line("A példa.txt tartalma:"); Open(F, Name=>"példa.txt", Mode=>In_File ); while not End_Of_File(F) loop Get_Line(F,S,Last); Put_Line(S(1..Last)); end loop; Close(F); Put_Line(„nyomjon le egy billentyűt”); while not B loop Get_Immediate(I,B); end loop; end Get_Put;

52 Egész típusok input-outputja n n Integer_IO és Modular_IO beágyazott sablon csomagok n n példányosítani kell őket használat előtt a megfelelő egész típusra. n n A számok kiíratási szélességét vezérlő default érték a megfelelő egész típus szélessége: subtype Field is Integer range 0..implementációfüggő; Default_Width : Field := Num'Width; n n Az értékeket decimális, vagy más alapú számként kezelhetjük, ennek default értéke 10: subtype Number_Base is Integer range 2.. 16; Default_Base : Number_Base := 10;

53 A műveletek: procedure Get(File : in File_Type; Item : out Num; Width : in Field := 0); procedure Get(Item : out Num; Width : in Field := 0); n n Hibajelzés: – –Data_Error-ha nem megfelelő az olvasott jel szintaxisa, vagy ha a kapott érték nincs benne a Num típusban procedure Put(File : in File_Type; Item : in Num; Width : in Field := Default_Width; Base : in Number_Base := Default_Base); procedure Put(Item : in Num; Width : in Field := Default_Width; Base : in Number_Base := Default_Base); procedure Get(From : in String; Item : out Num; Last : out Positive); n n Hibajelzés: – –Data_Error - ha nem megfelelő az olvasott jel szintaxisa, vagy ha a kapott érték nincs benne a Num típusban. procedure Put(To : out String; Item : in Num; Base : in Number_Base := Default_Base);

54 n n A Text_IO.Integer_IO sablon csomag nem sablon változatai: – – az összes előre definiált egész típusra pl.: Ada.Integer_Text_IO, Ada.Long_Integer_Text_IO.

55 with Text_Io, Sequential_Io; use Text_Io; procedure Intio is package Int_Io is new Integer_Io(Integer); use Int_Io; package Sio is new Sequential_Io(Integer); use Sio; F: Sio.File_Type; I: Integer; Begin Create(F, Out_File, "pelda.dat"); while not End_of_file loop Get(I); Write(F, I); end loop; Reset(F, In_File); while not End_Of_File(F) loop Read(F, I); Put(I, Width => 20, Base => 3); -- 3-as számrendszerben Put(I, Width => 7); -- 10-es számrendszerben New_Line; end loop; Close(F); end IntIo;

56 Valós típusok input-outputja n n A Float_IO, a Fixed_IO és a Decimal_IO beágyazott sablon csomagok a lebegőpontos és fixpontos (+ decimális fixpontos (tizedespontos)) számok input-outputjához, n n használat előtt példányosítani kell őket a megfelelő valós típusra. n n A kezelt értékekből képzett decimális literálok lehetséges formátumai: – –Fore_mező tizedespont Aft_mező, ill. – –Fore_mező tizedespont Aft_mező E Exp_mező, ahol nincs helyköz az egyes mezők között

57 n n E mezők szélességének default értéke: n n lebegőpontos típusokra: – –Default_Fore : Field := 2; – –Default_Aft : Field := Num'Digits-1; – –Default_Exp : Field := 3; n n fixpontos és decimális fixpontos típusokra: – –Default_Fore : Field := Num'Fore; – –Default_Aft : Field := Num'Aft; – –Default_Exp : Field := 0;

58 A műveletek: procedure Get(File : in File_Type; Item : out Num; Width : in Field := 0); procedure Get(Item : out Num; Width : in Field := 0); n n Hibajelzés: – –Data_Error-ha nem megfelelő az olvasott jel szintaxisa, vagy ha a kapott érték nincs benne a Num típusban procedure Put(File : in File_Type; Item : in Num; Fore : in Field := Default_Fore; Aft : in Field := Default_Aft; Exp : in Field := Default_Exp); procedure Put(Item : in Num; Fore : in Field := Default_Fore; Aft : in Field := Default_Aft; Exp : in Field := Default_Exp);

59 procedure Get(From : in String; Item : out Num; Last : out Positive); n n Hibajelzés: – –Data_Error-ha nem megfelelő az olvasott jel szintaxisa, vagy ha a kapott érték nincs benne a Num típusban procedure Put(To : out String; Item : in Num; Aft : in Field := Default_Aft; Exp : in Field := Default_Exp); n n A Text_IO.Float_IO sablon csomag nem sablon változatai az összes előre definiált lebegőpontos típusra: pl. Ada.Float_Text_IO, Ada.Long_Float_Text_IO.

60 with Text_Io; use Text_Io; procedure F_io is package Fio is new Float_IO (Float); use Fio; I: Float; P: Positive; Begin Get(" 123.45678 ", I, P); Put(I); New_Line; Put(I, Fore=>5); New_Line; Put(I, Fore=>5, Aft=>10); New_Line; end F_Io; A program eredménye: 1.23457E+02 1.23457E+02 1.2345677948E+02

61 Felsorolási típusok input-outputja n n Az Enumeration_IO beágyazott sablon csomag definiálja a felsorolási típusok input-outputját. n n Használat előtt példányosítani kell a megfelelő felsorolási típusra. n n A kiíratások formátumánál a Set paraméterben adjuk meg, hogy nagy- vagy kisbetűket használjon, n n a Width paraméterben pedig a szélességet. n n Ezek default értéke: Default_Width : Field := 0; Default_Setting : Type_Set := Upper_Case;

62 A műveletek: procedure Get(File : in File_Type; Item : out Enum); procedure Get(Item : out Enum); n n Hibajelzés: – –Data_Error-ha nem megfelelő az olvasott jel szintaxisa, vagy ha a kapott érték nincs benne a Num típusban procedure Put(File : in File_Type; Item : in Enum; Width : in Field := Default_Width; Set : in Type_Set := Default_Setting); procedure Put(Item : in Enum; Width : in Field := Default_Width; Set : in Type_Set := Default_Setting); procedure Get(From : in String; Item : out Enum; Last : out Positive); n n Hibajelzés: – –Data_Error-ha nem megfelelő az olvasott jel szintaxisa, vagy ha a kapott érték nincs benne az Enum típusban procedure Put(To : out String; Item : in Enum; Set : in Type_Set := Default_Setting);

63 with Text_Io; use Text_Io; procedure Enum_Io is type Gyümölcs is (Alma, Narancs, Barack); package Gyümölcs_Io is new Enumeration_Io (Gyümölcs); use Gyümölcs_Io; G: Gyümölcs; P: Positive; Begin Get(" Alma másik alma harmadik alma", G, P); Put(G); New_Line; Put(G, Width=>10, Set=>Lower_Case); end Enum_Io; A program eredménye: ALMA alma

64 Wide_Character és Wide_String input-output n n A Wide_Character és Wide_String értékek szöveges input-outputjának megvalósítása a Wide_Text_IO csomagban található. n n A csomag specifikációja megegyezik a Text_IO csomagéval, persze azzal a módosítással, hogy a Get, Look_Ahead, Get_Immediate, Get_Line, Put és Put_Line műveletekben a Character és String típusokat Wide_Character, illetve Wide_String típusokra cseréljük. n n A Text_IO-hoz hasonlóan a beágyazott sablon numerikus csomagoknak létezik nem sablon változata is az előredefiniált numerikus típusokra, és ezek névképzése is az ottanival analóg.


Letölteni ppt "Az Input-Output használata Az input-outputot a nyelv előredefiniált csomagokon keresztül valósítja meg. Mindegyik csomag az Ada alapcsomag gyereke."

Hasonló előadás


Google Hirdetések