Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия Последняя версия Следующая версия справа и слева | ||
msx:basic_dialogue_programming_language:009 [2022-09-19 22:33] GreyWolf [IX.2.6. Операторы PUT и GET] |
msx:basic_dialogue_programming_language:009 [2023-02-19 16:22] GreyWolf |
||
---|---|---|---|
Строка 6: | Строка 6: | ||
<WRAP group 99%> | <WRAP group 99%> | ||
<WRAP half column> \\ </WRAP> | <WRAP half column> \\ </WRAP> | ||
- | <WRAP half column><WRAP justify> | + | <WRAP half column><WRAP right> |
//Файл// (от англ. file — досье, картотека), набор данных,— \\ | //Файл// (от англ. file — досье, картотека), набор данных,— \\ | ||
1) совокупность упорядоченных и взаимосвязанных записей, имеющая описание для идентификации отдельных записей; \\ | 1) совокупность упорядоченных и взаимосвязанных записей, имеющая описание для идентификации отдельных записей; \\ | ||
Строка 301: | Строка 301: | ||
<WRAP group 99%> | <WRAP group 99%> | ||
<WRAP half column> \\ </WRAP> | <WRAP half column> \\ </WRAP> | ||
- | <WRAP half column><WRAP justify> | + | <WRAP half column><WRAP right> |
Старейшим из дошедших до нас каталогов признается список литературных произведений на шумерской глиняной плитке, относящейся к 2000 г. до н.э.. | Старейшим из дошедших до нас каталогов признается список литературных произведений на шумерской глиняной плитке, относящейся к 2000 г. до н.э.. | ||
<WRAP rightalign> | <WRAP rightalign> | ||
Строка 720: | Строка 720: | ||
<code>L$="техника":MERGE L$</code> | <code>L$="техника":MERGE L$</code> | ||
<code>100 MERGE "LIST.3"</code> | <code>100 MERGE "LIST.3"</code> | ||
- | Обратите внимание на тот факт, что программы, вызываемые командой ''MERGE'', имеют более высокий приоритет по сравнению с программами, находящимися в памяти компьютера. Поэтому если в объединяемых программах имеются строки с одинаковыми номерами, то строки программы в памяти компьютера будут заменены соответствующими строками "добавляемой" программы с именем I. | + | Обратите внимание на тот факт, что программы, вызываемые командой ''MERGE'', имеют более высокий приоритет, по сравнению с программами, находящимися в памяти компьютера. Поэтому если в объединяемых программах имеются строки с одинаковыми номерами, то строки программы в памяти компьютера будут заменены соответствующими строками "добавляемой" программы с именем I. |
Наиболее целесообразно использовать этот оператор при работе с библиотеками подпрограмм на магнитной ленте или на дискете. Покажем, как это делается. | Наиболее целесообразно использовать этот оператор при работе с библиотеками подпрограмм на магнитной ленте или на дискете. Покажем, как это делается. | ||
Строка 745: | Строка 745: | ||
<WRAP group 99%> | <WRAP group 99%> | ||
<WRAP half column> \\ </WRAP> | <WRAP half column> \\ </WRAP> | ||
- | <WRAP half column><WRAP justify> | + | <WRAP half column><WRAP right> |
Я знаю, что положил это в надёжное место, но теперь не могу вспомнить, в какое именно! | Я знаю, что положил это в надёжное место, но теперь не могу вспомнить, в какое именно! | ||
<WRAP rightalign> | <WRAP rightalign> | ||
Строка 790: | Строка 790: | ||
==== IX.2.1. Контрольные буферы файлов ==== | ==== IX.2.1. Контрольные буферы файлов ==== | ||
- | {{anchor:maxfiles}} | + | {{anchor:maxfiles1}} |
Оператор | Оператор | ||
<WRAP group> | <WRAP group> | ||
Строка 1532: | Строка 1532: | ||
В заключении этого пункта приведём примеры, иллюстрирующие действие изученных Вами операторов и функций при работе с дисковыми файлами данных прямого доступа. | В заключении этого пункта приведём примеры, иллюстрирующие действие изученных Вами операторов и функций при работе с дисковыми файлами данных прямого доступа. | ||
- | {{anchor:e0926-09}} __//Пример 9//__. \\ {{.examples:0926-01.bas|}} \\ [[+tab|wmsxbpge>0926-09.bas]] | + | {{anchor:e0926-09}} __//Пример 9//__. \\ {{.examples:0926-09.bas|}} \\ [[+tab|wmsxbpge>0926-09.bas]] |
<code> | <code> | ||
5 CLS | 5 CLS | ||
Строка 1573: | Строка 1573: | ||
75 INPUT "Введите количество учащихся";N | 75 INPUT "Введите количество учащихся";N | ||
80 FOR I=1 TO N | 80 FOR I=1 TO N | ||
- | 90 INPUT "Ф.И.";D$:LSET I$=D$:INPUT "Тема1";D$:LSET T1$=D$:INPUT"Балл";D%:LSET O1$=MKI$(D%):INPUT "Тема2";D$:LSET T2$=D$:INPUT "Балл";D%:LSET O2$=MKI$(D%):PUT#1,I | + | 90 INPUT "Ф.И.";D$:LSET I$=D$:INPUT "Тема1";D$:LSET T1$=D$:INPUT"Балл";D%: |
+ | LSET O1$=MKI$(D%):INPUT "Тема2";D$:LSET T2$=D$: | ||
+ | INPUT "Балл";D%:LSET O2$=MKI$(D%):PUT#1,I | ||
110 NEXT:A=0 'A - количество учеников, у которых средний балл по 'двум темам ≥ 4 | 110 NEXT:A=0 'A - количество учеников, у которых средний балл по 'двум темам ≥ 4 | ||
120 FOR K=1 TO N:GET#1,K 'Заполнение файла #2 | 120 FOR K=1 TO N:GET#1,K 'Заполнение файла #2 | ||
Строка 1584: | Строка 1586: | ||
175 FOR K=1 TO N 'Заполнение файла #3 | 175 FOR K=1 TO N 'Заполнение файла #3 | ||
177 GET #1,K | 177 GET #1,K | ||
- | 180 IF CVI(O1$)=4 OR CVI(O1$)=5 OR CVI(O2$)=4 OR CVI(O2$)=5 THEN LSET F1$=I$:B=B+1:PUT #3,B | + | 180 IF CVI(O1$)=4 OR CVI(O1$)=5 OR CVI(O2$)=4 OR CVI(O2$)=5 THEN |
+ | LSET F1$=I$:B=B+1:PUT #3,B | ||
190 NEXT K | 190 NEXT K | ||
195 PRINT"Ф.И. успевающих" | 195 PRINT"Ф.И. успевающих" | ||
Строка 1629: | Строка 1632: | ||
==== IX.3.1. Оператор MAXFILES=, OPEN и CLOSE ==== | ==== IX.3.1. Оператор MAXFILES=, OPEN и CLOSE ==== | ||
- | {{anchor:maxfiles1}} | + | {{anchor:maxfiles}} |
- | Перемещение логических строк последовательных файлов из оперативной памяти на дискету и в обратном направлении производится через //контрольные буферы файлов//. Последние объявляются оператором ''[[09#maxfiles|MAXFILES=]]''. Максимальное количество файлов, которые могут быть открыты одновременно, устанавливается оператором | + | Перемещение логических строк последовательных файлов из оперативной памяти на дискету и в обратном направлении производится через //контрольные буферы файлов//. Последние объявляются оператором ''[[009#maxfiles|MAXFILES=]]''. Максимальное количество файлов, которые могут быть открыты одновременно, устанавливается оператором |
<WRAP group> | <WRAP group> | ||
<WRAP half column> | <WRAP half column> | ||
Строка 1650: | Строка 1653: | ||
При работе с последовательными файлами буфера используются самым простым способом: пересылаемые в файл данные накапливаются в буфере файла, а по заполнении буфера его содержимое сразу целиком переписывается в дисковый файл;при этом буфер файла очищается для следующей порции выходных данных. При чтении файла соответствующие данные поступают из того же самого буфера, а не считываются непосредственно с поверхности дискеты. Как только все необходимые данные считаны из буфера, средства [[msx:basic:]] обеспечивают повторное его заполнение информацией из дискового файла. | При работе с последовательными файлами буфера используются самым простым способом: пересылаемые в файл данные накапливаются в буфере файла, а по заполнении буфера его содержимое сразу целиком переписывается в дисковый файл;при этом буфер файла очищается для следующей порции выходных данных. При чтении файла соответствующие данные поступают из того же самого буфера, а не считываются непосредственно с поверхности дискеты. Как только все необходимые данные считаны из буфера, средства [[msx:basic:]] обеспечивают повторное его заполнение информацией из дискового файла. | ||
- | Учтите,что при использовании оператора ''MAXFILES='' автоматически выполняется оператор ''[[10#clear|CLEAR]]'', но если Вы используете в программе оба оператора, то располагайте оператор ''MAXFILES='' вслед за оператором ''[[10#clear|CLEAR]]''. | + | Учтите,что при использовании оператора ''MAXFILES='' автоматически выполняется оператор ''[[010#clear|CLEAR]]'', но если Вы используете в программе оба оператора, то располагайте оператор ''MAXFILES='' вслед за оператором ''[[010#clear|CLEAR]]''. |
+ | {{anchor:open_for}} | ||
Вам, конечно же, ясно, что перед использованием файла Вы должны объявить его //открытым//. Открытие файла осуществляется оператором ''OPEN'', в котором задаётся: | Вам, конечно же, ясно, что перед использованием файла Вы должны объявить его //открытым//. Открытие файла осуществляется оператором ''OPEN'', в котором задаётся: | ||
* имя устройства (''A:'', ''B:'', ''MEM:'', ''CAS:'', ''CRT:'', ''GRP:'', ''LPT:'', ''COM:''); | * имя устройства (''A:'', ''B:'', ''MEM:'', ''CAS:'', ''CRT:'', ''GRP:'', ''LPT:'', ''COM:''); | ||
Строка 1731: | Строка 1735: | ||
|Номер файла|2| | |Номер файла|2| | ||
</WRAP> | </WRAP> | ||
- | Можно открыть файл с последовательным доступом в режиме записи, используя один номер файла, и в режиме чтения, используя другой. Однако, каждому номеру файла будет при этом соответствовать //свой буфер//, никак не связанный с другими. | + | Можно открыть файл с последовательным доступом в режиме записи, используя один номер файла, и в режиме чтения, используя другой. Однако каждому номеру файла будет при этом соответствовать //свой буфер//, никак не связанный с другими. |
Если же Вы используете только один буфер, то для изменения режима доступа к файлу последний необходимо закрыть, а затем вновь открыть. Этот приём особенно удобен, когда Вы хотите использовать в программе в любой момент только один открытый файл (''MAXFILES=1''). | Если же Вы используете только один буфер, то для изменения режима доступа к файлу последний необходимо закрыть, а затем вновь открыть. Этот приём особенно удобен, когда Вы хотите использовать в программе в любой момент только один открытый файл (''MAXFILES=1''). | ||
Строка 1762: | Строка 1766: | ||
<WRAP group 99%> | <WRAP group 99%> | ||
<WRAP half column> \\ </WRAP> | <WRAP half column> \\ </WRAP> | ||
- | <WRAP half column><WRAP justify> | + | <WRAP half column><WRAP right> |
Да,— повторял он себе,— если бы на борту "Пилигрима" я знал все, что должен знать настоящий моряк, сколько несчастий можно было бы избежать! | Да,— повторял он себе,— если бы на борту "Пилигрима" я знал все, что должен знать настоящий моряк, сколько несчастий можно было бы избежать! | ||
<WRAP rightalign> | <WRAP rightalign> | ||
- | —//Жюль Верн. Дети капитана Гранта// | + | —//Ж.Верн. Дети капитана Гранта// |
</WRAP></WRAP> | </WRAP></WRAP> | ||
</WRAP></WRAP> | </WRAP></WRAP> | ||
Строка 1919: | Строка 1923: | ||
</code> | </code> | ||
- | Однако, следует весьма осторожно употреблять префиксы, обозначающие денежные единицы (%% "$$" %%, %% "**" %% и %% "**$" %%), так как они вызывают форматирование числовых величин как нечисловых. По этой причине числовые величины, снабжённые в дисковом файле такими префиксами, не могут быть считаны оттуда в их исходном виде. | + | Однако следует весьма осторожно употреблять префиксы, обозначающие денежные единицы (%% "$$" %%, %% "**" %% и %% "**$" %%), так как они вызывают форматирование числовых величин как нечисловых. По этой причине числовые величины, снабжённые в дисковом файле такими префиксами, не могут быть считаны оттуда в их исходном виде. |
{{anchor:e0932-08}} __//Пример 8//__. \\ {{.examples:0932-08.bas|}} \\ [[+tab|wmsxbpge>0932-08.bas]] | {{anchor:e0932-08}} __//Пример 8//__. \\ {{.examples:0932-08.bas|}} \\ [[+tab|wmsxbpge>0932-08.bas]] | ||
Строка 1966: | Строка 1970: | ||
* n — арифметическое выражение, целая часть значения которого принадлежит отрезку [0,15] и определяет номер контрольного буфера файла, соответствующий файлу, для файлов последовательного доступа возвращает текущее количество байтов информации, считанных в буфер или записанных на дискету. | * n — арифметическое выражение, целая часть значения которого принадлежит отрезку [0,15] и определяет номер контрольного буфера файла, соответствующий файлу, для файлов последовательного доступа возвращает текущее количество байтов информации, считанных в буфер или записанных на дискету. | ||
* Или возвращает номер //текущей// номер записи, использованный в последнем выполненном операторе ''[[#PUT]]'' или ''[[#GET]]''. | * Или возвращает номер //текущей// номер записи, использованный в последнем выполненном операторе ''[[#PUT]]'' или ''[[#GET]]''. | ||
- | * Для [[#ramdisk|RAM–диска]] возвращает позицию в файле, начиная с номера файла. Например, ''LOC'' возвращает 0 сразу после того, как файл открыт для ввода и вывода (''OPEN FOR INPUT'' / ''OPEN FOR OUTPUT'') и возвращает длину файла сразу после того, как файл открыт для добавления (''OPEN FOR APPEND''). | + | * Для [[#ramdisk|RAM–диска]] возвращает позицию в файле, начиная с номера файла. Например, ''LOC'' возвращает 0 сразу после того, как файл открыт для ввода и вывода (''OPEN FOR INPUT'' / ''OPEN FOR OUTPUT''), и возвращает длину файла сразу после того, как файл открыт для добавления (''OPEN FOR APPEND''). |
==== IX.3.3. Операторы INPUT, LINE INPUT#n. Функции INPUT$ и EOF ==== | ==== IX.3.3. Операторы INPUT, LINE INPUT#n. Функции INPUT$ и EOF ==== | ||
Строка 2667: | Строка 2671: | ||
<WRAP group 99%> | <WRAP group 99%> | ||
<WRAP half column> \\ </WRAP> | <WRAP half column> \\ </WRAP> | ||
- | <WRAP half column><WRAP justify> | + | <WRAP half column><WRAP right> |
RAMdisk (псевдодиск) — логическое устройство, обеспечивающее хранение файлов в специально выделенной области оперативной памяти.Используется на микроЭВМ и ПЭВМ. | RAMdisk (псевдодиск) — логическое устройство, обеспечивающее хранение файлов в специально выделенной области оперативной памяти.Используется на микроЭВМ и ПЭВМ. | ||
<WRAP rightalign> | <WRAP rightalign> | ||
Строка 2773: | Строка 2777: | ||
Перечислим теперь операторы и функции, которые можно использовать для работы с программными файлами и с файлами //последовательного// доступа: | Перечислим теперь операторы и функции, которые можно использовать для работы с программными файлами и с файлами //последовательного// доступа: | ||
- | * ''[[09#save|SAVE]]'' | + | * ''[[009#save|SAVE]]'' |
- | * ''[[09#load|LOAD]]'' | + | * ''[[009#load|LOAD]]'' |
- | * ''[[09#merge|MERGE]]'' | + | * ''[[009#merge|MERGE]]'' |
- | * ''[[09#run|RUN]]'' | + | * ''[[009#run|RUN]]'' |
- | * ''[[09#open|OPEN]]'' | + | * ''[[009#open|OPEN]]'' |
- | * ''[[09#close|CLOSE]]'' | + | * ''[[009#close|CLOSE]]'' |
- | * ''[[09#print1|PRINT #]]'' | + | * ''[[009#print1|PRINT #]]'' |
- | * ''[[09#print_using|PRINT #,USING]]'' | + | * ''[[009#print_using|PRINT #,USING]]'' |
- | * ''[[09#input|INPUT#]]'' | + | * ''[[009#input|INPUT#]]'' |
- | * ''[[09#input1|INPUT$]]'' | + | * ''[[009#input1|INPUT$]]'' |
- | * ''[[09#lineinput|LINE INPUT #]]'' | + | * ''[[009#lineinput|LINE INPUT #]]'' |
- | * ''[[09#eof|EOF]]'' | + | * ''[[009#eof|EOF]]'' |
- | * ''[[09#loc|LOC]]'' | + | * ''[[009#loc|LOC]]'' |
- | * ''[[09#lof|LOF]]'' | + | * ''[[009#lof|LOF]]'' |
- | * ''[[09#fpos|FPOS]]'' | + | * ''[[009#fpos|FPOS]]'' |
<WRAP centeralign>Помните, однако, что имя устройства ''МЕМ:'' обязано присутствовать всякий раз при упоминании имени файла!</WRAP> | <WRAP centeralign>Помните, однако, что имя устройства ''МЕМ:'' обязано присутствовать всякий раз при упоминании имени файла!</WRAP> | ||
Строка 2889: | Строка 2893: | ||
FIXME | FIXME | ||
|< 100% 20% 80% >| | |< 100% 20% 80% >| | ||
- | |''[[09#save2|SAVE]]''|команда записи в формате ASCII программ из оперативной памяти на магнитную ленту| | + | |''[[009#save2|SAVE]]''|команда записи в формате ASCII программ из оперативной памяти на магнитную ленту| |
- | |''[[09#load2|LOAD]]''|команда чтения в оперативную память программ, записанных на магнитной ленте в формате ASCII| | + | |''[[009#load2|LOAD]]''|команда чтения в оперативную память программ, записанных на магнитной ленте в формате ASCII| |
- | |''[[09#merge2|MERGE]]''|команда подгрузки в память программ, записанных на ленте в формате ASCII| | + | |''[[009#merge2|MERGE]]''|команда подгрузки в память программ, записанных на ленте в формате ASCII| |
- | |''[[09#run2|RUN]]''|команда загрузки в память программ, записанных на ленте в формате ASCII, с автоматическим запуском их на счёт| | + | |''[[009#run2|RUN]]''|команда загрузки в память программ, записанных на ленте в формате ASCII, с автоматическим запуском их на счёт| |
|''[[#CSAVE]]''|команда записи во внутреннем представлении программ (см. [[202|]]) из оперативной памяти на ленту| | |''[[#CSAVE]]''|команда записи во внутреннем представлении программ (см. [[202|]]) из оперативной памяти на ленту| | ||
|''[[#CLOAD]]''|команда чтения в оперативную память (или верификации) программ, записанных на ленте во внутреннем представлении (см. [[202|]])| | |''[[#CLOAD]]''|команда чтения в оперативную память (или верификации) программ, записанных на ленте во внутреннем представлении (см. [[202|]])| | ||
|''[[#BSAVE]]''|команда записи во внутреннем представлении программных файлов или файлов данных из конкретного участка оперативной памяти на ленту| | |''[[#BSAVE]]''|команда записи во внутреннем представлении программных файлов или файлов данных из конкретного участка оперативной памяти на ленту| | ||
|''[[#BLOAD]]''|команда считывания в определённую область оперативной памяти программных файлов и файлов данных, записанных на ленте во внутреннем представлении (см. [[202|]])| | |''[[#BLOAD]]''|команда считывания в определённую область оперативной памяти программных файлов и файлов данных, записанных на ленте во внутреннем представлении (см. [[202|]])| | ||
- | |''[[09#open|OPEN]]''|операторы и функции для работы с файлами данных последовательного доступа| | + | |''[[009#open|OPEN]]''|операторы и функции для работы с файлами данных последовательного доступа| |
- | |''[[09#close|CLOSE]]''|:::| | + | |''[[009#close|CLOSE]]''|:::| |
|''MAXFILES=''|:::| | |''MAXFILES=''|:::| | ||
- | |''[[09#eof|EOF]]''|:::| | + | |''[[009#eof|EOF]]''|:::| |
- | |''[[09#print1|PRINT #]]''|:::| | + | |''[[009#print1|PRINT #]]''|:::| |
- | |''[[09#print_using|PRINT #,USING]]''|:::| | + | |''[[009#print_using|PRINT #,USING]]''|:::| |
- | |''[[09#input|INPUT#]]''|:::| | + | |''[[009#input|INPUT#]]''|:::| |
- | |''[[09#lineinput|LINE INPUT #]]''|:::| | + | |''[[009#lineinput|LINE INPUT #]]''|:::| |
- | |''[[09#input1|INPUT$]]''|:::| | + | |''[[009#input1|INPUT$]]''|:::| |
Приступим к краткому описанию синтаксиса и семантики упомянутых выше средств организации файлов на магнитной ленте и работы с ними. | Приступим к краткому описанию синтаксиса и семантики упомянутых выше средств организации файлов на магнитной ленте и работы с ними. | ||
Строка 2912: | Строка 2916: | ||
FIXME | FIXME | ||
- | В этом пункте описаны команды ''[[09#save2|SAVE]]'', ''[[09#load2|LOAD]]'', ''[[09#merge2|MERGE]]'', ''[[09#run2|RUN]]''. | + | В этом пункте описаны команды ''[[009#save2|SAVE]]'', ''[[009#load2|LOAD]]'', ''[[009#merge2|MERGE]]'', ''[[009#run2|RUN]]''. |
{{anchor:save2}} | {{anchor:save2}} | ||
Строка 3311: | Строка 3315: | ||
===== IX.6. Дополнение ===== | ===== IX.6. Дополнение ===== | ||
- | Три очень //полезных// программы. | + | Три очень //полезных// программы. |
{{anchor:e096-01}} 1. Программа, осуществляющая посекторное копирование диска на кассету. \\ {{.examples:096-01.bas|}} \\ [[+tab|wmsxbpge>096-01.bas]] FIXME | {{anchor:e096-01}} 1. Программа, осуществляющая посекторное копирование диска на кассету. \\ {{.examples:096-01.bas|}} \\ [[+tab|wmsxbpge>096-01.bas]] FIXME |