Потоки и файлы. Упрощенная работа с файлами.
Система Mathematica имеет развитые средства для работы с потоками (streams) и файлами (files). Под потоком подразумевается непрерывная последовательность данных, циркулирующих внутри компьютера. Обмен потоками происходит практически непрерывно, например, при вводе поток ввода поступает от клавиатуры в компьютер, при печати поток данных поступает от компьютера в принтер через порт принтера и т. д.
Файлом является упорядоченная структура данных, имеющая имя и хранящаяся на каком-либо носителе, чаще всего на магнитном диске. Файлы могут иметь различные форматы и различный тип доступа к хранимой на них информации. Наиболее распространенные в системе Mathematica файлы документов являются файлами с последовательным доступом и имеют текстовый формат.
Последовательный доступ означает, что информация из открытого файла может быть считана строго последовательно от его начала до конца, отмеченного специальной меткой. Это напоминает считывание с магнитофонной кассеты. Текстовый формат означает, что все данные записаны в виде ASCII-кодов. Следовательно, прочесть такой файл можно с помощью любого текстового редактора, работающего с текстами в виде ASCII-кодов.
Потоки и файлы имеют много общего: имена, определенную структуру, необходимость открытия перед использованием и закрытия после использования. Однако если с файлами пользователь сталкивается уже в начале работы с системой (нужно вызвать файл с демонстрационным документом или сохранить его, а затем вызвать другой файл), то с понятием потока при работе с системой сталкиваться практически не приходится, хотя помимо нашей воли потоки данных постоянно текут между компьютером и его периферийным оборудованием.
Упрощенная работа с файлами
Прежде чем рассматривать весьма обширные возможности системы по работе с файлами в целом, отметим упрощенный прием вызова файла с помощью двойного символа "<<":
<
<
filename
Эта команда считывает файл с указанным именем filename и заносит в память компьютера содержащиеся в нем определения. Имя файла надо указывать полностью, то есть вместе с расширением. Исключением является случай, когда файл находится в основном каталоге системы. Эта команда эквивалентна функции:
Get[
"filename"
, key]
Для записи объекта (переменной, массива, списка и т. д.) в файл служат упрощенные команды:
- expr >> filename – передает значение ехрг в файл с заданным именем;
- ехрг >>> filename – добавляет ехрг в конец файла с заданным именем.
Указанные команды по существу есть укороченные (и потому более удобные) формы следующих функций:
- Get ["filename", "key"] – читает файл, который закодирован функцией Encode с использованием ключа "key";
- GetContext [ "context' " ] – загружает файл с заданным контекстом;
- Put[expr1, expr2,…, "filename"] – записывает последовательность выражений expri в файл с именем filename;
- PutAppend[expr1, expr2,…, "filename"] – присоединяет последовательность выражений expri к файлу с именем filename.
Еще одна упрощенная функция – !! filename – выводит содержимое файла с заданным именем.
Следующие примеры показывают запись списка в файл C:\ma.vat, его считывание, затем добавление в файл еще одного списка и контроль контекста файла:
{{
1.2.3
},{
4.5.6
},{a,b,c}}
>
>
C:\ma.val
<
<
C:
\ma.val
{{
1
,
2
,
3
}, {
4
,
5
,
6
), {a, b, c}} {d,e,f}
>
>
>
C:\ma.val
<
<
C:\ma.val
{d, e, f}
!!C:\ma.val
1
,
2
,
3
,
4
,
5
,
6
, a, b, c d, e, f
Такая форма вызова особенно удобна для вызова файлов пакетов расширений и применений системы. Имя файла указывается по правилам, принятым в MS-DOS. Файлы пакетов применений имеют расширение.т. Мы уже приводили примеры использования определений, содержащихся в файлах пакетов расширения системы.
Имеется еще ряд функций для работы с файлами:
- ReadList ["filename" ] – читает все оставшиеся в файле "filename" выражения и возвращает их в виде списка;
- ReadList ["filename", type] – читает из файла "filename" объекты указанного типа type до конца файла. Возвращает список считанных объектов;
- ReadList ["filename", {typel, type2,…}] – читает объекты указанных типов type1 до конца файла filename;
- ReadList [ "filename", types, n] – читает только первые п объектов указанных типов types из файла filename;
- Save ["filename", x1, x2,…] – создает файл с заданным именем filename, содержащий значения переменных x1, х2,…;
- ! command – исполняет заданную команду операционной системы.