Программирование на языке «Ядро»: Руководство пользователя, страница 3

Как видно из этого примера, данные в текстовом файле разделяются пробелами (или запятыми) на слова. Слово может быть либо числовой константой, либо логической, либо строковой; интерпретатор при вводе анализирует каждое слово и определяет его тип. Если внутри слова должны содержаться разделители (пробелы, запятые, знаки табуляции), то слово берется в кавычки или апострофы. Несколько пробелов и/или знаков табуляции, записанные подряд, равносильны одному пробелу; несколько запятых подряд разделяют пустые строковые значения.

  

Рисунок 6. Ввод значений из текстового файла

Операция input в этом примере использована в правой части оператора присваивания. Последовательность строковых и числовых значений, которая получилась в результате ввода, присваивается переменным из левой части в том порядке, в котором они записаны, т.е. три строковых значения присвоены элементам строкового массива S, а следующие три вещественных значения - элементам массива XYZ.

Заметим, что способ описания переменных, использованный в этом примере, не употребляется в традиционных языках. Массивы S и XYZ имеют различные типы и одинаковые границы. Синтаксис языка «Ядро» позволяет объединить описания так, что одно и то же определение границ относится к обоим описываемым переменным.

Остановимся на задании имени текстового файла. Правым аргументом операций dsply, reply, insert или input должна быть строковая переменная или строковая константа. В остальном язык «Ядро» не определяет способ указания имени файла, полагаясь на правила, установленные операционной системой. Интерпретатор «Ядро 2005» позволяет использовать как короткие имена файлов, так и имена, включающие путь (path) к файлу. Текущим директорием считается тот, который установлен последним выполнением диалога открытия файла, а если файловый диалог ни разу не выполнялся – директорий, из которого запущен интерпретатор. Файловый диалог запускается при выборе команды «Открыть источник» меню «Файл» главного окна, а также всякий раз, когда операция reply или insert не находит заданный файл ввода в текущем директории.

Файл открывается при первом выполнении операции ввода-вывода и остается открытым всё время, пока не будет закрыт явно либо не будет закрыт источник ввода программы (файл или окно), в котором произошло обращение к файлу. Пока файл открыт для вывода, из него нельзя вводить, и наоборот. Для явного закрытия файла используется префиксная операция close_file. Аргумент операции – символьное имя файла (либо путь) вместе с расширением. Возможно задание последовательности имен файлов для одновременного их закрытия. Например, оператор:

close_file(“Ipt1.txt”, “Ipt2.txt”)

закрывает два файла, имена которых указаны в аргументе операции.

1.2.3. Дополнительные возможности работы с файлами

Язык «Ядро» содержит некоторые операции с файлами, которые имеются в традиционных языках программирования, и некоторые дополнительные операции, необходимость которых возникает в прикладных задачах.

Для удаления файла используется префиксная операция delete_file, аргумент которой – символьное имя файла (либо путь) вместе с расширением. Возможно задание последовательности имен файлов для одновременного их удаления одной операцией.

Если в момент удаления файл открыт из «Ядра», он автоматически закрывается. Если файл открыт внешней программой и не содержится в таблице символов, возможна программная ошибка.

Префиксная операция input_line возвращает значения из очередной строки заданного файла, аналогично тому, как операция input вводит все значения из файла. Файл открывается первой операцией ввода строки и остается открытым, пока он не будет закрыт явно или пока не произойдет возвращение в охватывающий блок (за пределы ближайших скобок, охватывающих описание переменной).

Часто в прикладных задачах приходится работать с таблицами, записанными в текстовых файлах в формате, совместимом с обычными программами визуализации и обработки данных (Surfer, Grapher, Excel и т.п.). Предполагается, что в файле построчно записана таблица, содержащая одно и то же число слов (строковых или числовых констант) в каждой строке. Синтаксически слова определяются так же, как в предыдущем пункте; для совместимости с большинством приложений достаточно, чтобы в первой строке содержались заголовки данных (символьные обозначения без кавычек и без разделителей внутри слов), а в остальных строках – числовые данные. Следующие функции позволяют определить размеры таких таблиц.

Префиксная операция capcount_file возвращает число слов в заголовке (первой строке файла). Аргумент может быть последовательностью имен файлов, тогда результат – последовательность целых чисел (размеров заголовков таблиц в этих файлах).

Префиксная операция rowcolcount_file возвращает два целых числа: число строк файла и число слов в заголовке файла. Аргумент может быть последовательностью имен файлов, тогда результатом будет последовательность пар значений.

1.3. Константы, переменные и массивы

1.3.1. Типы значений и запись констант

Язык «Ядро» позволяет работать со значениями, относящимися к одному из четырех типов: целыми, вещественными, булевыми и строковыми. Как правило, этих типов бывает достаточно для большинства прикладных задач.

Значения в программе изображаются константами этих типов. Правила написания констант достаточно традиционны. Целочисленные и вещественные константы записываются в десятичной системе счисления, разделителем целой и дробной части является точка, в записи вещественного числа с плавающей точкой символ Е отделяет мантиссу от порядка. Строковые константы записываются в парных апострофах или кавычках, при этом строка в апострофах может содержать кавычки, а строка в кавычках – апострофы. Если необходимо употребить апостроф внутри строковой константы в апострофах, то он удваивается; то же относится к кавычкам. Примеры правильных строковых констант:

’Таблица ”Перемещения” ’

”Таблица ’Деформации’”

В остальном строковые константы могут содержать произвольные символы.

В языке «Ядро» имеются предопределенные константы, приведенные в таблице.