Функция BlockFile дает возможность работать во время редактирования входного файла с другим внешним файлом, производить поиск и замену во внешнем файле с использованием начального и конечного контекстов поиска по внешнему файлу, осуществлять взаимодействие внешнего файла с объектами внутреннего языка, а также с общим архивом и списками редактора. Системная текстовая переменная retBlockFile (код возврата) равна false в случае ошибки, иначе - true.

BlockFile  (<операция>, <блок чтения>, <блок записи>,
            <начальный контекст чтения>, <конечный контекст чтения>,
            <начальный контекст записи>, <конечный контекст записи>,
            <признак записи блока в файл>,
            <признак типа контекста чтения>,
            <признак типа контекста записи>,
            <признак учета регистра>,
            <диапазон строк блока чтения>)
<операция>:

extr     -  чтение контекста из внешнего файла (блок чтения) и
            занесение его в блок записи;

repl    -  замена контекста во внешнем файле (блок чтения) в
           зависимости от позиционного или блокового признака;

insb    -  вставка контекста перед заданным контекстом или строкой
           в зависимости от позиционного или блокового признака из
           блока чтения во внешний файл (блок записи);

inse    -  вставка контекста после заданного контекста или строки
           в зависимости от позиционного или блокового признака из
           блока чтения во внешний файл (блок записи);

svarh   -  сохранение общего архива в файле записи;

ldarh   -  загрузка общего архива из файла чтения;

svllist -  сохранение левого списка в файле записи;

ldllist -  загрузка левого списка из файла чтения;

svrlist -  сохранение правого списка в файле записи;

ldrlist -  загрузка правого списка из файла чтения;
<блок чтения>:
{10}       -  блок редактирования (10 - стандартный номер);
{{n}}      -  ячейка с номером n=1,2,… из общего архива;
sysvar[n]  -  системная переменная (n=1,2,3…) без подстановки её
              значений (задается без  обрамляющих кавычек);
"sysvar[n]"-  системная переменная (n=1,2,3…) с подстановкой её
              значений  (задается в обрамляющих кавычках);
fname      -  полное имя внешнего файла с путём доступа <диск>:\…;
              имя файла может образоваться также путем подстановки
              системной переменной в конструкцию "sysvar[n]" при
              обязательном присутствии двойных кавычек;
LeftList:n  или  RightList:n  -
              файл берётся из ячейки n левого или правого списка; 
              если n=-1, то текущий номер ячейки списка соответствует
              номеру редактируемого файла; так при редактировании
              по правому списку – номер ячейки левого списка будет
              соответствовать номеру ячейки правого списка с именем
              редактируемого файла;
FileRes    -  символическое имя, указывающее на то, что имя
              внешнего файла соответствует заданному в текущий момент
              имени выходного файла;

Замечание:    наличие внешнего файла в одном из блоков чтения или
              записи обязательно для данной блоковой функции.
<блок записи>:
{10}       -  блок редактирования (10 - стандартный номер);
{{n}}      -  ячейка с номером n=1,2,… из общего архива;
sysvar[n]  -  системная переменная (n=1,2,3…) без подстановки её
              значений (задается без  обрамляющих кавычек);
"sysvar[n]"-  системная переменная (n=1,2,3…) с подстановкой её
              значений  (задается в обрамляющих кавычках);
fname      -  полное имя внешнего файла с путём доступа <диск>:\…;
              имя файла может образоваться также путем подстановки
              системной переменной в конструкцию "sysvar[n]" при
              обязательном присутствии двойных кавычек;
LeftList:n  или  RightList:n  -
              файл берётся из ячейки n левого или правого списка; 
              если n=-1, то текущий номер ячейки списка соответствует
              номеру редактируемого файла; так при редактировании
              по правому списку – номер ячейки левого списка будет
              соответствовать номеру ячейки правого списка с именем
              редактируемого файла;
FileRes    -  символическое имя, указывающее на то, что имя
              внешнего файла соответствует заданному в текущий момент
              имени выходного файла;

Замечание:    наличие внешнего файла в одном из блоков чтения или
              записи обязательно для данной блоковой функции.
