|
|
|
Îïèñàíèå ôóíêöèé ðàáîòû ñ ôàéëàìè
|
|
|
|
|
Ïðåæäå, ÷åì îïèñûâàòü ôàéëîâóþ áèáëèîòåêó HomeLisp-à, àâòîð
õîòåë áû ÷åòêî îïèñàòü ñàìî ïîíÿòèå ôàéë. Ýòî ïðåäñòàâëÿåòñÿ
âåñüìà óìåñòíûì, ïîñêîëüêó, çà÷àñòóþ â ëèòåðàòóðå ñëîâî ôàéë
èñïîëüçóåòñÿ â äâóõ ñìûñëàõ:
êàê ñîâîêóïíîñòü äàííûõ íà äèñêå, èìåþùàÿ èìÿ;
êàê îáúåêò ïðîãðàììû, ïîçâîëÿþùèé îáìåíèâàòüñÿ äàííûìè ñ âíåøíèì
íîñèòåëåì.
 ýòîì ñìûñëå î÷åíü ìåòîäè÷åñêè îïðàâäàííîé áûëà ïîïûòêà
ôèðìû IBM ââåñòè â ñâîå âðåìÿ òåðìèí íàáîð äàííûõ
(ÍÄ) èìåííî äëÿ îáîçíà÷åíèÿ äàííûõ íà âíåøíåì íîñèòåëå.
Ýòîò òåðìèí è áóäåò èñïîëüçîâàí â íàñòîÿùåì ðóêîâîäñòâå. À
ôàéëîì áóäåì íàçûâàòü ïðîãðàììíûé îáúåêò,
ñëóæàùèé äëÿ ìàíèïóëÿöèè äàííûìè.
Íàáîð äàííûõ íà âíåøåì íîñèòåëå ìîæåò áûòü îðãàíèçîâàíà
ðàçíûìè ñïîñîáàìè (èìåòü ðàçíóþ âíóòðåííþþ ñòðóêòóðó). Ïðè
ñîçäàíèè ïðîãðàììíîãî îáúåêòà (ôàéëà) , êîòîðûé áóäåò
ìàíèïóëèðîâàòü ýòèìè äàííûìè, îðãàíèçàöèÿ äàííûõ äîëæíà áûòü
ó÷òåíà. Äëÿ ýòîãî ñëóæèò ïîíÿòèå ìåòîä äîñòóïà.
Cðåäè ðàçíîîáðàçíûõ òèïîâ îðãàíèçàöèè ñóùåñòâóåò îäèí
òðàäèöèîííûé - òåêñòîâûå íàáîðû äàííûõ. Òåêñòîâûé íàáîð
äàííûõ ïðåäñòàâëÿåò ñîáîé ñîâîêóïíîñòü ñòðîê, ñîäåðæàùèõ
èíôîðìàöèþ, ïðåäñòàâëÿåìóþ êîäàìè ASCII, áîëüøèìè 31.
Ýòè ñòðîêè îòäåëÿþòñÿ äðóã îò äðóãà ïàðîé ñèìâîëîâ ñ êîäàìè
ASCII 13 è 10. (Òîëüêî â DOS/Windows; à â
UNIX/LINUX ðàçäåëèòåëåì ÿâëÿåòñÿ îäèí ñèìâîë ñ
êîäîì 10). Äëÿ ðàáîòû ñ òàêèìè íàáîðàìè äàííûõ ñëåäóåò
ñîçäàâàòü ôàéëû ñ ìåòîäàìè äîñòóïà _INPUT,
_OUTPUT èëè _APPEND. Ïåðå÷èñëåííûå ìåòîäû äîñòóïà
ïîçâîëÿþò ÷èòàòü/ïèñàòü èíôîðìàöèþ èç/â ÍÄ òîëüêî öåëûìè
ñòðîêàìè. Ýòè îïåðàöèè âûïîëíÿþòñÿ âûçîâîì ôóíêöèé
filGetLine è filPutLine ñîîòâåòñòâåííî. Òåêñòîâûå
ìåòîäû äîñòóïà ÿâëÿþòñÿ ïîñëåäîâàòåëüíûìè. Ýòî îçíà÷àåò,
÷òî ïðî÷èòàòü n-þ ñòðîêó ìîæíî, ëèøü ïðî÷èòàâ âñå
ïðåäûäóùèå (n-1) ñòðîê.
Äâîè÷íûå ìåòîäû äîñòóïà ê ÍÄ òðåáóþò ñîçäàíèÿ â ïðîãðàììå
ôàéëîâ ñ ðåæèìàìè BINARY_READ, BINARY_WRITE èëè
BINARY_READ_WRITE. Ïðè èñïîëüçîâàíèè ýòèõ ìåòîäîâ äîñòóïà, ÍÄ
ðàññìàòðèâàåòñÿ êàê öåïî÷êà áàéòîâ, ïðîíóìåðîâàííûõ îò ïåðâîãî äî
ïîñëåäíåãî. Äâîè÷íûå ìåòîäû äîñòóïà ÿâëÿþòñÿ ïðÿìûìè. Ýòî
îçíà÷àåò, ÷òî áàéòû ìîæíî ÷èòàòü/ïèñàòü â ëþáîì ïîðÿäêå. Äëÿ ýòèõ
ìåòîäîâ äîñòóïà ââîäèòñÿ ïîíÿòèå ôàéëîâîãî óêàçàòåëÿ - íîìåðà
áàéòà, êîòîðûé áóäåò ó÷àñòâîâàòü â ñëåäóþùåé îïåðàöèè ÷òåíèÿ/çàïèñè.
Ôàéëîâûé óêàçàòåëü ìîæíî ìåíÿòü, îñóùåñòâëÿÿ, òàêèì îáðàçîì,
ïîçèöèîíèðîâàíèå.
Èç ñêàçàííîãî âûøå ñëåäóåò, ÷òî òåêñòîâûé ÍÄ ìîæíî îáðàáîòàòü è êàê
äâîè÷íûé, åñëè îòêðûòü åãî ñ ñîîòâåòñòâóþùèì ðåæèìîì äîñòóïà. Íî ïðè
ýòîì ðàçáîð ÍÄ íà ñòðîêè äîëæåí îñóùåñòâèòü ïðîãðàììèñò.
Êðîìå òîãî, HomeLisp ïîääåðæèâàåò åùå îäèí ñâîåîáðàçíûé ìåòîä
äîñòóïà _TEXT_ARRAY (òåêñòîâûé ìàññèâ). Ýòîò ìåòîä äîñòóïà ìîæíî
ïðèìåíÿòü òîëüêî äëÿ òåêñòîâûõ ÍÄ. Â ðàìêàõ ýòîãî ìåòîäà äîñòóïà
ÍÄ ðàññìàòðèâàåòñÿ, êàê ìàññèâ ñòðîê. Ñòðîêè ìîæíî ÷èòàòü ïî íîìåðó â
ïðîèçâîëüíîì ïîðÿäêå. Çàïèñü â ôàéë ïðè ìåòîäå äîñòóïà
_TEXT_ARRAY íåâîçìîæíà.
Äëÿ ðàáîòû ñ ôàéëîì â ïðîãðàììå, åãî íóæíî ñíà÷àëà îòêðûòü.
Îòêðûòèå ôàéëà âûïîëíÿåò ôóíêöèÿ FILOPEN. Ïåðâûì ïàðàìåòðîì ýòîé
ôóíêöèè äîëæåí áûòü "÷èñòûé" àòîì (íå èìåþùèé èíäèêàòîðîâ â ñïèñêå
ñâîéñòâ). Áóäåì äàëåå íàçûâàòü ýòîò àòîì èäåíòèôèêàòîðîì ôàéëà.
Êðîìå òîãî, ôóíêöèè FILOPEN ïåðåäàåòñÿ èìÿ ôàéëà è
FIXED-çíà÷åíèå, çàäàþùåå ðåæèì îáðàáîòêè ôàéëà. Ïðè óñïåøíîì
îòêðûòèè â ñïèñîê ñâîéñòâ àòîìà-èäåíòèôèêàòîðà çàíîñèòñÿ ôëàã
FILE.
Äàëåå ñ ôàéëîì ìîæíî âûïîëíÿòü îáû÷íûå îïåðàöèè: ÷èòàòü è ïèñàòü
èíôîðìàöèþ. Äëÿ äâîè÷íûõ ôàéëîâ äîïîëíèòåëüíî ïîääåðæèâàþòñÿ îïåðàöèè
ïîçèöèîíèðîâàíèÿ ôàéëîâîãî óêàçàòåëÿ è ïîëó÷åíèÿ åãî òåêóùåãî çíà÷åíèÿ.
Êðîìå òîãî, èìååòñÿ ñïåöèàëüíàÿ ôóíêöèÿ, âîçâðàùàþùàÿ ëîãè÷åñêîå
çíà÷åíèå, ïîêàçûâàþùåå, íå äîñòèãíóò ëè êîíåö ïðè ÷òåíèè âõîäíîãî ôàéëà.
Ïîñëå çàâåðøåíèÿ ðàáîòû ôàéëû ñëåäóåò çàêðûâàòü. Äëÿ ýòîãî,
ðàçóìååòñÿ, åñòü ñïåöèàëüíàÿ ôóíêöèÿ. Êîëè÷åñòâî îäíîâðåìåííî îòêðûòûõ
ôàéëîâ ìîæíî ìåíÿòü, çàäàâàÿ ñîîòâåòñòâóþùèé êîíôèãóðàöèîííûé ïàðàìåòð
nFil â ôàéëå homelisp.ini (ïî óìîë÷àíèþ ìîæíî äåðæàòü
îòêðûòûìè äî ñîðîêà ôàéëîâ). Âíå çàâèñèìîñòè îò çíà÷åíèÿ
ïàðàìåòðà nFil, íåëüçÿ îòêðûòü áîëüøå ôàéëîâ, ÷åì ïîçâîëÿþò
òåêóùèå íàñòðîéêè îïåðàöèîííîé ñèñòåìû. Èìåíà âñåõ ôàéëîâûõ ôóíêöèé
íà÷èíàþòñÿ ïðåôèêñîì FIL
Íèæå îïèñàíû âñå ôàéëîâûå ôóíêöèè HomeLisp-à â àëôàâèòíîì
ïîðÿäêå:
|
|
Èìÿ ôóíêöèè
|
Ê-âî àðãóìåíòîâ
|
Òèï àðãóìåíòîâ
|
Âûïîëíÿåìîå äåéñòâèå
|
|
FILCLOSE
|
1
|
1-FILE
|
Çàêðûâàåò ôàéë, çàäàííûé çíà÷åíèåì àðãóìåíòà.
Ó àòîìà-çíà÷åíèÿ àðãóìåíòà óäàëÿþòñÿ âñå ôàéëîâûå ôëàãè.
|
|
FILEOF
|
1
|
1-FILE
|
Âîçâðàùàåò ïðèçíàê êîíöà ôàéëà (T) äëÿ ôàéëà, îòêðûòîãî äëÿ ÷òåíèÿ
|
|
FILEXISTP
|
1
|
1-STRING
|
Ïðîâåðÿåò íàëè÷èå ôàéëà ñ èìåíåì, çàäàííûì ïåðâûì ïàðàìåòðîì. Åñëè
ôàéë ñóùåñòâóåò (äàæå ñ àòðèáóòàìè HIDDEN, SYSTEM èëè
READ-ONLY â ëþáîé êîìáèíàöèè), ôóíêöèÿ âîçâðàùàåò T.
 ïðîòèâíîì ñëó÷àå âîçâðàùàåòñÿ Nil.
