Этот пример читает блок смешанных текстовых и числовых данных из текстового файла, а затем импортирует блок данных в таблицу или массив ячеек.
Образец файла bigfile.txt
содержит строки с комментариями, начинающиеся с # #. Данные расположены в пяти столбцах: Первый столбец содержит текст, указывающий временные метки. Второй, третий и четвертый столбцы содержат числовые данные, указывающие на температуру, влажность и скорость ветра. Последний столбец содержит описательный текст. Отобразите содержимое файла bigfile.txt
.
type('bigfile.txt')
## A ID = 02476 ## YKZ Timestamp Temp Humidity Wind Weather 06-Sep-2013 01:00:00 6.6 89 4 clear 06-Sep-2013 05:00:00 5.9 95 1 clear 06-Sep-2013 09:00:00 15.6 51 5 mainly clear 06-Sep-2013 13:00:00 19.6 37 10 mainly clear 06-Sep-2013 17:00:00 22.4 41 9 mostly cloudy 06-Sep-2013 21:00:00 17.3 67 7 mainly clear ## B ID = 02477 ## YVR Timestamp Temp Humidity Wind Weather 09-Sep-2013 01:00:00 15.2 91 8 clear 09-Sep-2013 05:00:00 19.1 94 7 n/a 09-Sep-2013 09:00:00 18.5 94 4 fog 09-Sep-2013 13:00:00 20.1 81 15 mainly clear 09-Sep-2013 17:00:00 20.1 77 17 n/a 09-Sep-2013 18:00:00 20.0 75 17 n/a 09-Sep-2013 21:00:00 16.8 90 25 mainly clear ## C ID = 02478 ## YYZ Timestamp Temp Humidity Wind Weather
Чтобы импортировать данные как таблицу, используйте readtable
с настройками импорта.
Создайте объект настроек импорта для файла с помощью detectImportOptions
функция. Укажите местоположение данных с помощью DataLines
свойство. Для примера - строки 3
через 8
содержат первый блок данных. Опционально можно задать имена переменных с помощью VariableNames
свойство. Наконец, импортируйте первый блок данных с помощью readtable
с opts
объект.
opts = detectImportOptions('bigfile.txt'); opts.DataLines = [3 8]; opts.VariableNames = {'Timestamp','Temp',... 'Humidity','Wind','Weather'}; T_first = readtable('bigfile.txt',opts)
T_first=6×5 table
Timestamp Temp Humidity Wind Weather
____________________ ____ ________ ____ _________________
06-Sep-2013 01:00:00 6.6 89 4 {'clear' }
06-Sep-2013 05:00:00 5.9 95 1 {'clear' }
06-Sep-2013 09:00:00 15.6 51 5 {'mainly clear' }
06-Sep-2013 13:00:00 19.6 37 10 {'mainly clear' }
06-Sep-2013 17:00:00 22.4 41 9 {'mostly cloudy'}
06-Sep-2013 21:00:00 17.3 67 7 {'mainly clear' }
Прочтите второй блок, обновив DataLines
свойство местоположению второго блока.
opts.DataLines = [11 17];
T_second = readtable('bigfile.txt',opts)
T_second=7×5 table
Timestamp Temp Humidity Wind Weather
____________________ ____ ________ ____ ________________
09-Sep-2013 01:00:00 15.2 91 8 {'clear' }
09-Sep-2013 05:00:00 19.1 94 7 {'n/a' }
09-Sep-2013 09:00:00 18.5 94 4 {'fog' }
09-Sep-2013 13:00:00 20.1 81 15 {'mainly clear'}
09-Sep-2013 17:00:00 20.1 77 17 {'n/a' }
09-Sep-2013 18:00:00 20 75 17 {'n/a' }
09-Sep-2013 21:00:00 16.8 90 25 {'mainly clear'}
Можно импортировать данные как массив ячеек с помощью readcell
функция со detectImportOptions
, или при помощи textscan
функция. Сначала импортируйте блок данных с помощью readcell
а затем выполните тот же импорт при помощи textscan
.
Чтобы выполнить импорт с помощью функции readcell, создайте объект настроек импорта для файла с помощью detectImportOptions
функция. Укажите местоположение данных с помощью DataLines
свойство. Затем выполните операцию импорта, используя readcell
функция и объект настроек импорта opts
.
opts = detectImportOptions('bigfile.txt'); opts.DataLines = [3 8]; % fist block of data C = readcell('bigfile.txt',opts)
C=6×5 cell array
Columns 1 through 4
{[06-Sep-2013 01:00:00]} {[ 6.6000]} {[89]} {[ 4]}
{[06-Sep-2013 05:00:00]} {[ 5.9000]} {[95]} {[ 1]}
{[06-Sep-2013 09:00:00]} {[15.6000]} {[51]} {[ 5]}
{[06-Sep-2013 13:00:00]} {[19.6000]} {[37]} {[10]}
{[06-Sep-2013 17:00:00]} {[22.4000]} {[41]} {[ 9]}
{[06-Sep-2013 21:00:00]} {[17.3000]} {[67]} {[ 7]}
Column 5
{'clear' }
{'clear' }
{'mainly clear' }
{'mainly clear' }
{'mostly cloudy'}
{'mainly clear' }
Чтобы выполнить импорт с помощью textscan
function, задайте размер блока используя N
и формат полей данных, используя formatSpec
. Для примера используйте '%s'
для текстовых переменных, '%D'
для переменных даты и времени или '%c'
для категориальных переменных. Установите 'DateLocale'
аргумент имя-значение в 'en_US'
обеспечить перевод имен месяцев на английский язык. Использование fopen
чтобы открыть файл. Затем функция возвращает идентификатор файла fileID
. Далее прочтите из файла при помощи textscan
функция.
N = 6; formatSpec = '%D %f %f %f %c'; fileID = fopen('bigfile.txt');
Прочтите первый блок и отобразите содержимое переменной Humidity
.
C_first = textscan(fileID,formatSpec,N,'CommentStyle','##','Delimiter','\t','DateLocale','en_US')
C_first=1×5 cell array
Columns 1 through 4
{6x1 datetime} {6x1 double} {6x1 double} {6x1 double}
Column 5
{6x1 char}
C_first{3}
ans = 6×1
89
NaN
95
NaN
51
NaN
Обновите размер блока N и считайте второй блок. Отобразите содержимое пятой переменной Weather
.
N = 7; C_second = textscan(fileID,formatSpec,N,'CommentStyle','##','Delimiter','\t','DateLocale','en_US')
C_second=1×5 cell array
Columns 1 through 4
{7x1 datetime} {7x1 double} {7x1 double} {7x1 double}
Column 5
{7x1 char}
C_second{5}
ans = 7x1 char array
'm'
'...'
'm'
'...'
'm'
'...'
'c'
Закройте файл.
fclose(fileID);
detectImportOptions
| fopen
| readcell
| readtable
| textscan