<начальный контекст чтения>: -
параметр, являющийся контекстом поиска в файле или блоке редактирования (для системной переменной игнорируется), который обязан заключаться в двойные кавычки, если содержит следующие служебные символы:
   пробел или , или " или ) или ] или > или :: или || или ;
Контекст может также содержать спецсимволы, используемые в таблице контекстов; если контекст не задан, то по умолчанию его значение устанавливается равным @ , что означает совпадение начального контекста с началом файла, а конечного контекста - с концом файла; если конечный контекст представляет собой пустые двойные кавычки - "", то он совпадает с начальным контекстом; допускается задание в параметре альтернативного контекста, в этом случае контексты, заключенные в двойные кавычки, отделяются друг от друга спецсимволом :: , а при поиске перебираются все допустимые сочетания заданных начального и конечного контекстов; например, задание параметров "int func(" :: "real func(" , ")" означает, что будет искаться вхождение контекста вида: int func( … ) или real func( … ) ;
 Cпецсимволы контекста поиска:

  %   -	контекст ищется в начале строки (следующий символ контекста - 
         первый в строке);

  $   -	контекст ищется в конце строки (предшествующий символ
        контекста - последний в строке);

  ?   -	любой символ строки;

  *   -	предыдущий символ (символьное выражение или группа) может
        повторяться 0 или более раз;

  +   -	предыдущий символ (символьное выражение или группа) может
        повторяться 1 или более раз;

  […] -	символьное выражение, определяющее набор символов, допустимых
        в контексте; например, [abcd] означает, что контекст может
        содержать символы a или b или с или d ;

  -   -	диапазон символов, задаваемых в выражении; например, [a-bd-z]
        означает, что контекст может содержать любую букву от a до z,
        кроме c ;

  ~   -	a) операция отрицания в выражении; например, [~abc] означает,
           что контекст может содержать любой символ, кроме символов
           a, b или c ;
        b) отрицание наличия символов в строке между найденными
           группами; например, контекст поиска {aa}~{bb} в строке
           aaccbbccaabb соответствует только подстроке aabb ,
           т.к. между группами нет других символов;

  @   -	следующий символ в контексте не управляющий; например, для
        поиска символа ? надо задать @? ;

  |   -	символы контекста должны удовлетворять предыдущему (до '|')
        или последующему (после '|') условиям; например, bc|d
        означает, что в контексте могут быть символы abc или abd; 

  {…} -	группа, состоящая из отдельных символов или символьных
        выражений, к которой могут быть применены также операции + ,
        * и |; например, {ab}|{cd};
        каждая группа в шаблоне поиска нумеруется от 1 до 9 и
        аналогичный номер имеет её найденный контекст; например,
        каждой группе из шаблона {%a?c|d}{a?c|d}{a?c|d$} в строке
        aed abc abd соответствуют три группы контекстов: 1-я группа -
        aed , 2-я группа - abc , 3-я группа - abd ; 

  \  -	следующие два символа задают 16-ное представление контекста;
        например,  \0d , при этом наличие этого контекста поиска 
        означает, что при чтении исходной строки к ней присоединяются
        символы конца строки $0d$0a  (соответствуют контексту \0d\0a)
        и это обстоятельство позволяет задавать контекстные замены,
        изменяющие или использующие конец строки;

  %% -	спецсимволы стоят в начале контекста поиска и задают начало
        блока редактирования;

  $$ -	спецсимволы стоят в начале контекста поиска и задают конец
        блока редактирования.

<конечный контекст чтения>: -
параметр, являющийся контекстом поиска в файле или блоке редактирования (для системной переменной игнорируется), который обязан заключаться в двойные кавычки, если содержит следующие служебные символы:
   пробел или , или " или ) или ] или > или :: или || или ;