|
|
FILGETBLO
|
2
|
1-FILE;
2-BLOB
|
×èòàåò èç ôàéëà, îòêðûòîãî â ðåæèìå _BINARY_READ èëè _BINARY_READ_WRITE,
èíôîðìàöèþ â BLOB, çàäàííûé âòîðûì àðãóìåíòîì
|
|
FILGETLINE
|
1
|
1-FILE
|
×èòàåò èç ôàéëà îòêðûòîãî â ðåæèìå INPUT î÷åðåäíóþ ñòðîêó.
Ýòà ñòðîêà âîçâðàùàåòñÿ â êà÷åñòâå çíà÷åíèÿ.
|
|
FILGETSTRCOUNT
|
1
|
1-FILE
|
Âîçâðàùàåò êîëè÷åñòâî ñòðîê â ôàéëå, îòêðûòîãî â ðåæèìå TEXT_ARRAY.
|
|
FILLOC
|
1
|
1-FILE
|
Âîçâðàùàåò ôàéëîâûé óêàçàòåëü ôàéëà, çàäàííîãî çíà÷åíèåì àðãóìåíòà.
Ôàéë äîëæåí áûòü îòêðûò â ðåæèìàõ _BINARY_WRITE èëè _BINARY_READ_WRITE
|
|
FILLOF
|
1
|
1-FILE
|
Âîçâðàùàåò äëèíó ôàéëà
|
|
FILOPEN
|
3
|
1-Àòîì;
2-STRING;
3-FIXED
|
Ñîçäàåò è îòêðûâàåò ôàéë ñ èìåíåì, çàäàííûì çíà÷åíèåì ÂÒÎÐÎÃÎ àðãóìåíòà.
Ðåæèì îòêðûòèÿ è äîñòóï îïðåäåëÿåòñÿ ÒÐÅÒÜÈÌ àðãóìåíòîì.
Ññûëêà íà ôàéë ïðèñâàèâàåòñÿ àòîìó-ÏÅÐÂÎÌÓ àðãóìåíòó.
 åãî ñïèñîê ñâîéñòâ äîáàâëÿåòñÿ ñòàíäðàðòíûé èíäèêàòîð FILE.
