Main Content

fscanf

텍스트 파일에서 데이터 읽기

설명

예제

A = fscanf(fileID,formatSpec)은 열린 텍스트 파일의 데이터를 열 벡터 A로 읽어 들인 다음 formatSpec에 지정된 형식에 따라 파일의 값을 해석합니다. fscanf 함수는 전체 파일에 형식을 다시 적용하고 파일 끝(EOF) 마커에 파일 포인터를 배치합니다. fscanfformatSpec을 일치시킬 수 없게 되면 일치하는 부분만 읽어 들이고 처리를 중지합니다.

파일 ID fileID로 텍스트 파일을 지정합니다. fileID 값은 fopen으로 파일을 열고 문자 인코딩을 지정한 후 구할 수 있습니다. 읽기가 끝나면 fclose(fileID)를 호출하여 파일을 닫습니다.

예제

A = fscanf(fileID,formatSpec,sizeA)는 파일 데이터에서 sizeA 차원을 배열 A로 읽어 들이고 마지막으로 읽은 값 다음에 파일 포인터를 배치합니다. fscanf는 열 순서대로 A를 채웁니다. sizeA는 양의 정수이거나 [m n] 형식이어야 합니다. 여기서 mn은 양의 정수입니다.

예제

[A,count] = fscanf(___)fscanfA로 읽어 들인 필드의 개수를 추가로 반환합니다. 숫자형 데이터의 경우 이는 읽은 값의 개수입니다. 이 구문은 위에 열거된 구문 중 하나의 입력 인수에 사용할 수 있습니다.

예제

모두 축소

부동소수점 숫자가 포함된 예제 텍스트 파일을 만듭니다.

x = 100*rand(8,1);
fileID = fopen('nums1.txt','w');
fprintf(fileID,'%4.4f\n',x);
fclose(fileID);

파일의 내용을 확인합니다.

type nums1.txt
81.4724
90.5792
12.6987
91.3376
63.2359
9.7540
27.8498
54.6882

읽을 파일을 열고 파일 ID fileID를 가져옵니다.

fileID = fopen('nums1.txt','r');

읽을 데이터의 형식을 정의합니다. '%f'를 사용하여 부동소수점 숫자를 지정합니다.

formatSpec = '%f';

파일 데이터를 읽어 열 순서대로 출력 배열 A를 채웁니다. fscanf는 전체 파일에 formatSpec 형식을 다시 적용합니다.

A = fscanf(fileID,formatSpec)
A = 8×1

   81.4724
   90.5792
   12.6987
   91.3376
   63.2359
    9.7540
   27.8498
   54.6882

A는 파일의 데이터가 포함된 열 벡터입니다.

파일을 닫습니다.

fclose(fileID);

정수와 부동소수점 숫자가 포함된 예제 텍스트 파일을 만듭니다.

x = 1:1:5;
y = [x;rand(1,5)];
fileID = fopen('nums2.txt','w');
fprintf(fileID,'%d %4.4f\n',y);
fclose(fileID);

파일의 내용을 확인합니다.

type nums2.txt
1 0.8147
2 0.9058
3 0.1270
4 0.9134
5 0.6324

읽을 파일을 열고 파일 ID fileID를 가져옵니다.

fileID = fopen('nums2.txt','r');

읽을 데이터의 형식과 출력 배열의 차원을 정의합니다.

formatSpec = '%d %f';
sizeA = [2 Inf];

파일 데이터를 읽어 열 순서대로 출력 배열 A를 채웁니다. fscanf는 전체 파일에 formatSpec 형식을 재사용합니다.

A = fscanf(fileID,formatSpec,sizeA)
A = 2×5

    1.0000    2.0000    3.0000    4.0000    5.0000
    0.8147    0.9058    0.1270    0.9134    0.6324

fclose(fileID);

A가 파일 데이터의 방향과 일치하도록 배열을 전치합니다.

A = A'
A = 5×2

    1.0000    0.8147
    2.0000    0.9058
    3.0000    0.1270
    4.0000    0.9134
    5.0000    0.6324