Контекст может также содержать спецсимволы, используемые в таблице контекстов; если контекст не задан, то по умолчанию его значение устанавливается равным @ , что означает совпадение начального контекста с началом файла, а конечного контекста - с концом файла; если конечный контекст представляет собой пустые двойные кавычки - "", то он совпадает с начальным контекстом; допускается задание в параметре альтернативного контекста, в этом случае контексты, заключенные в двойные кавычки, отделяются друг от друга спецсимволом :: , а при поиске перебираются все допустимые сочетания заданных начального и конечного контекстов; например, задание параметров "int func(" :: "real func(" , ")" означает, что будет искаться вхождение контекста вида: int func( … ) или real func( … ) ;
 Cпецсимволы контекста поиска:

  %   -	контекст ищется в начале строки (следующий символ контекста - 
         первый в строке);

  $   -	контекст ищется в конце строки (предшествующий символ
        контекста - последний в строке);

  ?   -	любой символ строки;

  *   -	предыдущий символ (символьное выражение или группа) может
        повторяться 0 или более раз;

  +   -	предыдущий символ (символьное выражение или группа) может
        повторяться 1 или более раз;

  […] -	символьное выражение, определяющее набор символов, допустимых
        в контексте; например, [abcd] означает, что контекст может
        содержать символы a или b или с или d ;

  -   -	диапазон символов, задаваемых в выражении; например, [a-bd-z]
        означает, что контекст может содержать любую букву от a до z,
        кроме c ;

  ~   -	a) операция отрицания в выражении; например, [~abc] означает,
           что контекст может содержать любой символ, кроме символов
           a, b или c ;
        b) отрицание наличия символов в строке между найденными
           группами; например, контекст поиска {aa}~{bb} в строке
           aaccbbccaabb соответствует только подстроке aabb ,
           т.к. между группами нет других символов;

  @   -	следующий символ в контексте не управляющий; например, для
        поиска символа ? надо задать @? ;

  |   -	символы контекста должны удовлетворять предыдущему (до '|')
        или последующему (после '|') условиям; например, bc|d
        означает, что в контексте могут быть символы abc или abd; 

  {…} -	группа, состоящая из отдельных символов или символьных
        выражений, к которой могут быть применены также операции + ,
        * и |; например, {ab}|{cd};
        каждая группа в шаблоне поиска нумеруется от 1 до 9 и
        аналогичный номер имеет её найденный контекст; например,
        каждой группе из шаблона {%a?c|d}{a?c|d}{a?c|d$} в строке
        aed abc abd соответствуют три группы контекстов: 1-я группа -
        aed , 2-я группа - abc , 3-я группа - abd ; 

  \  -	следующие два символа задают 16-ное представление контекста;
        например,  \0d , при этом наличие этого контекста поиска 
        означает, что при чтении исходной строки к ней присоединяются
        символы конца строки $0d$0a  (соответствуют контексту \0d\0a)
        и это обстоятельство позволяет задавать контекстные замены,
        изменяющие или использующие конец строки;

  %% -	спецсимволы стоят в начале контекста поиска и задают начало
        блока редактирования;

  $$ -	спецсимволы стоят в начале контекста поиска и задают конец
        блока редактирования.

<начальный контекст записи>: -
параметр, являющийся контекстом поиска в файле или блоке редактирования (для системной переменной игнорируется), который обязан заключаться в двойные кавычки, если содержит следующие служебные символы:
   пробел или , или " или ) или ] или > или :: или || или ;
