импорт::
Считайте данные из ASCII-файла
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
import::readdata(filename | n
, <separator
>, <NonNested>)
import::readdata(filename)
считывает данные в файле filename
. Данные о файле, разделенные пробелом, рассматриваются как различные элементы данных. Результатом является список списков, каждого подсписка, представляющего одну строку файла.
import::readdata(filename, separator)
считывает данные в файле filename
. Данные о файле, разделенные символьным separator
, рассматриваются как различные элементы данных. Результатом является список списков, каждого подсписка, представляющего одну строку файла.
import::readdata(filename, separator, NonNested)
считывает данные в файле filename
как одна запись данных. Данные о файле, разделенные символьным separator
, рассматриваются как различные элементы данных. Результатом является невложенный список плоскости, содержащий данные всех строк файла.
import::readdata(filename)
ищет файл в различных директориях:
Во-первых, имя интерпретировано как имя файла прямого доступа: filename
конкатенирован к каждой директории, данной переменной окружения READPATH
.
Затем имя файла интерпретировано как абсолютный путь.
Затем имя файла интерпретировано относительно “рабочей директории”.
Наконец, имя файла конкатенировано к директории библиотеки.
Если файл может быть открыт с одним из этого, называет, то файл читается.
Обратите внимание на то, что значение “рабочей директории” зависит от операционной системы. В системах Microsoft® Windows® и в Apple Mac OS X систем, “рабочая директория” является папкой, где MuPAD® установлен. В системах UNIX® это - текущая рабочая директория, в которой был запущен MuPAD; когда запущено с меню или настольного элемента, это обычно - корневой каталог пользователя.
Разделитель пути (“/”) вставляется по мере необходимости при конкатенации данного пути и filename
.
Если файл задан именем файла, нет никакой потребности открыть или закрыть файл через fopen
и fclose
, соответственно. Это сделано автоматически import::readdata
.
Вместо имени файла также может использоваться дескриптор файла файла, открытого через fopen
. Обратите внимание на то, что файл, должно быть, был открыт в режиме Read
fopen
. Если дескриптор файла используется, соответствующий файл не закрывается автоматически, но должен быть закрыт пользователем через fclose
.
Файлы, сжатые gzip
или совместимой программой (имеющий имя, заканчивающееся в “.gz
”), распаковываются автоматически после чтения.
Все элементы данных в файле интерпретированы, когда MuPAD возражает. Если элемент данных не может быть интерпретирован как объект MuPAD, он импортируется как строка MuPAD. В противном случае соответствующий объект MuPAD вставляется в список, возвращенный import::readdata
.
Обратите внимание на то, что объекты MuPAD, соответствующие элементам данных, оценены после чтения. Например, элемент данных “sin (0)” в файле оценен и импортирован как целое число MuPAD 0. Остерегайтесь: символы “;
” и “:
” имеют определенное значение если не заданный как разделители в import::readdata
: они разделяют команды MuPAD. Следовательно, если элемент данных чтения содержит одно из этого, изображает, MuPAD интерпретирует этот элемент данных как последовательность операторов и, после оценки, возвращает значение последнего оператора как объект MuPAD, соответствующий элементу данных. Cf. Пример 3.
В отличие от finput
, элементы данных в файле не должны быть закончены двоеточием или точкой с запятой.
Проигнорированы пустые строки в файле.
Мы хотим считать статистические данные в сеанс MuPAD, чтобы протестировать корреляцию двух выборок данных. Примите, что файл “datafile
” содержит следующие два столбца данных о ASCII (каждый столбец, представляющий выборку данных):
0.12 0.2534 2.324 5.72 1.02 2.2232 4.02 7.321 7.4 14.9 -7.4 -15.1
import::readdata
возвращает следующий список, представляющий данные в файле:
data := import::readdata("datafile")
Структура данных stats::sample
преобразовывает этот вложенный список в два столбца данных:
s := stats::sample(data)
0.12 0.2534 2.324 5.72 1.02 2.2232 4.02 7.321 7.4 14.9 -7.4 -15.1
Следующее вычисление показывает, что существует очень сильная корреляция между данными в первом столбце и данными во втором столбце:
stats::correlation(s, 1, 2)
Если данные в файле, как предполагается, представляют одну выборку (запись данных), мы можем проигнорировать то, что числа располагаются на нескольких строках. С NonNested
данные считаны как одна выборка:
data := import::readdata("datafile", NonNested)
Среднее и стандартное отклонение данных:
stats::mean(data), stats::stdev(data)
delete data, s:
Давайте примем, что файл “datafile
” содержит следующие данные о ASCII:
1 | 2 | 3 4| 5 | 6.65786 7| 8 |9| 5 | "ahfjd" | ab100|-23
Мы задаем разделитель данных "|"
для чтения данных:
import::readdata("datafile", "|")
Обратите внимание на то, что пробел в элементах данных, а также пустой строке в файле проигнорирован.
Мы сначала создаем файлы данных ASCII, которые будут использоваться в этом примере. Мы вспоминаем, что градусы Цельсия x являются градусами по Фаренгейту. Во-первых, два файла данных создаются содержащий соответствующие температуры из - 5 градусов Цельсия к 30 градусам Цельсия на шагах 5 градусов Цельсия:
n1 := fopen(Text, "data1", Write): n2 := fopen(Text, "data2", Write): for celsius from -5 to 20 step 5 do fahrenheit := 9/5*celsius + 32: fprint(Unquoted, n1, celsius, " ", fahrenheit): fprint(n2, celsius, fahrenheit): end_for: fclose(n1): fclose(n2):
Файл “data1
” теперь содержит следующие данные:
-5 23 0 32 5 41 10 50 15 59 20 68
Файл “data2
” содержит следующие данные:
-5:23: 0:32: 5:41: 10:50: 15:59: 20:68:
Теперь, мы импортируем данные:
import::readdata("data1")
Чтение данных из файла “data2
” приводит к неожиданному результату:
import::readdata("data2")
Что пошло не так, как надо? Помните, что разделитель данных по умолчанию является пробелом. Следовательно, MuPAD читает выражение -5:23:
как единственный элемент данных в первой строке. Когда MuPAD оценивает этот элемент данных, он интерпретирует его как последовательность двух операторов MuPAD. Результатом последовательности оператора является результат последнего из этих двух операторов, т.е. номер 23. Это - первая данная величина в получившемся списке. Для получения данных, как желаемый, должен быть задан соответствующий разделитель. Файл “data2
” должен быть считан можно следующим образом:
import::readdata("data2", ":")
Мы используем опцию NonNested
, чтобы получить простой список, содержащий все элементы данных, не помещая каждую запись (строка) в собственный подсписок:
import::readdata("data2", ":", NonNested)
delete n1, n2:
Здесь мы видим, что данные оценены после чтения. Во-первых, мы создаем файл данных:
n1 := fopen(Text, "data3", Write) : fprint(Unquoted, n1, a, " 12 ", b): fclose(n1):
Теперь, данные считаны:
import::readdata("data3")
Если a
и b
имеют значения, мы добираемся:
a := 3: b := 34: import::readdata("data3")
delete n1, a, b:
Во-первых, мы создаем файл данных со случайными данными с плавающей точкой что разделенный знаками пробела:
n := fopen(Text, "data4", Write): for i from 1 to 3 do fprint(Unquoted, n, (frandom(), " ") $ j = 1..4); end_for; fclose(n):
Этот файл вновь открыт для чтения с fopen
:
n := fopen(Text, "data4", Read)
Дескриптор файла n
, возвращенный fopen
, может быть передан import::readdata
:
import::readdata(n)
Обратите внимание, однако, что файл был открыт явным образом пользователем с fopen
и не закрывается автоматически import::readdata
. Следовательно, пользователь, как предполагается, закрывает файл явным образом через fclose
:
fclose(n): delete i, n:
| |
|
Дескриптор файла обеспечивается |
|
Разделитель между элементами данных: символьная строка длины 1 (отдельный символ). Разделитель по умолчанию является пробелом. |
|
Возвратите все данные о файле как одну запись данных в невложенном списке. Данные всех строк упорядочены последовательно в этом списке. |
Вложенный список списков. Подсписки содержат данные indiviual строк. С опцией NonNested
, простой список, содержащий все элементы данных от каждой строки в файле.
finput
| fopen
| fread
| ftextinput
| import::csv
| import::readbitmap
| pathname
| read