텍스트 파일에서 혼합된 데이터 블록을 테이블 또는 셀형 배열로 가져오기
이 예제에서는 텍스트 파일에서 텍스트 데이터와 숫자형 데이터가 혼합된 블록을 읽어온 다음 이 데이터 블록을 테이블이나 셀형 배열로 가져옵니다.
데이터 파일 개요
샘플 파일 bigfile.txt
에는 ##으로 시작하는 주석 처리된 라인이 포함되어 있습니다. 데이터는 5개의 열로 정렬됩니다. 첫 번째 열에는 타임스탬프를 나타내는 텍스트가 포함됩니다. 두 번째, 세 번째, 네 번째 열에는 온도, 습도, 풍속을 나타내는 숫자형 데이터가 포함됩니다. 마지막 열에는 설명 텍스트가 포함됩니다. 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
함수를 사용하여 파일에 대한 import options 객체를 생성합니다. 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
함수를 사용하여 파일에 대한 import options 객체를 생성하십시오. DataLines
속성을 사용하여 데이터의 위치를 지정합니다. 그런 다음 readcell
함수와 import options 객체 opts
를 사용하여 가져오기 작업을 수행합니다.
opts = detectImportOptions('bigfile.txt'); opts.DataLines = [3 8]; % fist block of data C = readcell('bigfile.txt',opts)
C=6×5 cell array
{[06-Sep-2013 01:00:00]} {[ 6.6000]} {[89]} {[ 4]} {'clear' }
{[06-Sep-2013 05:00:00]} {[ 5.9000]} {[95]} {[ 1]} {'clear' }
{[06-Sep-2013 09:00:00]} {[15.6000]} {[51]} {[ 5]} {'mainly clear' }
{[06-Sep-2013 13:00:00]} {[19.6000]} {[37]} {[10]} {'mainly clear' }
{[06-Sep-2013 17:00:00]} {[22.4000]} {[41]} {[ 9]} {'mostly cloudy'}
{[06-Sep-2013 21:00:00]} {[17.3000]} {[67]} {[ 7]} {'mainly clear' }
textscan
함수를 사용하여 가져오기 작업을 수행하려면 N
을 사용하여 블록의 크기를 지정하고 formatSpec
을 사용하여 데이터 필드의 형식을 지정하십시오. 예를 들어, 텍스트 변수에는 '%s'
를 사용하고, 날짜/시간 변수에는 '%D'
를 사용하며, categorical형 변수에는 '%c'
를 사용합니다. 'DateLocale'
이름-값 인수를 'en_US'
로 설정하여 월 이름이 영어로 해석되도록 합니다. fopen
을 사용하여 파일을 엽니다. 이 함수는 파일 ID인 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
{6×1 datetime} {6×1 double} {6×1 double} {6×1 double} {6×1 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
{7×1 datetime} {7×1 double} {7×1 double} {7×1 double} {7×1 char}
C_second{5}
ans = 7×1 char array
'm'
'↵'
'm'
'↵'
'm'
'↵'
'c'
파일을 닫습니다.
fclose(fileID);
참고 항목
readcell
| readtable
| textscan
| fopen
| detectImportOptions