예제 파일에서 특정 문자를 건너뛰고 숫자형 데이터만 반환합니다.

온도 값이 포함된 예제 텍스트 파일을 만듭니다.

str = '78°C 72°C 64°C 66°C 49°C';
fileID = fopen('temperature.dat','w');
fprintf(fileID,'%s',str);
fclose(fileID);

파일에서 °C 텍스트는 건너뛴 채 숫자를 읽습니다. 또한 fscanf가 읽은 값의 개수를 반환합니다. 확장 ASCII 코드 176은 온도 기호를 나타냅니다.

fileID = fopen('temperature.dat','r');
degrees = char(176);
[A,count] = fscanf(fileID, ['%d' degrees 'C'])
fclose(fileID);
A =

    78
    72
    64
    66
    49


count =

     5

A는 파일의 숫자형 값이 포함된 벡터입니다. countfscanf가 5개의 값을 읽었음을 나타냅니다.

입력 인수

모두 축소

열려 있는 텍스트 파일의 파일 ID로, 정수로 지정됩니다. fscanf로 파일을 읽으려면 fopen을 사용하여 파일을 연 다음 fileID를 가져와야 합니다.

데이터형: double

파일 내 데이터 필드의 형식으로, 하나 이상의 변환 지정자로 구성된 문자형 벡터나 string형 스칼라로 지정됩니다. fscanf는 파일을 읽을 때 데이터가 formatSpec으로 지정된 형식과 일치하는지 확인합니다.

숫자형 필드

이 표에는 숫자형 입력값에 대해 사용 가능한 변환 지정자가 나와 있습니다. fscanf는 십진수(10진법) 표현으로 값을 변환합니다.

숫자형 필드 유형변환 지정자세부 정보

정수, 부호 있음

%d

10진법

%i

파일의 값에 의해 다음과 같이 진법이 결정됩니다.

  • 디폴트 값은 10진법입니다.

  • 시작 숫자가 0x 또는 0X인 경우 값은 16진수(16진법)가 됩니다.

  • 시작 숫자가 0인 경우 값은 8진수(8진법)가 됩니다.

%ld 또는 %li

64비트 값, 10진법, 8진법 또는 16진법

정수, 부호 없음

%u

10진법

%o

8진법(8진수)

%x

16진법(16진수)

%lu, %lo, %lx

64비트 값, 10진법, 8진법 또는 16진법

부동소수점 숫자

%f

부동소수점 필드는 다음 중 하나를 포함할 수 있습니다(대소문자를 구분하지 않음). Inf, -Inf, NaN 또는 -NaN

%e

%g

문자형 필드

이 표에 문자 입력값에 대해 사용 가능한 변환 지정자가 나와 있습니다.

문자형 필드 유형변환 지정자설명

문자형 벡터 또는 string형 스칼라

%s

공백을 제외한 모든 문자를 읽습니다.

%c

공백을 포함하여 단일 문자를 읽습니다.
한 번에 여러 문자를 읽으려면 필드 너비를 지정해야 합니다.

패턴 일치

%[...]

일치하지 않는 첫 번째 문자나 공백이 나타날 때까지 대괄호로 묶인 문자만 읽습니다.

예: %[mus]'summer ''summ'으로 읽습니다.

formatSpec에 숫자 지정자와 문자 지정자가 조합되어 있다면 fscanf가 각 문자를 그에 상응하는 숫자로 변환합니다. 이러한 변환은 명시적으로 모든 숫자형 값을 건너뛰도록 형식이 지정된 경우에도 발생합니다(예: formatSpec'%*d %s'인 경우).

