Потоки и файлы. Упрощенная работа с файлами.
Допустим, что в любом текстовом редакторе создан файл с полным именем C:\datas.txt в ASCII-формате, содержащий просто шесть чисел с разделительными пробелами, размещенные в двух строках и представляющие массив 2x3 элемента:
1 11.2 34.52. 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).
