Иллюстрированный самоучитель по Mathematica 3/4

Потоки и файлы. Упрощенная работа с файлами.

Допустим, что в любом текстовом редакторе создан файл с полным именем C:\datas.txt в ASCII-формате, содержащий просто шесть чисел с разделительными пробелами, размещенные в двух строках и представляющие массив 2x3 элемента:

1 11.2 34.5
2. 3.4 56

Тогда о структуре файла можно судить, используя команду:

!!C:\datas.txt
1 1.2 34.5 2.3.4 56.

Нетрудно заметить, что структура файла соответствует структуре массива. Однако считывание файла командой "name" дает следующий результат:

<<C:\datas.txt
380.8

Результат представляет вычисленное выражение второй строки файла. Считывание функцией ReadList без дополнительного аргумента также дает ошибочный результат:

ReadList["C:\datas.txt"]
{41.4, 380.8}

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

ReadList["C:\datas.txt", Number]
{1, 1.2, 34.5, 2., 3.4, 56.}

Однако мы получили одномерный список – данные просто считываются построчно. Применение дополнительного параметра в виде {Number, Number} дает следующий результат:

ReadList["C:.txt", {Number, Number}]
{{1, 1.2), {34.5, 2.}, {3.4, 56.}}

Правильный результат можно получить, используя опцию RecordList › True:

ReadList["C:.txt",Number,RecordLists-XTrue]
{{1, 1.2, 34.5), {2., 3.4, 56.}}

Для загрузки файлов пакетов расширений (Add-On) используются функции, позволяющие задать контекст файлов (подробнее о контекстах речь пойдет в уроке 10):

  • Needs ["context' ", "filename"] – загружает файл, если указанный контекст отсутствует в списке загруженных;
  • Needs ["contexts "] – загружает файл, имя которого определяется с помощью функции ContextToFilename ["contexts "], если указанный контекст отсутствует в списке загруженных.

Загрузка файлов с указанием их контекстов позволяет избежать конфликтов между разными пакетами расширения, используемыми одновременно (см. более подробно урок 10).

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.