Инструменты пользователя

Инструменты сайта


msx:basic_dialogue_programming_language:009

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
msx:basic_dialogue_programming_language:009 [2022-09-19 22:36]
GreyWolf [IX.3.1. Оператор MAXFILES=, OPEN и CLOSE]
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>
Строка 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:''​);​
Строка 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
msx/basic_dialogue_programming_language/009.1663616169.txt.gz · Последние изменения: 2022-09-19 22:36 — GreyWolf