Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

로우 레벨 I/O를 사용하여 텍스트 데이터 파일로 내보내기

fprintf를 사용하여 텍스트 파일에 쓰기

이 예제에서는 로우 레벨 fprintf 함수를 사용하여, 숫자형 데이터와 문자 데이터의 조합이면서 사각형이 아닌 파일을 포함하는 텍스트 파일을 만드는 방법을 보여줍니다.

fprintf는 ANSI® 표준 C 라이브러리에 있는 같은 이름의 함수를 기반으로 합니다. 그러나 MATLAB®에서 사용하는 fprintf는 벡터화된 버전이며, 배열에서 데이터를 쓸 때 최소한의 제어 루프를 사용합니다.

파일 열기

두 개 행으로 구성된 샘플 행렬 y를 만듭니다.

x = 0:0.1:1;
y = [x; exp(x)];

fopen을 사용하여 쓰기 위한 파일을 열고 파일 ID인 fileID를 받습니다. 기본적으로, fopen은 읽기 전용 액세스를 위해 파일을 열기 때문에, 'w' 또는 'a'와 같은 쓰기(Write) 또는 추가(Append) 권한을 지정해야 합니다.

fileID = fopen('exptable.txt','w');

파일에 쓰기

fprintf 함수를 사용하여 제목을 쓴 후 빈 라인을 표시합니다. 파일에서 새 라인으로 이동하려면 '\n'을 사용하십시오.

fprintf(fileID, 'Exponential Function\n\n');

참고: Microsoft® 메모장을 포함한 일부 Windows® 텍스트 편집기에서는 새 줄 문자 시퀀스로 '\n' 대신 '\r\n'을 사용해야 합니다. 그러나 Microsoft Word나 워드패드에서는 '\n'으로 충분합니다.

y의 값을 열 순서대로 파일에 쓰고, 두 값이 파일의 각 행에 나타나도록 합니다. fprintf는 사용자의 지정에 따라 배열 입력값의 숫자나 문자를 텍스트로 변환합니다. 부동소수점 숫자를 출력하려면 '%f'를 지정하십시오.

fprintf(fileID,'%f %f\n',y);

흔히 사용되는 다른 변환 지정자로는 정수에 사용되는 '%d'와 문자에 사용되는 '%s'가 있습니다. fprintf는 입력 배열의 모든 값에 열 순서대로 돌아가며 변환 정보를 다시 적용합니다.

쓰기를 마치면 fclose를 사용하여 파일을 닫습니다.

fclose(fileID);

type 함수를 사용하여 파일의 내용을 확인합니다.

type exptable.txt
Exponential Function

0.000000 1.000000
0.100000 1.105171
0.200000 1.221403
0.300000 1.349859
0.400000 1.491825
0.500000 1.648721
0.600000 1.822119
0.700000 2.013753
0.800000 2.225541
0.900000 2.459603
1.000000 2.718282

추가 형식 지정 옵션

선택적으로, fprintf 호출 구문에 추가 정보를 포함시켜 필드 너비, 정밀도, 출력값의 순서 등을 설명할 수 있습니다. 예를 들어, 지수 테이블의 필드 너비와 소수점 오른쪽 자릿수를 지정합니다.

fileID = fopen('exptable_new.txt', 'w');

fprintf(fileID,'Exponential Function\n\n');
fprintf(fileID,'%6.2f %12.8f\n', y);

fclose(fileID);

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

type exptable_new.txt
Exponential Function

  0.00   1.00000000
  0.10   1.10517092
  0.20   1.22140276
  0.30   1.34985881
  0.40   1.49182470
  0.50   1.64872127
  0.60   1.82211880
  0.70   2.01375271
  0.80   2.22554093
  0.90   2.45960311
  1.00   2.71828183

기존 텍스트 파일에 추가하기 또는 기존 텍스트 파일 덮어쓰기

이 예제에서는 기존 텍스트 파일에 값을 추가하거나, 전체 파일을 다시 쓰거나, 파일의 일부만 덮어쓰는 방법을 보여줍니다.

기본적으로, fopen은 읽기 권한으로 파일을 엽니다. 파일 액세스의 유형을 변경하려면 fopen 호출 시 권한 지정자를 사용하십시오. 가능한 권한 지정자에는 다음이 포함됩니다.

  • 'r': 읽기

  • 'w': 파일의 기존 내용을 무시하면서 쓰기

  • 'a': 기존 파일의 끝에 추가