Контекст может также содержать спецсимволы, используемые в таблице контекстов; если контекст не задан, то по умолчанию его значение устанавливается равным @ , что означает совпадение начального контекста с началом файла, а конечного контекста - с концом файла; если конечный контекст представляет собой пустые двойные кавычки - "", то он совпадает с начальным контекстом; допускается задание в параметре альтернативного контекста, в этом случае контексты, заключенные в двойные кавычки, отделяются друг от друга спецсимволом :: , а при поиске перебираются все допустимые сочетания заданных начального и конечного контекстов; например, задание параметров "int func(" :: "real func(" , ")" означает, что будет искаться вхождение контекста вида: int func( … ) или real func( … ) ;
 Cпецсимволы контекста поиска:

  %   -	контекст ищется в начале строки (следующий символ контекста - 
         первый в строке);

  $   -	контекст ищется в конце строки (предшествующий символ
        контекста - последний в строке);

  ?   -	любой символ строки;

  *   -	предыдущий символ (символьное выражение или группа) может
        повторяться 0 или более раз;

  +   -	предыдущий символ (символьное выражение или группа) может
        повторяться 1 или более раз;

  […] -	символьное выражение, определяющее набор символов, допустимых
        в контексте; например, [abcd] означает, что контекст может
        содержать символы a или b или с или d ;

  -   -	диапазон символов, задаваемых в выражении; например, [a-bd-z]
        означает, что контекст может содержать любую букву от a до z,
        кроме c ;

  ~   -	a) операция отрицания в выражении; например, [~abc] означает,
           что контекст может содержать любой символ, кроме символов
           a, b или c ;
        b) отрицание наличия символов в строке между найденными
           группами; например, контекст поиска {aa}~{bb} в строке
           aaccbbccaabb соответствует только подстроке aabb ,
           т.к. между группами нет других символов;

  @   -	следующий символ в контексте не управляющий; например, для
        поиска символа ? надо задать @? ;

  |   -	символы контекста должны удовлетворять предыдущему (до '|')
        или последующему (после '|') условиям; например, bc|d
        означает, что в контексте могут быть символы abc или abd ; 

  {…} -	группа, состоящая из отдельных символов или символьных
        выражений, к которой могут быть применены также операции + ,
        * и |; например, {ab}|{cd};
        каждая группа в шаблоне поиска нумеруется от 1 до 9 и
        аналогичный номер имеет её найденный контекст; например,
        каждой группе из шаблона {%a?c|d}{a?c|d}{a?c|d$} в строке
        aed abc abd соответствуют три группы контекстов: 1-я группа -
        aed , 2-я группа - abc , 3-я группа - abd ; 

  \  -	следующие два символа задают 16-ное представление контекста;
        например,  \0d , при этом наличие этого контекста поиска 
        означает, что при чтении исходной строки к ней присоединяются
        символы конца строки $0d$0a  (соответствуют контексту \0d\0a)
        и это обстоятельство позволяет задавать контекстные замены,
        изменяющие или использующие конец строки;

  %% -	спецсимволы стоят в начале контекста поиска и задают начало
        блока редактирования;

  $$ -	спецсимволы стоят в начале контекста поиска и задают конец
        блока редактирования.

<конечный контекст записи>: -
параметр, являющийся контекстом поиска в файле или блоке редактирования (для системной переменной игнорируется), который обязан заключаться в двойные кавычки, если содержит следующие служебные символы:
   пробел или , или " или ) или ] или > или :: или || или ;
Контекст может также содержать спецсимволы, используемые в таблице контекстов; если контекст не задан, то по умолчанию его значение устанавливается равным @ , что означает совпадение начального контекста с началом файла, а конечного контекста - с концом файла; если конечный контекст представляет собой пустые двойные кавычки - "", то он совпадает с начальным контекстом; допускается задание в параметре альтернативного контекста, в этом случае контексты, заключенные в двойные кавычки, отделяются друг от друга спецсимволом :: , а при поиске перебираются все допустимые сочетания заданных начального и конечного контекстов; например, задание параметров "int func(" :: "real func(" , ")" означает, что будет искаться вхождение контекста вида: int func( … ) или real func( … ) ;
 Cпецсимволы контекста поиска:

  %   -	контекст ищется в начале строки (следующий символ контекста - 
         первый в строке);

  $   -	контекст ищется в конце строки (предшествующий символ
        контекста - последний в строке);

  ?   -	любой символ строки;

  *   -	предыдущий символ (символьное выражение или группа) может
        повторяться 0 или более раз;

  +   -	предыдущий символ (символьное выражение или группа) может
        повторяться 1 или более раз;

  […] -	символьное выражение, определяющее набор символов, допустимых
        в контексте; например, [abcd] означает, что контекст может
        содержать символы a или b или с или d ;

  -   -	диапазон символов, задаваемых в выражении; например, [a-bd-z]
        означает, что контекст может содержать любую букву от a до z,
        кроме c ;

  ~   -	a) операция отрицания в выражении; например, [~abc] означает,
           что контекст может содержать любой символ, кроме символов
           a, b или c ;
        b) отрицание наличия символов в строке между найденными
           группами; например, контекст поиска {aa}~{bb} в строке
           aaccbbccaabb соответствует только подстроке aabb ,
           т.к. между группами нет других символов;

  @   -	следующий символ в контексте не управляющий; например, для
        поиска символа ? надо задать @? ;

  |   -	символы контекста должны удовлетворять предыдущему (до '|')
        или последующему (после '|') условиям; например, bc|d
        означает, что в контексте могут быть символы abc или abd ; 

  {…} -	группа, состоящая из отдельных символов или символьных
        выражений, к которой могут быть применены также операции + ,
        * и |; например, {ab}|{cd};
        каждая группа в шаблоне поиска нумеруется от 1 до 9 и
        аналогичный номер имеет её найденный контекст; например,
        каждой группе из шаблона {%a?c|d}{a?c|d}{a?c|d$} в строке
        aed abc abd соответствуют три группы контекстов: 1-я группа -
        aed , 2-я группа - abc , 3-я группа - abd ; 

  \  -	следующие два символа задают 16-ное представление контекста;
        например,  \0d , при этом наличие этого контекста поиска 
        означает, что при чтении исходной строки к ней присоединяются
        символы конца строки $0d$0a  (соответствуют контексту \0d\0a)
        и это обстоятельство позволяет задавать контекстные замены,
        изменяющие или использующие конец строки;

  %% -	спецсимволы стоят в начале контекста поиска и задают начало
        блока редактирования;

  $$ -	спецсимволы стоят в начале контекста поиска и задают конец
        блока редактирования.

