Main Content

텍스트 파일에서 혼합된 데이터 블록을 테이블 또는 셀형 배열로 가져오기

이 예제에서는 텍스트 파일에서 텍스트 데이터와 숫자형 데이터가 혼합된 블록을 읽어온 다음 이 데이터 블록을 테이블이나 셀형 배열로 가져옵니다.

데이터 파일 개요

샘플 파일 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 속성을 사용하여 변수의 이름을 지정할 수 있습니다. 마지막으로 readtableopts 객체와 함께 사용하여 데이터의 첫 번째 블록을 가져옵니다.

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);

참고 항목

| | | |

관련 항목