12.File binari
Transcript
12.File binari
ESEMPIO COMPLETO FILE BINARIO È dato un file di binario i cui record rappresentano ! , secondo il seguente formato: • "#$%&#')( (al più 30 caratteri) • %&#')( (al più 30 caratteri) • *+(,**&# (un singolo carattere, - ./- o -102- ) • 3%%Ȣ,%+3,*&"&6 7 3 Si noti che la creazione del file binario deve essere fatta da programma, mentre per i file di testo può essere fatta con un text editor CREAZIONE FILE BINARIO 8,9,:<;&=+9?>@+:&8BAC+D W @HH S @ WXZY E 8,9,:<;&=+9[>@+:&8BAC+DT@UR >: S C&9,\ XZ]_^ AHCABI@a`cb Y R 8<=D,C+\ bBd+8&bO@eZ=,AHCABI@ R >: S C&9,\ X X bBf<ChgABI@a`cb Y R Y 8<=D,C+\ bBd+8&bOZ@eLCABI@ R >: S C&9,\ X X bBf<C&i<@88BAa`cY b Y R 8<=D,C+\ bBd+8&bOZ@ej8B@88BA R >: S C&9,\ X X bBf<C_kCCAGC+D&8<= Y S 9,Dc`cb Y R 8<=D,C+\ X bBd<lbO?m_@eZD,CCA Y R :,@&9B;&:,CG @UR V CREAZIONE FILE BINARIO L’esecuzione del programma precedente crea il file binario contenente i dati immessi dall’utente. Solo a questo punto il file può essere utilizzato Il file non è visualizzabile tramite un text editor: questo sarebbe il risultato CREAZIONE FILE BINARIO È necessario scrivere un programma che lo crei strutturandolo in modo che ogni record contenga una 8,9,:<;&=+9?>@+:&8BAC+DE =<F&D:G=,AHCABI@JLKMNOCABI@JLKMNOP8<@88BAJ QNR S C&9TD,CCAUR VR I dati di ogni persona da inserire nel file vengono richiesti S all’utente tramite la funzione W @HH @ WXZY che non ha parametri e restituisce come valore di ritorno la 8,9,:<;&=+9 >@+:&8BAC+D letta. Quindi il prototipo è: 8,9,:<;&=+9?>@+:&8BAC+D W @HH S @ WXZY R nBop<q<rtsBu<vw+CREAZIONE xBytuotz FILE BINARIO nBop<q<rtsBu<vw+xBytur_oj~ { |,} xBy_s,q<y<v<<xzBpB& { |,} q <Pq_z_BpBzt v < p_zt v <, xv,x_xtz & o|p,yBpBp_z xBy_s,q<y<v<<xzBpB?rvBB,o_rvL+ ,opL, 5xBy_s,qBy,v<<xtzBpBPv5op,y otpBv_ , t_ z,vBp j,vBz+rtv u<,y< ~ + oBrv opBv { L | v_,<rvBoBByv,o v<¡jvrLxB+oB ¢v_z xBy_ts,q<y,vBBxzBpB+ + Bop,y p opBv ¤ <¨ + x_qBp ju £ ¡ opBv++ ¦¥<§ q<r z,xv + t© ESEMPIO COMPLETO FILE BINARIO Ora si vuole scrivere un programma che • legga record per record i dati dal file ! • ponga i dati in un array di ! 1 ® ! ¬ ¯ °& & && ± • ª &«¬ rossi >˜ ÿÿ @ˆ ˘ T ´ —8˘ ˚ ¨ ¯ â3 mario ˜ ˜ ôܯ _˜ ˜ ôܯ Aw O˜ Fˆ _˜ ¯ Dݯ M ¯ ¨ ¯ ¨ ¯ nuinH2ô1¨ ô1˜ ô1 1 ESEMPIO COMPLETO FILE BINARIO 1) Definire una struttura di tipo ²³´ µ ""#¶L¶ (¦4(,·Z6 %6 ¶ (/¸%+3/¹º+»+¼½º¾3+43,7 7 3¾3¦#&*¿6 7 3¶ (/6<43,7Z6 (À (%&",3,7Z6 Á • ÂtÃ<Ä,ÅÃ,ÆÇ → array di 30+1 caratteri • Å_Ã,ÆÇ → array di 30+1 caratteri • ÈÇtÈtÈ_à → array di 1+1 caratteri • É_ÅBÅ_ÃÊ,ËtÅ_ÉtÈÂ_Ë Ì É → un intero ÍÎÏÐÑÎÓÒUÔÏUÍÕÖר Ñ&ÙU×ÏÚÑÕÛÖUÕÜÔ/ÝtÞßàáTÖÕÜÔ5ÝtÞßUàáaÍÔUÍÍÕ)Ýâàã ä ÖÎå×ÖÖÕ¾ã æ ã ESEMPIO COMPLETO FILE BINARIO 4) leggere i record dal file, e porre i dati di ogni persona in una cella dell’array -/.0"12.3547678:9 ;;673<1>= 6>= 1?@?BA:3<6DC EF ºHG»IJKML<NOOPQ EF ºRK E S Q EF º F Q 0T UVXWGZY:[ F E S byte • legge dal file elementi, ognuno grande K ESEMPIO COMPLETO FILE BINARIO 2) definire un array di ³²çèÚ²³´ 3) aprire il file in lettura ÜU× ä Ö éêëØ ÍÎÏÐÑÎÓÒUÔÏÍÕÖ×åì ÝLíî,ïðàã ñ î&òóôöõå÷øõÕ&ÒUÔÖéBù_ÒUÔÕ&ÒúÔ)ûtü×ÎùáýùÏ&þðùêÿã ä õ éZõ÷÷ òòêëØ æ æ "!#$&% '( )* +'&%%',#! ûûû ESEMPIO COMPLETO FILE BINARIO -/.Di6kj<673l= 14:47173<1g6"m ² C no p qr s t uwvxsr r u t s/y pz{r t |r r | t s} | qp ~{ sr r | t ^s tT_. t s~{u t y G»IJKML Q¹ E IGL1¹º+»+¼½ºI»¹ F JZY:Q<T_./QGZY • (complessivamente, legge quindi n×dim byte) • gli elementi da leggere vengono scritti in memoria a partire dall’indirizzo NOOP \^]:_a`Db:cDd7egfBh ESEMPIO COMPLETO FILE BINARIO Bx{g< {xB{k{BBZ {xB{k{B&D {& x ¢¡ x{{£¤ x£ "&&¥{{B¦§ ¨©ª«&B¦§ ¨ ©ª¬x &B§ ©® x g£{{&® ¯® ¦£ xD°@±*¤ {& x ²¡ x{&£ ³D§ @©®¬x"B´®wµ B¶&·¸g® &H°{° x´&x¡ {D°@¹@¡ {x¡BZ £ ¹ ªk¹ B¹x±&±5´{´&º»¶{¶±>¤ ¡ x &°<¹B&2{B"{{2 {{{x¼¹&±®«x½ {Z° ¨ ±® ¯ ¾ {xD° & &{£&7° ¿5³D§ ©ª<&{Àx{° {& x ¬¡ x{{£±ª<¨ª@±B{ ± ¤ xÁ{Á® ¯ ¯ ESEMPIO COMPLETO FILE BINARIO Bx{g< {xB{k{BBZ {xB{k{B&D {& x ¢¡ x{{£¤ x£ "&&¥{{B¦§ ¨©ª«&B¦§ ¨ ©ª¬x &B§ ©® x g£{{&® ¯® ¦£ xD°@±*¤ {& x ²¡ x{&£ ³D§ @©®¬x"B´®wµ B¶&·¸g® &H°{° x´&x¡ {D°@¹@¡ {x¡BZ £ ¹ ªk¹ B¹x±&±5´{´&º»¶{¶±>¤ ¡ x &°<¹B&2{B"{{2 {{{x¼¹&±®«x½ {Z° ¨ ±® ¯ { &{£&7° ³ª<{{Àx{{° {& x¢¡ {x{{£±ª <Dª@±® ¯ 2