<признак записи блока в файл>  -
если задано true, то после выполнения функции блок редактирования
записывается в выходной файл редактирования, если задано false
(значение по умолчанию), то записи блока в файл не происходит;
<признак типа контекста чтения>  - 
если задано true (значение по умолчанию), то контекст чтения является
позиционным и точно соответствует своими границами началу и концу
контекстов, заданным в параметрах, если задано false, то контекст
является блоковым и соответствует своими границами номерам строк,
в которых были найдены начало и конец контекста;
<признак типа контекста записи>  - 
если задано true (значение по умолчанию), то контекст записи является
позиционным и точно соответствует своими границами началу и концу
контекстов, заданным в параметрах, если задано false, то контекст
является блоковым и соответствует своими границами номерам строк,
в которых были найдены начало и конец контекста;
<признак учета регистра>  - 
если задано true  (значение по умолчанию), то  регистр учитывается
при поиске контекста, если задано false, то регистр не учитывается;
<диапазон строк блока чтения>:
n         -  номер символа в строке блока чтения (при отрицательном
             значении номера отсчет строк идет от конечной строки
             блока:   -1 – последняя,  -2 – предпоследняя и т.д.);
n1..n2    -  диапазон строк блока чтения (значение по умолчанию 1..-1);
Замечание:   для системной переменной диапазон игнорируется.
Обращение к функции: Комментарий:
============================================================
BlockFile(extr,d:\zorg\pass.txt,{10},"?*","","Cum","",,,,,3) 3-я строка из файла d:\zorg\pass.txt (строка выбирается по контексту поиска "?*") записывается вместо контекста "Cum" в блок редактирования {10};
============================================================
BlockFile(extr,"sysvar",sysvar1,%procedure,%\0d\0a,,,,false) контекстный фрагмент, начинающийся со строки procedure… (контекст начала поиска %procedure) и заканчивающийся пустой строкой (контекст конца поиска %\0d\0a) берется из файла, полное имя которого содержится в переменной sysvar, и записывается в переменную sysvar1;
============================================================
BlockFile(repl,{{2}},d:\fn.txt,,,""{{1}} "","") содержимое второй ячейки общего архива замещает контекст во внешнем файле с именем d:\fn.txt, заменяемый контекст определяется содержимым первой ячейки общего архива {{1}} с добавлением конечного пробела;
============================================================
BlockFile(svarh,,RightList:-1) сохранение общего архива в файле, указанном в текущей ячейке правого списка;
============================================================
BlockFile(ldarh,RightList:-1) операция ldarh: загрузка общего архива из файла, указанного в текущей ячейке правого списка.
============================================================