읽기와 쓰기용으로, 또는 읽기와 추가용으로 파일을 열려면 'w+''a+'처럼, 권한에 플러스 기호를 붙이십시오. 읽기와 쓰기용으로 파일을 열 경우에는 읽기 작업과 쓰기 작업 사이에 fseek 또는 frewind를 호출해야 합니다.

기존 텍스트 파일에 추가하기

changing.txt라는 파일을 만듭니다.

fileID = fopen('changing.txt','w');
fmt = '%5d %5d %5d %5d\n';
fprintf(fileID,fmt, magic(4));
fclose(fileID);

changing.txt의 현재 내용은 다음과 같습니다.

16 5 9 4

2 11 7 14

3 10 6 15

13 8 12 1

추가 권한으로 파일을 엽니다.

fileID = fopen('changing.txt','a');

파일 끝에 값 [55 55 55 55]를 씁니다.

fprintf(fileID,fmt,[55 55 55 55]);

파일을 닫습니다.

fclose(fileID);

type 함수를 사용하여 파일의 내용을 확인합니다.

type changing.txt
   16     5     9     4
    2    11     7    14
    3    10     6    15
   13     8    12     1
   55    55    55    55

전체 텍스트 파일 덮어쓰기

텍스트 파일은 새 줄(Newline) 문자를 포함하여 연속적인 문자 집합으로 구성됩니다. 파일의 한 라인을 개수가 다른 문자로 바꾸려면 파일에서 변경하려는 라인과 이후의 모든 라인을 다시 써야 합니다.

changing.txt의 첫 번째 라인을 더 긴 설명 텍스트로 바꿉니다. 변경 내용이 첫 번째 라인에 적용되므로, 전체 파일을 다시 씁니다.

replaceLine = 1;
numLines = 5;
newText = 'This file originally contained a magic square';

fileID = fopen('changing.txt','r');
mydata = cell(1, numLines);
for k = 1:numLines
   mydata{k} = fgetl(fileID);
end
fclose(fileID);

mydata{replaceLine} = newText;

fileID = fopen('changing.txt','w');
fprintf(fileID,'%s\n',mydata{:});
fclose(fileID);

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

type changing.txt
This file originally contained a magic square
    2    11     7    14
    3    10     6    15
   13     8    12     1
   55    55    55    55

텍스트 파일의 일부 덮어쓰기

changing.txt의 세 번째 라인을 [33 33 33 33]으로 바꿉니다. 텍스트 파일의 일부를 정확히 같은 개수의 문자로 바꾸려는 경우에는 파일의 다른 라인을 다시 쓸 필요가 없습니다.

replaceLine = 3;
myformat = '%5d %5d %5d %5d\n';
newData = [33 33 33 33];

파일 위치 마커를 올바른 라인으로 이동합니다.

fileID = fopen('changing.txt','r+');
for k=1:(replaceLine-1);
   fgetl(fileID);
end

읽기 작업과 쓰기 작업 사이에 fseek를 호출합니다.

fseek(fileID,0,'cof');

fprintf(fileID, myformat, newData);
fclose(fileID);

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

type changing.txt
This file originally contained a magic square
    2    11     7    14
   33    33    33    33
   13     8    12     1
   55    55    55    55

다른 문자 인코딩으로 파일 열기

인코딩 체계는 일본어나 유럽어의 자모와 같은 특정 자모에 필요한 문자를 지원합니다. 일반 인코딩 체계에는 US-ASCII 또는 UTF-8이 포함됩니다.

읽기를 위해 파일을 열 때 인코딩 체계를 지정하지 않으면 fopen은 자동 문자 집합 감지를 사용하여 인코딩을 확인합니다. 쓰기를 위해 파일을 열 때 인코딩 체계를 지정하지 않으면 fopen은 데이터 손실이나 손상 없이 모든 플랫폼과 로캘 간 상호 운용성을 제공하기 위해 기본적으로 UTF-8을 사용하도록 설정됩니다.

디폴트 값을 확인하려면 파일을 열고 다음 구문을 사용하여 fopen을 다시 호출하십시오.

[filename, permission, machineformat, encoding] = fopen(fid);

파일을 열 때 인코딩 체계를 지정하면 fscanf, fprintf, fgetl, fgets, fread, fwrite와 같은 함수는 해당 체계를 적용합니다.

지원되는 인코딩 체계의 전체 목록과 인코딩을 지정하기 위한 구문은 fopen 함수 도움말 페이지를 참조하십시오.

참고 항목

| |

관련 항목