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