선택적 연산자

  • 필드 및 문자 무시

    특정 필드 또는 필드의 부분을 무시하도록 지정하지 않을 경우 fscanf는 순차적으로 파일의 모든 숫자형 값과 문자를 읽습니다. 필드를 건너뛰려면 퍼센트 기호(%) 뒤에 별표(*)를 삽입하십시오. 예를 들어, 정수를 건너뛰려면 %*d를 지정하십시오.

  • 필드 너비

    한 번에 읽을 최대 숫자 또는 텍스트 문자 개수를 지정하려면 퍼센트 문자 다음에 숫자를 추가해야 합니다. 예를 들어, %10c는 공백을 포함하여 한 번에 10개의 문자를 읽고, %4f는 소수점을 포함하여 한 번에 최대 4개의 숫자를 읽습니다.

  • 리터럴 텍스트 무시

    fscanfformatSpec 변환 지정자에 추가된 특정 텍스트를 무시합니다.

    예: Level%u'Level1'1로 읽습니다.

    예: %uStep'2Step'2로 읽습니다.

출력 배열 A의 차원으로, 정수 Inf 또는 요소를 2개 가진 행 벡터로 지정됩니다.

sizeA 입력 형식설명
Inf파일 끝까지 읽습니다.
숫자형 데이터의 경우 출력값 A는 열 벡터가 됩니다.
텍스트 데이터의 경우 A는 문자형 벡터가 됩니다.
n최대 n개의 숫자형 값 또는 문자형 필드를 읽습니다.
숫자형 데이터의 경우 출력값 A는 열 벡터가 됩니다.
텍스트 데이터의 경우 A는 문자형 벡터가 됩니다.
[m,n]최대 m*n개의 숫자형 값 또는 문자형 필드를 읽습니다. nInf일 수 있지만 m은 Inf일 수 없습니다. 출력값 A는 열 순서대로 데이터가 채워진 m×n 배열이 됩니다.

출력 인수

모두 축소

파일 데이터로, 열 벡터, 행렬, 문자형 벡터 또는 문자형 배열로 반환됩니다. A의 클래스와 크기는 다음과 같이 formatSpec 입력값에 따라 달라집니다.

  • formatSpec에 숫자 지정자만 포함된 경우 A도 숫자가 됩니다. sizeA 인수를 지정한 경우 A는 지정된 크기의 행렬이 되고, 그렇지 않으면 A는 열 벡터가 됩니다. 입력값이 sizeA 값보다 적으면 fscanfA를 0으로 채웁니다.

    • formatSpec에 64비트의 부호 있는 정수 지정자만 포함된 경우 Aint64 클래스가 됩니다.

    • formatSpec에 64비트의 부호 없는 정수 지정자만 포함된 경우 Auint64 클래스가 됩니다.

    • 그렇지 않으면, Adouble형 클래스가 됩니다.

  • formatSpec에 문자 또는 텍스트 지정자만 포함되어 있으면(%c 또는 %s) A는 문자형 배열이 됩니다. 지정된 sizeA보다 입력값에 적은 수의 문자가 포함된 경우 fscanfAchar(0)으로 채웁니다.

  • formatSpec에 숫자 지정자와 문자 지정자가 조합되어 있다면 Adouble형 클래스 숫자이고, fscanf는 각 텍스트 문자를 그에 상응하는 숫자로 변환합니다. 이러한 변환은 formatSpec이 명시적으로 모든 숫자형 필드를 건너뛰도록 지정된 경우에도 발생합니다(예: formatSpec'%*d %s'인 경우).

  • MATLAB®에서 파일 데이터를 formatSpec과 일치시킬 수 없을 경우 A는 숫자형 또는 문자형 배열이 될 수 있습니다. A 클래스는 처리를 중지하기 전에 fscanf가 읽는 값에 따라 달라집니다.

읽은 문자의 수로, 스칼라 값으로 반환됩니다.

  • 읽기 함수 sscanffscanf에 대한 형식 지정자는 쓰기 함수 sprintffprintf에 대한 형식과 다릅니다. 읽기 함수에서 정밀도 필드는 지원되지 않습니다. 너비 필드는 쓰기를 위한 최솟값은 지정하지만 읽기를 위한 최댓값은 지정하지 않습니다.

알고리즘

MATLAB은 파일과 연결된 인코딩 체계를 사용하여 문자를 읽습니다. fopen 함수를 사용하여 파일을 열 때 인코딩을 지정합니다.

확장 기능

버전 내역

R2006a 이전에 개발됨

모두 확장