|
|
FILPUTBLO
|
2
|
1-FILE;
2-BLOB
|
Çàïèñûâàåò â ôàéë, çàäàííûé çíà÷åíèåì ÏÅÐÂÎÃÎ àðãóìåíòà,
áîëüøîé äâîè÷íûé îáúåêò (BLOB), çàäàííûé çíà÷åíèåì ÂÒÎÐÎÃÎ
àðãóìåíòà. Ôàéë äîëæåí áûòü îòêðûò â ðåæèìàõ _BINARY_WRITE èëè _BINARY_READ_WRITE
|
|
FILPUTLINE
|
2
|
1-FILE;
2-STRING
|
Çàïèñûâàåò â ôàéë, çàäàííûé çíà÷åíèåì ÏÅÐÂÎÃÎ àðãóìåíòà,
ñòðîêó, çàäàííóþ çíà÷åíèåì ÂÒÎÐÎÃÎ àðãóìåíòà. Ôàéë äîëæåí
áûòü îòêðûò â ðåæèìàõ _OUTPUT èëè _APPEND
|
|
FILSEEK
|
2
|
1-FILE;
2-FIXED
|
Óñòàíàâëèâàåò ôàéëîâûé óêàçàòåëü ôàéëà, çàäàííîãî çíà÷åíèåì ÏÅÐÂÎÃÎ
àðãóìåíòà, ðàâíûì çíà÷åíèþ ÂÒÎÐÎÃÎ àðãóìåíòà. Ôàéë äîëæåí áûòü îòêðûò â
ðåæèìàõ _BINARY_WRITE èëè _BINARY_READ_WRITE
|
|
|
|
|
|
|
|
|
Ôóíêöèÿ FILCLOSE ïðèíèìàåò åäèíñòâåííûé àðãóìåíò òèïà
FILE è âûïîëíÿåò çàêðûòèå ôàéëà. Ïðè ýòîì ó
àòîìà-àðãóìåíòà óäàëÿåòñÿ ñïèñîê ñâîéñòâ è ðàçðûâàåòñÿ ñâÿçü
ôàéëà ñ íàáîðîì äàííûõ. Åñëè ïîëüçîâàòåëü çàâåðøèò
ïðîãðàììó, íå çàêðûâ îòêðûòûå ôàéëû, îíè áóäóò çàêðûòû
àâòîìàòè÷åñêè. Òåì íå ìåíåå, ðåêîìåíäóåòñÿ âñå ôàéëû
çàêðûâàòü ÿâíî. Ïðè óñïåøíîì çàêðûòèè ôàéëà, ôóíêöèÿ
âîçâðàùàåò T.
Âîò ïðèìåð ðàáîòû ñ ôóíêöèåé filClose:
(filClose 'fi)
filClose: àðãóìåíò ôóíêöèè - íå ôàéë
==> ERRSTATE
(filOpen 'fi "c:\config.sys" _INPUT)
==> fi
(proplist 'fi)
==> (FILE FName "c:\config.sys" FHandle 2 FMode 0)
(filClose 'fi)
==> T
(proplist 'fi)
==> NIL
|
Ïîïûòêà çàêðûòü åùå íå îòêðûòûé ôàéë âûçûâàåò îøèáêó. Èç
ïðèâåäåííîé âðåçêè âèäíî, ÷òî ïðè óñïåøíîì çàêðûòèè ôàéëà
ñïèñîê ñâîéñòâ åãî èäåíòèôèêàòîðà î÷èùàåòñÿ.
|
|
|
|
|
|
|
|
Ôóíêöèÿ FILEOF ïðèíèìàåò åäèíñòâåííûé àðãóìåíò òèïà
FILE è ïðîâåðÿåò, íå äîñòèãíóò ëè êîíåö íàáîðà äàííûõ
íà âíåøíåì íîñèòåëå.  ýòîì ñëó÷àå ôóíêöèÿ âîçâðàùàåò
T, â ïðîòèâíîì ñëó÷àå âîçâðàùàåòñÿ Nil.
Âîò êîìïëåêñíûé ïðèìåð ðàáîòû ñ ôóíêöèåé filEOF:
(prog nil (filOpen 'fi "c:\config.sys" _INPUT)
@Beg (cond ((filEOF 'fi) (go @Exit)))
(prints (filGetLine 'fi))
(go @Beg)
@Exit (filClose 'fi)
(return 'ok)
)
device=C:\WINDOWS\COMMAND\display.sys con=(ega,,1)Country=007,866,
C:\WINDOWS\COMMAND\country.sysShell=c:\command.com /P /E:4096
==> ok
|
 ïðèâåäåííîì ïðèìåðå âñå ïðîñòî: îòêðûâàåòñÿ òåêñòîâûé ôàéë
è ÷èòàåòñÿ ñòðîêà çà ñòðîêîé, ïîêà íå áóäåò äîñòèãíóò åãî
êîíåö.
Åñëè æå ôàéë îòêðûò â ðåæèìå äâîè÷íîãî äîñòóïà
_BINARY_READ, òî ôóíêöèÿ filEOF áóäåò
âîçâðàùàòü Nil äî òåõ ïîð, ïîêà î÷åðåäíîé âûçîâ
filGetBlo áóäåò â ñîñòîÿíèè ïðî÷èòàòü ïðî÷èòàòü
êîëè÷åñòâî áàéòîâ, ðàâíîå äëèíå BLOBà. Âîò ïðèìåð íà ýòó
òåìó:
(filOpen 'fi "c:\config.sys" _BINARY_READ)
==> fi
(filLOF 'fi)
==> 133
(bloCreate 'buf 100)
==> buf
(filGetBlo 'fi 'buf)
==> T
(filEOF 'fi)
==> NIL
(filGetBlo 'fi 'buf)
==> T
(filEOF 'fi)
==> T
(bloDump* 'buf)
00000001 | 53 68 65 6C 6C 3D 63 3A | 5C 63 6F 6D 6D 61 6E 64 | Shell=c:\command |
00000017 | 2E 63 6F 6D 20 2F 50 20 | 2F 45 3A 34 30 39 36 0D | .com /P /E:4096. |
00000033 | 0A 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 | ................ |
00000049 | 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 | ................ |
00000065 | 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 | ................ |
00000081 | 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 | ................ |
00000097 | 00 00 00 | | ... |
==> T
|
Ôàéë Config.sys îòêðûâàåòñÿ â ðåæìèå äâîè÷íîãî
÷òåíèÿ. Ïîñëå óñïåøíîãî îòêðûòèÿ îïðåäåëÿåòñÿ åãî äëèíà (133
áàéòà). Çàòåì ñîçäàåòñÿ 100-áàéòîâûé áóôåð è â íåãî ÷èòàåòñÿ
ïåðâûå 100 áàéòîâ ôàéëà, ïîñëå ÷åãî ñëåäóåò âûçîâ
filEOF. Âîçâðàùàåòñÿ çíà÷åíèå Nil, ïîñêîëüêó
êîíåö ôàéëà åùå íå äîñòèãíóò. Ñëåäóþùàÿ ïîïûòêà ïðî÷èòàòü
100 áàéòîâ óæå íå ìîæåò áûòü âûïîëíåíà. Ïîýòîìó, ïîñëå
âîçâðàòà èç ôóíêöèè filGetBlo, âûçîâ filEOF
âîçâðàùàåò T. Åñëè ïðîäàìïèðîâàòü áóôåð ïîñëå
çàâåðøåíèÿ îïåðàöèè ÷òåíèÿ, òî ìîæíî óáåäèòüñÿ, ÷òî ðåàëüíî
ïðî÷èòàíî 33 áàéòà. Îñòàëüíîå ïðîñòðàíñòâî áóôåðà çàíÿòî
äâîè÷íûìè íóëÿìè. Ïðè ðàáîòå ñ äâîè÷íûì ìåòîäîì äîñòóïà äëÿ
àíàëèçà äîñòèæåíèÿ êîíöà ôàéëà ïðåäïî÷òèòåëüíåå èñïîëüçîâàòü
ôóíêöèè filLOF è filLOÑ.
 çàêëþ÷åíèå, ñëåäóåò îòìåòèòü, ÷òî äëÿ âûõîäíûõ ôàéëîâ
(_OUTPUT, _APPEND) ôóíêöèÿ filEOF
âñåãäà âîçâðàùàåò T.
|
|
|
|
|
|
|
|
Ôóíêöèÿ FILEXISTP ïðèíèìàåò åäèíñòâåííûé àðãóìåíò
òèïà STRING è ïðîâåðÿåò íàëè÷èå ôàéëà ñ èìåíåì,
çàäàííûì çíà÷åíèåì àðãóìåíòà. Ïðè ýòîì àòðèáóòû ôàéëà ìîãóò
áûòü ëþáûå: HIDDEN, SYSTEM, READ-ONLY.
Åñëè ôàéë ñóùåñòâóåò, ôóíêöèÿ âîçâðàùàåò T, â
ïðîòèâíîì ñëó÷àå âîçâðàùàåòñÿ Nil.
Âîò ïðèìåð ðàáîòû ñ ôóíêöèåé filExistp:
(filExistp "c:\aaa.aaa")
==> NIL
(filExistp "c:\IO.SYS")
==> T
|
Ôàéëà aaa.aaa íåò íà äèñêå C:, à ôàéë
IO.SYS - åñòü. Ôóíêöèþ filExistp óäîáíî
èñïîëüçîâàòü äëÿ ïðîâåðêè ñóùåñòâîâàíèÿ ôàéëà ïåðåä åãî
îòêðûòèåì. Ýòî ïîçâîëÿåò ïðåäîòâðàòèòü âîçíèêíîâåíèå îøèáîê.
|
|
|
|
|
|
|
|
Ôóíêöèÿ FILGETBLO ïðèíèìàåò äâà àðãóìåíòà -
èäåíòèôèêàòîð ôàéëà è èäåíòèôèêàòîð BLOBa. Âûïîëíåíèå
ôóíêöèè çàêëþ÷àåòñÿ â ÷òåíèè èç ôàéëà, çàäàííîãî ïåðâûì
àðãóìåíòîì, áëîêà áàéòîâ è çàíåñåíèå åãî â BLOB, çàäàííûé
âòîðûì àðãóìåíòîì. Åñëè ÷òåíèå âûïîëíåíî óñïåøíî, ôóíêöèÿ
âîçâðàùàåò T, â ïðîòèâíîì ñëó÷àå ôóíêöèÿ âîçâðàùàåò
Nil.
Ôàéë, çàäàííûé ïåðâûì àðãóìåíòîì, äîëæåí áûòü îòêðûò â îäíîì
èç äâîè÷íûõ ðåæèìîâ: _BINARY_READ èëè
_BINARY_READ_WRITE. Åñëè ðåæèì îòêðûòèÿ îòëè÷àåòñÿ îò
ïðèâåäåííûõ - âîçíèêàåò îøèáêà.
Âîò ïðèìåð ðàáîòû ñ ôóíêöèåé FILGETBLO:
(bloCreate 'buf 250)
==> buf
(filOpen 'fi "homelispide.exe" _BINARY_READ)
==> fi
(filGetBlo 'fi 'buf)
==> T
(bloDump* 'buf)
00000001 | 4D 5A 90 00 03 00 00 00 | 04 00 00 00 FF FF 00 00 | MZ�.........ÿÿ.. |
00000017 | B8 00 00 00 00 00 00 00 | 40 00 00 00 00 00 00 00 | ¸.......@....... |
00000033 | 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 | ................ |
00000049 | 00 00 00 00 00 00 00 00 | 00 00 00 00 C8 00 00 00 | ............È... |
00000065 | 0E 1F BA 0E 00 B4 09 CD | 21 B8 01 4C CD 21 54 68 | .º..´.Í!¸.LÍ!Th |
00000081 | 69 73 20 70 72 6F 67 72 | 61 6D 20 63 61 6E 6E 6F | is program canno |
00000097 | 74 20 62 65 20 72 75 6E | 20 69 6E 20 44 4F 53 20 | t be run in DOS |
00000113 | 6D 6F 64 65 2E 0D 0D 0A | 24 00 00 00 00 00 00 00 | mode....$....... |
00000129 | 4B 9C C7 DA 0F FD A9 89 | 0F FD A9 89 0F FD A9 89 | KœÇÚ.ý©‰.ý©‰.ý©‰ |
00000145 | 8C E1 A7 89 0E FD A9 89 | 40 DF A0 89 2A FD A9 89 | Œá§‰.ý©‰@ß ‰*ý©‰ |
00000161 | 0B DE A4 89 0E FD A9 89 | 52 69 63 68 0F FD A9 89 | .Þ¤‰.ý©‰Rich.ý©‰ |
00000177 | 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 | ................ |
00000193 | 00 00 00 00 00 00 00 00 | 50 45 00 00 4C 01 03 00 | ........PE..L... |
00000209 | 73 DD 3C 49 00 00 00 00 | 00 00 00 00 E0 00 0F 01 | sÝ T
|
 ïðèìåðå ñîçäàåòñÿ BLOB ðàçìåðîì 250 áàéòîâ,
îòêðûâàåòñÿ äëÿ äâîè÷íîãî ÷òåíèÿ ôàéë "homelispide.exe"
èç òåêóùåé äèðåêòîðèè, à çàòåì èç ôàéëà ÷èòàåòñÿ â
BLOB ïåðâûå 250 áàéòîâ. Ïîñëå ýòîãî
BLOB äàìïèðóåòñÿ. Çàãîëîâîê EXE-ôàéëà îò÷åòëèâî
âèäåí.
|
|
|
|
|
|
|
|
Ôóíêöèÿ FILGETLINE ïðèíèìàåò ïåðâûé àðãóìåíò -
èäåíòèôèêàòîð ôàéëà, îòêðûòîãî â ðåæèìå _INPUT èëè
_TEXT_ARRAY Ôóíêöèÿ ÷èòàåò èç ôàéëà î÷åðåäíóþ ñòðîêó
è âîçâðàùàåò åå â êà÷åñòâå çíà÷åíèÿ. Åñëè âîçíèêàåò
ñîñòîÿíèå "êîíåö ôàéëà" - ôóíêöèÿ âîçâðàùàåò Nil.
Åñëè ôàéë îòêðûò â ðåæèìå _TEXT_ARRAY, òî ìîæíî
çàäàòü âòîðîé íåîáÿçàòåëüíûé àðãóìåíò - íîìåð ñòðîêè. Åñëè
ýòîò íîìåð âûâîäèò çà ïðåäåëû íàáîðà äàííûõ - ôóíêöèÿ âåðíåò
Nil.  ñëó÷àå, êîãäà âòîðîé àðãóìåíò íå çàäàí èëè
ðàâåí íóëþ, ôóíêöèÿ âåðíåò î÷åðåäíóþ ñòðîêó íàáîðà äàííûõ.
Òàêèì îáðàçîì, îáðàùåíèå ê ôóíêöèè FILGETLINE ñ
ôàéëîì, îòêðûòûì â ðåæèìå _TEXT_ARRAY, ñî âòîðûì
àðãóìåíòîì, ðàâíûì íóëþ èëè áåç âòîðîãî àðãóìåíòà, ïîçâîëÿåò
÷èòàòü ñòðîêè èç òåêñòîâîãî ìàññèâà îäíó çà äðóãîé, íå
çàäàâàÿ íîìåðà.
Âîò ïðèìåð ðàáîòû ñ ôóíêöèåé FILGETLINE äëÿ
ïîñëåäîâàòåëüíîãî äîñòóïà:
(filOpen 'fi "c:\config.sys" _INPUT)
==> fi
(filGetLine 'fi)
==> "device=C:\WINDOWS\COMMAND\display.sys con=(ega,,1)"
(filGetLine 'fi)
==> "Country=007,866,C:\WINDOWS\COMMAND\country.sys"
(filGetLine 'fi)
==> "Shell=c:\command.com /P /E:4096"
(filGetLine 'fi)
==> "Files=120"
(filGetLine 'fi)
==> "Buffers=120"
(filGetLine 'fi)
==> NIL
(filGetLine 'fi)
==> NIL
(filEOF 'fi)
==> T
|
 ïðèìåðå îòêðûâàåòñÿ ôàéë, ñâÿçàííûé ñ íàáîðîì äàííûõ
"c:\config.sys" â ðåæèìå _INPUT. Çàòåì ÷èòàåòñÿ
ñòðîêà çà ñòðîêîé. Êîãäà íàáîð äàííûõ îêàçûâàåòñÿ
èñ÷åðïàííûì, ôóíêöèÿ íà÷èíàåò âîçâðàùàòü Nil.
Êîíòðëüíûé âûçîâ ôóíêöèè filEOF ïîêàçûâàåò, ÷òî íàáîð
äàííûõ äåéñòâèòåëüíî èñ÷åðïàí.
À âîò ïðèìåð ðàáîòû ñ òåì æå ôàéëîì, íî îòêðûòûì â ðåæèìå
_TEXT_ARRAY:
(filOpen 'fi "c:\config.sys" _TEXT_ARRAY)
==> fi
(filGetLine 'fi 3)
==> "Shell=c:\command.com /P /E:4096"
(filGetLine 'fi)
==> "Files=120"
(filGetLine 'fi)
==> "Buffers=12"
(filGetLine 'fi)
==> NIL
(filGetLine 'fi 1)
==> "device=C:\WINDOWS\COMMAND\display.sys con=(ega,,1)"
|
Çäåñü òîò æå ôàéë îòêðûâàåòñÿ äëÿ ïðîèçâîëüíîãî ÷òåíèÿ.
×èòàåòñÿ ñðàçó òðåòüÿ ñòðîêà. Ïîòîì òðè ñëåäóþùèå (áåç
ÿâíîãî çàäàíèÿ íîìåðà). Òðåòüÿ îïåðàöèÿ âîçâðàùàåò
Nil, ÷òî îçíà÷àåò êîíåö ôàéëà. Ïîñëå ÷åãî ÷èòàåòñÿ
ïåðâàÿ ñòðîê.
|
|
|
|
|
|
|
|
Ôóíêöèÿ FILGETSTRCOUNT ïðèíèìàåò åäèíñòâåííûé
àðãóìåíò - èäåíòèôèêàòîð ôàéëà, îòêðûòîãî â ðåæèìå
_TEXT_ARRAY. Ôóíêöèÿ âîçâðàùàåò êîëè÷åñòâî ñòðîê â
ôàéëå (âêëþ÷àÿ ïóñòûå ñòðîêè).
Âîò ïðèìåð ðàáîòû FILGETSTRCOUNT:
(filOpen 'fi "c:\config.sys" _TEXT_ARRAY)
==> fi
(filGetStrCount 'fi 3)
==> 5
|
|
|
|
|
|
|
|
|
Ôóíêöèÿ FILLOC ïðèíèìàåò åäèíñòâåííûé àðãóìåíò -
èäåíòèôèêàòîð ôàéëà, îòêðûòîãî â ðåæèìå _BINARY_READ
èëè _BINARY_READ_WRITE. Ôóíêöèÿ âîçâðàùàåò òåêóùóþ
ïîçèöèþ ôàéëîâîãî óêàçàòåëÿ (íîìåð áàéòà, c êîòîðîãî
íà÷íåòñÿ ñëåäóþùàÿ ôàéëîâàÿ îïåðàöèÿ).
Âîò ïðèìåð ðàáîòû FILLOC:
(filOpen 'fi "c:\config.sys" _BINARY_READ)
==> fi
(filLoc 'fi)
==> 1
(bloCreate 'buf 6)
==> buf
(filGetBlo 'fi 'buf)
==> T
(filLoc 'fi)
==> 7
|
Âèäíî, ÷òî ñðàçó ïîñëå îòêðûòèÿ ôàéëîâûé óêàçàòåëü
óñòàíîâëåí íà ïåðâûé áàéò. Ïîñëå ÷òåíèÿ øåñòè áàéòîâ â
áóôåð, çíà÷åíèå ôàéëîâîãî óêàçàòåëÿ ñòàíîâèòñÿ ðàâíûì ñåìè.
|
|
|
|
|
|
|
|
Ôóíêöèÿ FILLOF ïðèíèìàåò åäèíñòâåííûé àðãóìåíò -
èäåíòèôèêàòîð ôàéëà. Ôóíêöèÿ âîçâðàùàåò äëèíó ôàéëà â
áàéòàõ.
Âîò ïðèìåð ðàáîòû FILLOF:
(filOpen 'fi "c:\config.sys" _INPUT)
==> fi
(filLof 'fi)
==> 155
|
Ôàéë ìîæåò áûòü îòêðûò êàê â äâîè÷íîì, òàê è â òåêñòîâîì
ðåæèìå.
Åñëè ôàéë îòêðûò êàê âûõîäíîé, òî âûçîâ ôóíêöèè
filLof áóäåò êàæäûé ðàç âîçâðàùàòü òåêóùóþ
äëèíó ôàéëà.
(filOpen 'fo "o.o" _OUTPUT)
==> fo
(filLof 'fo)
==> 0
(filPutLine 'fo "QWERTY")
==> T
(filPutLine 'fo "QWERTY")
==> T
(filLof 'fo)
==> 16
|
Çäåñü â òîëüêî ÷òî ñîçäàííûé ôàéë âûâîäÿòñÿ äâå ñòðîêè ïî 6
áàéòîâ. Êàæäàÿ èç ñòðîê àâòîìàòè÷åñêè çàâåðøàåòñÿ äâóìÿ
áàéòàìè ñ êîäàìè &H0D, &H0A, ÷òî äàåò îáùóþ äëèíó 16 áàéòîâ.
|
|
|
|
|
|
|
|
Ôóíêöèÿ FILOPEN ïðèíèìàåò òðè àðãóìåíòà:
èäåíòèôèêàòîð ôàéëà, åãî èìÿ è çíà÷åíèå òèïà FIXED -
ðåæèì îòêðûòèÿ ôàéëà. Èäåíòèôèêàòîð ôàéëà äîëæåí áûòü
"÷èñòûì" àòîìîì (ò.å. åãî ñïèñîê ñâîéñòâ äîëæåí áûòü ïóñò).
Èìÿ ôàéëà - ýòî àòîì ñî çíà÷åíèåì òèïà STRING.
Âûïîëíÿþòñÿ ñëåäóþùèå ñîãëàøåíèÿ: åñëè èìÿ íå ñîäåðæèò áóêâû
äèñêà è ñëýøåé, òî ïðåäïîëàãàåòñÿ, ÷òî ôàéë ðàçìåùàåòñÿ â
òåêóùåé äèðåêòîðèè. Ìîæíî èñïîëüçîâàòü è ñòàíäàðòíîå
îáîçíà÷åíèå òåêóùåé äèðåêòîðèè .\, à òàêæå ïåðåõîäà
íà óðîâåíü ââåðõ ..\.
Ðåæèì îòêðûòèÿ ôàéëà ìîæåò èìåòü çíà÷åíèÿ, ïðèâåäåííûå â
íèæåñëåäóþùåé òàáëè÷êå:
|
Çíà÷åíèå
|
Âñòðîåííàÿ êîíñòàíòà
|
Ðåæèì îòêðûòèÿ (ìåòîä äîñòóïà)
|
|
0
|
_INPUT
|
Ôàéë îòêðûâàåòñÿ, êàê òåêñòîâûé äëÿ ÷òåíèÿ. Åñëè ÍÄ ñ çàäàííûì
èìåíåì íå ñóùåñòâóåò, âîçíèêàåò îøèáêà ñ êîäîì 53.
|
|
1
|
_OUTPUT
|
Ôàéë îòêðûâàåòñÿ, êàê òåêñòîâûé äëÿ çàïèñè. Åñëè ÍÄ ñ çàäàííûì
èìåíåì íå ñóùåñòâóåò, òî îí ñîçäàåòñÿ. Åñëè ÍÄ óæå ñóùåñòâîâàë ïåðåä
îòêðûòèåì, òî åãî ñîäåðæèìîå óíè÷òîæàåòñÿ.
|
|
2
|
_APPEND
|
Ôàéë îòêðûâàåòñÿ, êàê òåêñòîâûé äëÿ çàïèñè. Åñëè ÍÄ ñ çàäàííûì
èìåíåì íå ñóùåñòâóåò, òî îí ñîçäàåòñÿ. Åñëè ÍÄ óæå ñóùåñòâîâàë ïåðåä
îòêðûòèåì, òî åãî ñîäåðæèìîå ñîõðàíÿåòñÿ. Ïîñëåäóþùèå îïåðàöèè çàïèñè
áóäóò äîáàâëÿòü ñòðîêè â êîíåö ÍÄ.
|
|
3
|
_BINARY_READ
|
Ôàéë îòêðûâàåòñÿ, êàê äâîè÷íûé äëÿ ÷òåíèÿ. Åñëè ÍÄ ñ çàäàííûì
èìåíåì íå ñóùåñòâóåò, âîçíèêàåò îøèáêà îòêðûòèÿ.
|
|
4
|
_BINARY_WRITE
|
Ôàéë îòêðûâàåòñÿ, êàê äâîè÷íûé äëÿ çàïèñè. Åñëè ÍÄ ñ çàäàííûì
èìåíåì íå ñóùåñòâóåò, îí ñîçäàåòñÿ ñ íóëåâîé äëèíîé.
|
|
5
|
_BINARY_READ_WRITE
|
Ôàéë îòêðûâàåòñÿ, êàê äâîè÷íûé äëÿ ÷òåíèÿ è çàïèñè. Åñëè ÍÄ ñ çàäàííûì
èìåíåì íå ñóùåñòâóåò, îí ñîçäàåòñÿ ñ íóëåâîé äëèíîé.
|
|
6
|
_TEXT_ARRAY
|
Ýòîò ìåòîä äîñòóïà ïîçâîëÿåò ÷èòàòü
ñòðîêè òåêñòîâîãî ÍÄ â ïðîèçâîëüíîì ïîðÿäêå. Åñëè ÍÄ ñ çàäàííûì
èìåíåì íå ñóùåñòâóåò, âîçíèêàåò îøèáêà.
|
Âîò êëàññè÷åñêèé ïðèìåð ðàáîòû ñ òåêñòîâûì ÍÄ ñ èìåíåì
autoexec.bat:
(filOpen 'fi "c:\autoexec.bat" _INPUT)
==> fi
(filGetLine 'fi)
==> "set TEMP=C:\TEMP"
(filGetLine 'fi)
==> "set TMP=C:\TEMP"
(proplist 'fi)
==> (FILE FName "c:\autoexec.bat" FHandle 2 FMode 0)
(filClose 'fi)
==> T
(proplist 'fi)
==> NIL
|
Çäåñü ôàéë fi ñâÿçûâàåòñÿ ñ íàáîðîì äàííûõ
autoexec.bat. Çàòåì èç íàáîðà ÷èòàåòñÿ äâå ïåðâûõ
ñòðîêè. Çàòåì çàïðàøèâàåòñÿ ñïèñîê ñâîéñòâ àòîìà fi.
Îò÷åòëèâî âèäåí ñòàíäàðòíûé èíäèêàòîð FILE,
âíóòðåííèé íîìåð õýíäëà è ìåòîä äîñòóïà (FMODE).
Äàëåå ôàéë çàêðûâàåòñÿ. Ïîñëå çàêðûòèÿ ñïèñîê ñâîéñòâ àòîìà
fi î÷èùàåòñÿ.
À âîò ïðèìåð ðàáîòû ñ òåì æå ñàìûì íàáîðîì, íî äâîè÷íûì ìåòîäîì äîñòóïà:
(filOpen 'fi "c:\autoexec.bat" _BINARY_READ)
==> fi
(proplist 'fi)
==> (FILE FName "c:\autoexec.bat" FHandle 2 FMode 3)
(filLOF 'fi)
==> 874
(bloCreate 'buf 874)
==> buf
(filGetBlob 'fi 'buf)
==> T
(bloDump* 'buf)
00000001 | 0D 0A 73 65 74 20 54 45 | 4D 50 3D 43 3A 5C 54 45 | ..set TEMP=C:\TE |
00000017 | 4D 50 0D 0A 0D 0A 73 65 | 74 20 54 4D 50 3D 43 3A | MP....set TMP=C: |
00000033 | 5C 54 45 4D 50 0D 0A 0D | 0A 53 45 54 20 50 41 54 | \TEMP....SET PAT |
00000049 | 48 3D 43 3A 5C 57 49 4E | 44 4F 57 53 3B 43 3A 5C | H=C:\WINDOWS;C:\ |
00000065 | 57 49 4E 44 4F 57 53 5C | 43 4F 4D 4D 41 4E 44 3B | WINDOWS\COMMAND; |
00000081 | 22 44 3A 5C 50 79 74 68 | 6F 6E 32 34 5C 2E 22 3B | "D:\Python24\."; |
00000097 | 45 3A 5C 41 52 43 48 3B | 45 3A 5C 44 4E 3B 44 3A | E:\ARCH;E:\DN;D: |
00000113 | 5C 53 45 52 56 3B 44 3A | 5C 53 59 53 3B 45 3A 5C | \SERV;D:\SYS;E:\ |
00000129 | 54 42 3B 45 3A 5C 42 50 | 5C 42 49 4E 3B 43 3A 5C | TB;E:\BP\BIN;C:\ |
00000145 | 50 52 4F 47 52 41 7E 31 | 5C 42 4F 52 4C 41 4E 44 | PROGRA~1\BORLAND |
00000161 | 5C 44 45 4C 50 48 49 34 | 5C 42 49 4E 3B 43 3A 5C | \DELPHI4\BIN;C:\ |
00000177 | 50 52 4F 47 52 41 7E 31 | 5C 42 4F 52 4C 41 4E 44 | PROGRA~1\BORLAND |
00000193 | 5C 56 42 52 4F 4B 45 52 | 5C 42 49 4E 3B 43 3A 5C | \VBROKER\BIN;C:\ |
00000209 | 50 52 4F 47 52 41 7E 31 | 5C 42 4F 52 4C 41 4E 44 | PROGRA~1\BORLAND |
00000225 | 5C 56 42 52 4F 4B 45 52 | 5C 4A 52 45 5C 42 49 4E | \VBROKER\JRE\BIN |
00000241 | 3B 43 3A 5C 50 42 57 49 | 4E 37 30 5C 42 49 4E 3B | ;C:\PBWIN70\BIN; |
00000257 | 22 43 3A 5C 50 72 6F 67 | 72 61 6D 20 46 69 6C 65 | "C:\Program File |
00000273 | 73 5C 53 74 65 65 6C 20 | 42 61 6E 6B 20 43 6F 6D | s\Steel Bank Com |
00000289 | 6D 6F 6E 20 4C 69 73 70 | 5C 31 2E 30 5C 22 0D 0A | mon Lisp\1.0\".. |
00000305 | 0D 0A 72 65 6D 20 53 45 | 54 20 50 41 54 48 3D 25 | ..rem SET PATH=% |
00000321 | 50 41 54 48 25 3B 22 43 | 3A 5C 50 52 4F 47 52 41 | PATH%;"C:\PROGRA |
00000337 | 4D 46 49 4C 45 53 5C 4D | 54 53 22 3B 43 3A 5C 50 | MFILES\MTS";C:\P |
00000353 | 52 4F 47 52 41 7E 31 5C | 42 4F 52 4C 41 4E 44 5C | ROGRA~1\BORLAND\ |
00000369 | 43 42 55 49 4C 44 7E 31 | 5C 42 49 4E 3B 0D 0A 0D | CBUILD~1\BIN;... |
00000385 | 0A 53 45 54 20 43 4C 41 | 53 53 50 41 54 48 3D 43 | .SET CLASSPATH=C |
00000401 | 3A 5C 50 52 4F 47 52 41 | 7E 31 5C 42 4F 52 4C 41 | :\PROGRA~1\BORLA |
00000417 | 4E 44 5C 56 42 52 4F 4B | 45 52 5C 6C 69 62 5C 76 | ND\VBROKER\lib\v |
00000433 | 62 63 70 70 2E 6A 61 72 | 0D 0A 0D 0A 72 65 6D 20 | bcpp.jar....rem |
00000449 | 2D 20 42 79 20 57 69 6E | 64 6F 77 73 20 53 65 74 | - By Windows Set |
00000465 | 75 70 20 2D 20 65 72 61 | 73 65 20 63 3A 5C 77 69 | up - erase c:\wi |
00000481 | 6E 64 6F 77 73 5C 2A 2E | 74 6D 70 20 3E 20 6E 75 | ndows\*.tmp > nu |
00000497 | 6C 0D 0A 0D 0A 72 65 6D | 20 2D 20 4C 69 6E 65 73 | l....rem - Lines |
00000513 | 20 61 64 64 65 64 20 62 | 79 20 56 69 73 75 61 6C | added by Visual |
00000529 | 20 46 6F 72 74 72 61 6E | 20 36 2E 30 2E 30 20 53 | Fortran 6.0.0 S |
00000545 | 65 74 75 70 20 6F 6E 20 | 35 2D 31 30 2D 32 30 30 | etup on 5-10-200 |
00000561 | 35 0D 0A 43 41 4C 4C 20 | 43 3A 5C 50 52 4F 47 52 | 5..CALL C:\PROGR |
00000577 | 41 7E 31 5C 4D 49 43 52 | 4F 53 7E 31 5C 44 46 39 | A~1\MICROS~1\DF9 |
00000593 | 38 5C 42 49 4E 5C 44 46 | 56 41 52 53 2E 42 41 54 | 8\BIN\DFVARS.BAT |
00000609 | 20 41 55 54 4F 45 58 45 | 43 0D 0A 72 65 6D 20 2D | AUTOEXEC..rem - |
00000625 | 20 45 6E 64 20 6F 66 20 | 6C 69 6E 65 73 20 61 64 | End of lines ad |
00000641 | 64 65 64 20 62 79 20 56 | 69 73 75 61 6C 20 46 6F | ded by Visual Fo |
00000657 | 72 74 72 61 6E 20 36 2E | 30 2E 30 20 53 65 74 75 | rtran 6.0.0 Setu |
00000673 | 70 0D 0A 20 0D 0A 72 65 | 6D 20 50 41 54 48 3D 25 | p.. ..rem PATH=% |
00000689 | 50 41 54 48 25 3B 22 43 | 3A 5C 50 72 6F 67 72 61 | PATH%;"C:\Progra |
00000705 | 6D 46 69 6C 65 73 5C 4D | 74 73 22 0D 0A 0D 0A 6D | mFiles\Mts"....m |
00000721 | 6F 64 65 20 63 6F 6E 20 | 63 6F 64 65 70 61 67 65 | ode con codepage |
00000737 | 20 70 72 65 70 61 72 65 | 3D 28 28 38 36 36 29 20 | prepare=((866) |
00000753 | 43 3A 5C 57 49 4E 44 4F | 57 53 5C 43 4F 4D 4D 41 | C:\WINDOWS\COMMA |
00000769 | 4E 44 5C 65 67 61 33 2E | 63 70 69 29 0D 0A 0D 0A | ND\ega3.cpi).... |
00000785 | 6D 6F 64 65 20 63 6F 6E | 20 63 6F 64 65 70 61 67 | mode con codepag |
00000801 | 65 20 73 65 6C 65 63 74 | 3D 38 36 36 0D 0A 53 45 | e select=866..SE |
00000817 | 54 20 53 42 43 4C 5F 48 | 4F 4D 45 3D 43 3A 5C 50 | T SBCL_HOME=C:\P |
00000833 | 72 6F 67 72 61 6D 20 46 | 69 6C 65 73 5C 53 74 65 | rogram Files\Ste |
00000849 | 65 6C 20 42 61 6E 6B 20 | 43 6F 6D 6D 6F 6E 20 4C | el Bank Common L |
00000865 | 69 73 70 5C 31 2E 30 5C | 0D 0A | isp\1.0\.. |
==> T
(filClose 'fi)
==> T
(bloDestroy 'buf)
==> T
|
Èñïîëüçóåòñÿ äâîè÷íûé ìåòîä äîñòóïà.  ñïèñêå ñâîéñòâ àòîìà
fi ìåòîä äîñòóïà ñîîòâåòñòâóåò âñòðîåííîé êîíñòàíòå
_BINARY_READ. Ïîñëå óñïåøíîãî îòêðûòèÿ âûçîâ ôóíêöèè
filLOF ïîçâîëÿåò îïðåäåëèòü ðåàëüíóþ äëèíó ÍÄ. Çàòåì
ñîçäàåòñÿ áóôåð íóæíîé äëèíû, è âñå ñîäåðæèìîå ÍÄ ÷èòàåòñÿ â
áóôåð. Äàëåå áóôåð äàìïèðóåòñÿ. È, íàêîíåö, çàêðûâàòñÿ ôàéë
è óíè÷òîæàåòñÿ áóôåð.
|
|
|
|
|
|
|
|
Ôóíêöèÿ FILPUTBLO ïðèíèìàåò äâà àðãóìåíòà -
èäåíòèôèêàòîð ôàéëà (îòêðûòîãî â ðåæèìå _BINARY_WRITE
èëè _BINARY_READ_WRITE è èäåíòèôèêàòîð BLOBà.
Ñîäåðæèìîå BLOBà çàíîñèòñÿ â ôàéë ñ òåêóùåé ïîçèöèè.
Ðàññìîòðèì ïðèìåð âûçîâà FILPUTBLO:
(filOpen 'fo "o.o" _BINARY_WRITE)
==> fo
(bloCreate 'buf 256)
==> buf
(for i 0 255 (
(fix2blo 'buf // BLOB
i // Çàíîñèìîå ÷èñëî
(+ i 1) // Íà÷àëüíàÿ ïîçèöèÿ
1 // Äëèíà
)
)
)
==> 255
(filPutBlo 'fo 'buf)
==> T
(bloDestroy 'buf)
==> T
(filClose 'fo)
==> T
(filOpen 'fi "o.o" _BINARY_READ)
==> fi
(bloCreate 'buf 256)
==> buf
(filGetBlo 'fi 'buf)
==> T
(bloDump* 'buf)
00000001 | 00 01 02 03 04 05 06 07 | 08 09 0A 0B 0C 0D 0E 0F | ................ |
00000017 | 10 11 12 13 14 15 16 17 | 18 19 1A 1B 1C 1D 1E 1F | ............... |
00000033 | 20 21 22 23 24 25 26 27 | 28 29 2A 2B 2C 2D 2E 2F | !"#$%&'()*+,-./ |
00000049 | 30 31 32 33 34 35 36 37 | 38 39 3A 3B 3C 3D 3E 3F | 0123456789:;<=>? |
00000065 | 40 41 42 43 44 45 46 47 | 48 49 4A 4B 4C 4D 4E 4F | @ABCDEFGHIJKLMNO |
00000081 | 50 51 52 53 54 55 56 57 | 58 59 5A 5B 5C 5D 5E 5F | PQRSTUVWXYZ[\]^_ |
00000097 | 60 61 62 63 64 65 66 67 | 68 69 6A 6B 6C 6D 6E 6F | `abcdefghijklmno |
00000113 | 70 71 72 73 74 75 76 77 | 78 79 7A 7B 7C 7D 7E 7F | pqrstuvwxyz{|}~ |
00000129 | 80 81 82 83 84 85 86 87 | 88 89 8A 8B 8C 8D 8E 8F | €�‚ƒ„…†‡ˆ‰Š‹Œ�Ž� |
00000145 | 90 91 92 93 94 95 96 97 | 98 99 9A 9B 9C 9D 9E 9F | �‘’“”•–—˜™š›œ�žŸ |
00000161 | A0 A1 A2 A3 A4 A5 A6 A7 | A8 A9 AA AB AC AD AE AF | ¡¢£¤¥¦§¨©ª«¬®¯ |
00000177 | B0 B1 B2 B3 B4 B5 B6 B7 | B8 B9 BA BB BC BD BE BF | °±²³´µ¶·¸¹º»¼½¾¿ |
00000193 | C0 C1 C2 C3 C4 C5 C6 C7 | C8 C9 CA CB CC CD CE CF | ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ |
00000209 | D0 D1 D2 D3 D4 D5 D6 D7 | D8 D9 DA DB DC DD DE DF | ÐÑÒÓÔÕÖרÙÚÛÜÝÞß |
00000225 | E0 E1 E2 E3 E4 E5 E6 E7 | E8 E9 EA EB EC ED EE EF | àáâãäåæçèéêëìíîï |
00000241 | F0 F1 F2 F3 F4 F5 F6 F7 | F8 F9 FA FB FC FD FE FF | ðñòóôõö÷øùúûüýþÿ |
==> T
|
 ïðèâåäåííîì ïðèìåðå ñíà÷àëà îòêðûâàåòñÿ ôàéë â ðåæèìå
äâîè÷íîãî âûâîäà. Çàòåì ñîçäàåòñÿ áóôåð ðàçìåðîì 256 áàéòîâ
è â íåãî çàíîñÿòñÿ áàéòû ñ êîäàìè îò 00 äî 255. Äàëåå ýòîò
áóôåð âûâîäèòñÿ â ôàéë. Ïîñëå ÷åãî áóôåð óíè÷òîæàåòñÿ, à
ôàéë çàêðûâàåòñÿ. ×òîáû óáåäèòüñÿ, ÷òî áóôåð äåéñòâèòåëüíî
âûâåäåí â ôàéë, áóôåð ïåðåñîçäàåòñÿ, ôàéë ñíîâà îòêðûâàåòñÿ
â ðåæèìå äâîè÷íîãî ÷òåíèÿ. Çàòåì áóôåð ñ÷èòûâàåòñÿ èç ôàéëà
è äàìïèðóåòñÿ.
|
|
|
|
|
|
|
|
Ôóíêöèÿ FILPUTLINE ïðèíèìàåò ïåðâûé àðãóìåíò -
èäåíòèôèêàòîð ôàéëà, îòêðûòîãî â ðåæèìå _OUTPUT èëè
_APPEND, è âòîðîé àðãóìåíò - ñòðîêó. Ôóíêöèÿ ïèøåò
ñòðîêó, çàäàííóþ âòîðûì àðãóìåíòîì â ôàéë.
Âîò ïðèìåð ðàáîòû ñ ôóíêöèåé FILPUTLINE:
(filOpen 'fo "o.o" _OUTPUT)
==> fo
(for i 1 10 ((filPutLine 'fo (strCat "i=" (fix2str i)))))
==> 10
(filClose 'fo)
==> T
(filOpen 'fi "o.o" _TEXT_ARRAY)
==> fi
(for i 1 10 ((printsline (filGetLine 'fi))))
i=1
i=2
i=3
i=4
i=5
i=6
i=7
i=8
i=9
i=10
==> 10
(filClose 'fi)
==> T
(gc)
Óòèëèçèðîâàíî ÿ÷ååê: 0; àòîìîâ: 40.
|
 ïðèìåðå ñîçäàåòñÿ íàáîð äàííûõ "o.o" â òåêóùåé
äèðåêòîðèè. Çàòåì â ýòîò íàáîð äàííûõ âûâîäèòñÿ
ïîñëåäîâàòåëüíîñòü ñòðîê âèä "i=...". Ïîñëå ÷åãî ôàéë
çàêðûâàåòñÿ. Äàëåå, ÷òîáû ïðîâåðèòü ñîäåðæèìîå íàáîðà äàííûõ
ñîçäàåòñÿ âõîäíîé ôàéë ñ ïðÿìûì äîñòóïîì (â ðåæèìå
_TEXT_ARRAY) è â öèêëå ðàñïå÷àòûâàåòñÿ ñîäåðæèìîå
íàáîðà äàííûõ "o.o".
Íàïîìèíàþ, ÷òî ïðè îòêðûòèè âûõîäíîãî ôàéëà â ðåæèìå
_APPEND, ñòàðîå ñîäåðæèìîå íàáîðà äàííûõ (åñëè äî
îòêðûòèÿ ôàéëà îí áûë íåïóñò) ñîõðàíÿåòñÿ.
|
|
|
|
|
|
|
|
Ôóíêöèÿ FILSEEK ïðèíèìàåò ïåðâûé àðãóìåíò -
èäåíòèôèêàòîð ôàéëà, îòêðûòîãî â ðåæèìå _BINARY_READ
èëè _BINARY_READ_WRITE, è âòîðîé àðãóìåíò - òèïà
FIXED. Ôóíêöèÿ óñòàíàâëèâàåò ôàéëîâûé óêàçàòåëü ôàéëà
íà íîìåð áàéòà, çàäàííîãî âòîðûì àðãóìåíòîì. Ñëåäóþùàÿ
îïåðàöèÿ ââîäà/âûâîäà íà÷íåòñÿ ñ ýòîãî áàéòà.
Âîò ïðèìåð ðàáîòû ñ ôóíêöèåé FILSEEK:
(bloCreate 'buf 100)
==> buf
(filOpen 'fo "ooo.ooo" _BINARY_READ_WRITE)
==> fo
(str2blo 'buf "QWERTYUIOP{}" 10)
==> T
(bloDump* 'buf)
00000001 | 00 00 00 00 00 00 00 00 | 00 51 57 45 52 54 59 55 | .........QWERTYU |
00000017 | 49 4F 50 7B 7D 00 00 00 | 00 00 00 00 00 00 00 00 | IOP{}........... |
00000033 | 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 | ................ |
00000049 | 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 | ................ |
00000065 | 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 | ................ |
00000081 | 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 | ................ |
00000097 | 00 00 00 00 | | .... |
==> T
(filPutBlo 'fo 'buf)
==> T
(filloc 'fo)
==> 101
(filSeek 'fo 15)
==> T
(filLoc 'fo)
==> 15
(bloCreate 'buf2 5)
==> buf2
(filGetBlo 'fo 'buf2)
==> T
(bloDump* 'buf2)
00000001 | 59 55 49 4F 50 | | YUIOP |
==> T
(filClose 'fo)
==> T
(bloDestroy 'buf)
==> T
(bloDestroy 'buf2)
==> T
(gc)
Óòèëèçèðîâàíî ÿ÷ååê: 0; àòîìîâ: 15.
|
 ïðèìåðå ñîçäàåòñÿ BLOB (áóôåð) ðàçìåðîì 100 áàéòîâ è â
íåãî ñ äåñÿòîé ïîçèöèè çàíîñèòñÿ ñòðîêà ñèìâîëîâ. Ïîñëå ÷åãî
îòêðûâàåòñÿ äâîè÷íûé ôàéë â ðåæèìå
_BINARY_READ_WRITE. Äàëåå, â íàáîð äàííûõ, ñâÿçàííûé
ñ ôàéëîì, âûâîäèòñÿ ñîçäàííûé ñòîáàéòîâûé áóôåð. Çàïðîñ
çíà÷åíèÿ ôàéëîâîãî óêàçàòåëÿ äàåò âåëè÷èíó 101. Ïîñëå ýòîãî
âûçîâîì FILSEEK ôàéë ïîçèöèîíèðóåòñÿ íà 15-áàéò îò
íà÷àëà. Ñîçäàåòñÿ áóôåð íà 5 áàéòîâ, è â ýòîò áóôåð ÷èòàåòñÿ
ïÿòü áàéòîâ ñ 15-é ïîçèöèè ôàéëà. Äàìïèðîâàíèå ïÿòèáàéòîâîãî
áóôåðà ïîêàçûâàåò åãî ñîäåðæèìîå.
|
|
|
|
|
|