fscanf
텍스트 파일에서 데이터 읽기
설명
A = fscanf(
은 열린 텍스트 파일의 데이터를 열 벡터 fileID
,formatSpec
)A
로 읽어 들인 다음 formatSpec
에 지정된 형식에 따라 파일의 값을 해석합니다. fscanf
함수는 전체 파일에 형식을 다시 적용하고 파일 끝(EOF) 마커에 파일 포인터를 배치합니다. fscanf
가 formatSpec
을 일치시킬 수 없게 되면 일치하는 부분만 읽어 들이고 처리를 중지합니다.
파일 ID fileID
로 텍스트 파일을 지정합니다. fileID
값은 fopen
으로 파일을 열고 문자 인코딩을 지정한 후 구할 수 있습니다. 읽기가 끝나면 fclose(fileID)
를 호출하여 파일을 닫습니다.
A = fscanf(
는 파일 데이터에서 fileID
,formatSpec
,sizeA
)sizeA
차원을 배열 A
로 읽어 들이고 마지막으로 읽은 값 다음에 파일 포인터를 배치합니다. fscanf
는 열 순서대로 A
를 채웁니다. sizeA
는 양의 정수이거나 [m n]
형식이어야 합니다. 여기서 m
과 n
은 양의 정수입니다.
예제
파일 내용을 열 벡터로 읽기
부동소수점 숫자가 포함된 예제 텍스트 파일을 만듭니다.
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
는 파일의 숫자형 값이 포함된 벡터입니다. count
는 fscanf
가 5개의 값을 읽었음을 나타냅니다.
입력 인수
fileID
— 파일 ID
정수
열려 있는 텍스트 파일의 파일 ID로, 정수로 지정됩니다. fscanf
로 파일을 읽으려면 fopen
을 사용하여 파일을 연 다음 fileID
를 가져와야 합니다.
데이터형: double
formatSpec
— 데이터 필드의 형식
문자형 벡터 | string형 스칼라
파일 내 데이터 필드의 형식으로, 하나 이상의 변환 지정자로 구성된 문자형 벡터나 string형 스칼라로 지정됩니다. fscanf
는 파일을 읽을 때 데이터가 formatSpec
으로 지정된 형식과 일치하는지 확인합니다.
숫자형 필드
이 표에는 숫자형 입력값에 대해 사용 가능한 변환 지정자가 나와 있습니다. fscanf
는 십진수(10진법) 표현으로 값을 변환합니다.
숫자형 필드 유형 | 변환 지정자 | 세부 정보 |
---|---|---|
정수, 부호 있음 |
| 10진법 |
| 파일의 값에 의해 다음과 같이 진법이 결정됩니다.
| |
| 64비트 값, 10진법, 8진법 또는 16진법 | |
정수, 부호 없음 |
| 10진법 |
| 8진법(8진수) | |
| 16진법(16진수) | |
| 64비트 값, 10진법, 8진법 또는 16진법 | |
부동소수점 숫자 | | 부동소수점 필드는 다음 중 하나를 포함할 수 있습니다(대소문자를 구분하지 않음). |
| ||
|
문자형 필드
이 표에 문자 입력값에 대해 사용 가능한 변환 지정자가 나와 있습니다.
문자형 필드 유형 | 변환 지정자 | 설명 |
---|---|---|
문자형 벡터 또는 string형 스칼라 |
| 공백을 제외한 모든 문자를 읽습니다. |
| 공백을 포함하여 단일 문자를 읽습니다. | |
패턴 일치 |
| 일치하지 않는 첫 번째 문자나 공백이 나타날 때까지 대괄호로 묶인 문자만 읽습니다. 예: |
formatSpec
에 숫자 지정자와 문자 지정자가 조합되어 있다면 fscanf
가 각 문자를 그에 상응하는 숫자로 변환합니다. 이러한 변환은 명시적으로 모든 숫자형 값을 건너뛰도록 형식이 지정된 경우에도 발생합니다(예: formatSpec
이 '%*d %s'
인 경우).
선택적 연산자
필드 및 문자 무시
특정 필드 또는 필드의 부분을 무시하도록 지정하지 않을 경우
fscanf
는 순차적으로 파일의 모든 숫자형 값과 문자를 읽습니다. 필드를 건너뛰려면 퍼센트 기호(%
) 뒤에 별표(*
)를 삽입하십시오. 예를 들어, 정수를 건너뛰려면%*d
를 지정하십시오.필드 너비
한 번에 읽을 최대 숫자 또는 텍스트 문자 개수를 지정하려면 퍼센트 문자 다음에 숫자를 추가해야 합니다. 예를 들어,
%10c
는 공백을 포함하여 한 번에 10개의 문자를 읽고,%4f
는 소수점을 포함하여 한 번에 최대 4개의 숫자를 읽습니다.리터럴 텍스트 무시
fscanf
는formatSpec
변환 지정자에 추가된 특정 텍스트를 무시합니다.예:
Level%u
는'Level1'
을1
로 읽습니다.예:
%uStep
은'2Step'
을2
로 읽습니다.
sizeA
— 출력 배열의 차원
Inf
(디폴트 값) | 정수 | 요소를 2개 가진 행 벡터
출력 배열 A
의 차원으로, 정수 Inf
또는 요소를 2개 가진 행 벡터로 지정됩니다.
sizeA 입력 형식 | 설명 |
---|---|
Inf | 파일 끝까지 읽습니다. 숫자형 데이터의 경우 출력값 A 는 열 벡터가 됩니다. 텍스트 데이터의 경우 A 는 문자형 벡터가 됩니다. |
| 최대 n 개의 숫자형 값 또는 문자형 필드를 읽습니다. 숫자형 데이터의 경우 출력값 A 는 열 벡터가 됩니다.텍스트 데이터의 경우 A 는 문자형 벡터가 됩니다. |
[ | 최대 개의 숫자형 값 또는 문자형 필드를 읽습니다. n 은 Inf 일 수 있지만 m 은 Inf일 수 없습니다. 출력값 A 는 열 순서대로 데이터가 채워진 m ×n 배열이 됩니다. |
출력 인수
A
— 파일 데이터
열 벡터 | 행렬 | 문자형 벡터 | 문자형 배열
파일 데이터로, 열 벡터, 행렬, 문자형 벡터 또는 문자형 배열로 반환됩니다. A
의 클래스와 크기는 다음과 같이 formatSpec
입력값에 따라 달라집니다.
formatSpec
에 숫자 지정자만 포함된 경우A
도 숫자가 됩니다.sizeA
인수를 지정한 경우A
는 지정된 크기의 행렬이 되고, 그렇지 않으면A
는 열 벡터가 됩니다. 입력값이sizeA
값보다 적으면fscanf
는A
를 0으로 채웁니다.formatSpec
에 64비트의 부호 있는 정수 지정자만 포함된 경우A
는int64
클래스가 됩니다.formatSpec
에 64비트의 부호 없는 정수 지정자만 포함된 경우A
는uint64
클래스가 됩니다.그렇지 않으면,
A
는double
형 클래스가 됩니다.
formatSpec
에 문자 또는 텍스트 지정자만 포함되어 있으면(%c
또는%s
)A
는 문자형 배열이 됩니다. 지정된sizeA
보다 입력값에 적은 수의 문자가 포함된 경우fscanf
는A
를char(0)
으로 채웁니다.formatSpec
에 숫자 지정자와 문자 지정자가 조합되어 있다면A
는double
형 클래스 숫자이고,fscanf
는 각 텍스트 문자를 그에 상응하는 숫자로 변환합니다. 이러한 변환은formatSpec
이 명시적으로 모든 숫자형 필드를 건너뛰도록 지정된 경우에도 발생합니다(예:formatSpec
이'%*d %s'
인 경우).MATLAB®에서 파일 데이터를
formatSpec
과 일치시킬 수 없을 경우A
는 숫자형 또는 문자형 배열이 될 수 있습니다.A
클래스는 처리를 중지하기 전에fscanf
가 읽는 값에 따라 달라집니다.
count
— 읽은 문자의 수
스칼라
읽은 문자의 수로, 스칼라 값으로 반환됩니다.
팁
읽기 함수
sscanf
와fscanf
에 대한 형식 지정자는 쓰기 함수sprintf
와fprintf
에 대한 형식과 다릅니다. 읽기 함수에서 정밀도 필드는 지원되지 않습니다. 너비 필드는 쓰기를 위한 최솟값은 지정하지만 읽기를 위한 최댓값은 지정하지 않습니다.
알고리즘
MATLAB은 파일과 연결된 인코딩 체계를 사용하여 문자를 읽습니다. fopen
함수를 사용하여 파일을 열 때 인코딩을 지정합니다.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
MEX 코드 생성 시에 코드 생성기는
fscanf
를 외재적 함수로 처리합니다. Use MATLAB Engine to Execute a Function Call in Generated Code (MATLAB Coder) 항목을 참조하십시오.입력 인수
formatSpec
은 상수여야 합니다.%s
및%[...]
변환 지정자는 지원되지 않습니다.MEX를 생성할 때는 동적 메모리 할당이 설정되어 있어야 합니다.
독립형 코드를 생성할 때 동적 메모리 할당을 해제한 경우, 입력 인수
sizeA
를 제공해야 하며 값은 상수여야 합니다.생성된 코드의 동작이 MATLAB과 다른 경우가 있습니다. 이 경우 생성된 코드의 동작은 C 언어의
fscanf
의 동작과 일치합니다. 다음은 몇 가지 예입니다.생성된 코드에서
fscanf
가 null 바이트를 읽어 들이는 경우, 반환되는 값이 잘릴 수 있습니다.정수 값
x
를intmax
가x
보다 작은 정수 형식으로 읽어 들이는 경우, MATLAB 출력값은intmax
에서 포화(Saturate)됩니다. 이러한 상황은 생성된 코드에서 오버플로를 발생시킵니다.fscanf
가 파일에서 읽은 후에 파일 포인터 위치가 MATLAB과 생성된 코드에서 다른 경우가 있습니다. 예를 들어, 파일myFile.txt
가 문자형 벡터'1+2I'
를 포함한다고 가정하겠습니다. 다음과 같은 명령을 실행합니다.fid = fopen('myFile.txt','r'); tmp = fscanf(fid, '%f')
tmp = 1 2
ftell
을 사용하여 파일myFile.txt
에서 위치 포인터의 현재 위치를 확인합니다.ftell(fid)
ans = 3
MATLAB에서는
fscanf
가 실행된 후 파일 포인터가 세 번째 문자'2'
뒤에 있습니다. 생성된 코드에서는fscanf
가 실행된 후 파일 포인터가 파일 끝(EOF) 마커에 있습니다.
스레드 기반 환경
MATLAB®의 backgroundPool
을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool
을 사용해 코드 실행 속도를 높일 수 있습니다.
이 함수는 스레드 기반 환경을 완전히 지원합니다. 자세한 내용은 스레드 기반 환경에서 MATLAB 함수 실행하기 항목을 참조하십시오.
버전 내역
R2006a 이전에 개발됨R2022b: 스레드 기반 환경에서 함수 사용
이 함수는 스레드 기반 환경을 지원합니다.
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)