이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

fprintf

텍스트 파일에 데이터 쓰기

설명

예제

fprintf(fileID,formatSpec,A1,...,An)formatSpec을 배열 A1,...An의 모든 요소에 열 순서로 적용하고 텍스트 파일에 데이터를 씁니다. fprintffopen 호출에 지정된 인코딩 체계를 사용합니다.

예제

fprintf(formatSpec,A1,...,An)은 데이터 형식을 지정하고 결과를 화면에 표시합니다.

예제

nbytes = fprintf(___)는 이전 구문의 입력 인수를 사용하여 fprintf가 쓰는 바이트 수를 반환합니다.

예제

모두 축소

여러 숫자형 값과 리터럴 텍스트를 화면에 출력합니다.

A1 = [9.9, 9900];
A2 = [8.8,  7.7 ; ...
      8800, 7700];
formatSpec = 'X is %4.2f meters or %8.3f mm\n';
fprintf(formatSpec,A1,A2)
X is 9.90 meters or 9900.000 mm
X is 8.80 meters or 8800.000 mm
X is 7.70 meters or 7700.000 mm

formatSpec 입력값의 %4.2f로 각 출력값 라인의 첫 번째 값이 소수점 뒤 2자리를 포함하여 4자리 필드 너비를 가지는 부동소수점 숫자를 지정할 수 있습니다. formatSpec 입력값의 %8.3f로 각 출력값 라인의 두 번째 값이 소수점 뒤 3자리를 포함하여 8자리 필드 너비를 가지는 부동소수점 숫자를 지정할 수 있습니다. \n은 새 줄을 시작하는 제어 문자입니다.

소수부를 포함한 배정밀도 값을 정수 값으로 명시적으로 변환합니다.

a = [1.02 3.04 5.06];
fprintf('%d\n',round(a));
1
3
5

formatSpec 입력값의 %d는 벡터 round(a)에 포함된 각각의 값을 부호 있는 정수로 출력합니다. \n은 새 줄을 시작하는 제어 문자입니다.

짧은 지수 함수 테이블을 exp.txt라는 텍스트 파일에 씁니다.

x = 0:.1:1;
A = [x; exp(x)];

fileID = fopen('exp.txt','w');
fprintf(fileID,'%6s %12s\n','x','exp(x)');
fprintf(fileID,'%6.2f %12.8f\n',A);
fclose(fileID);

fprintf에 대한 첫 번째 호출에서는 제목 텍스트 xexp(x)를 출력하고 두 번째 호출에서는 변수 A의 값을 출력합니다.

Microsoft® 메모장을 사용하여 파일을 읽으려는 경우 새 줄로 이동하려면 '\n' 대신 '\r\n'을 사용하십시오. 예를 들어, fprintf 호출을 다음으로 바꿉니다.

fprintf(fileID,'%6s %12s\r\n','x','exp(x)');
fprintf(fileID,'%6.2f %12.8f\r\n',A);

MATLAB® 가져오기 함수, 모든 UNIX® 응용 프로그램, Microsoft Word, 워드패드는 '\n'을 새 줄 표시자로 인식합니다.

type 명령을 사용하여 파일의 내용을 확인합니다.

type exp.txt
     x       exp(x)
  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

파일에 데이터를 쓰고, 쓴 바이트 수를 반환합니다.

데이터 배열 A를 파일에 쓰고, fprintf가 쓰기 작업한 바이트 수를 가져옵니다.

A = magic(4);

fileID = fopen('myfile.txt','w');
nbytes = fprintf(fileID,'%5d %5d %5d %5d\n',A)
nbytes = 96

fprintf 함수는 파일에 96바이트를 썼습니다.

파일을 닫습니다.

fclose(fileID);

type 명령을 사용하여 파일의 내용을 확인합니다.

type('myfile.txt')
   16     5     9     4
    2    11     7    14
    3    10     6    15
   13     8    12     1

화면에 하이퍼링크(MathWorks 웹 사이트)를 표시합니다.

url = 'https://www.mathworks.com';
sitename = 'The MathWorks Web Site';

fprintf('<a href = "%s">%s</a>\n',url,sitename)

formatSpec 입력값의 %s는 변수 urlsitename의 값이 텍스트로 출력됨을 나타냅니다.

입력 인수

모두 축소

파일 ID로, 다음 중 하나로 지정됩니다.

  • fopen에서 가져온 파일 ID

  • 1 - 표준 출력(화면)

  • 2 - 표준 오류

데이터형: double

출력 필드의 형식으로, 형식 지정 연산자를 사용하여 지정됩니다. formatSpec은 일반 텍스트와 특수 문자를 포함할 수도 있습니다.

formatSpec은 작은따옴표로 묶인 문자형 벡터이거나, R2016b부터는 string형 스칼라일 수 있습니다.

형식 지정 연산자

형식 지정 연산자는 퍼센트 기호 %로 시작하고 변환 문자로 끝납니다. 변환 문자는 반드시 필요합니다. %와 변환 문자 사이에는 필요에 따라 식별자, 플래그, 필드 너비, 정밀도 및 하위유형 연산자를 지정할 수 있습니다. (연산자 사이에는 공백을 사용할 수 없지만 여기서는 읽기 편하도록 표시되어 있습니다.)

변환 문자

다음 표에는 숫자형 데이터와 문자 데이터의 형식을 텍스트로 지정하는 변환 문자가 나와 있습니다.

값 유형변환세부 정보

정수, 부호 있음

%d 또는 %i

10진법

정수, 부호 없음

%u

10진법

%o

8진법(8진수)

%x

16진법(16진수), 소문자 af

%X

%x와 동일, 대문자 AF

부동소수점 숫자

%f

고정소수점 표기법(정밀도 연산자를 사용하여 소수점 이하 자릿수를 지정합니다.)

%e

지수 표기법(예: 3.141593e+00)(정밀도 연산자를 사용하여 소수점 이하 자릿수를 지정합니다.)

%E

%e와 동일하되 대문자임(예: 3.141593E+00)(정밀도 연산자를 사용하여 소수점 이하 자릿수를 지정합니다.)

%g

%e 또는 %f 중 더 간단한 형식(후행 0을 포함하지 않음)(정밀도 연산자를 사용하여 소수점 이하 유효 자릿수를 지정합니다.)

%G

%E 또는 %f 중 더 간단한 형식(후행 0을 포함하지 않음)(정밀도 연산자를 사용하여 소수점 이하 유효 자릿수를 지정합니다.)

문자 또는 string형

%c

단일 문자

%s

문자형 벡터 또는 string형 배열. 출력 텍스트의 유형은 formatSpec의 유형과 같습니다.

선택적 연산자

식별자, 플래그, 필드 너비, 정밀도, 하위유형 등의 선택적 연산자는 출력 텍스트의 형식을 추가로 정의합니다.

  • 식별자

    함수 입력 인수를 처리하는 순서입니다. n$ 구문을 사용합니다. 여기서 n은 함수 호출에서 다른 입력 인수의 위치를 나타냅니다.

    예제: ('%3$s %2$s %1$s %2$s','A','B','C')는 입력 인수 'A', 'B', 'C'C B A B로 출력합니다.

    참고: 입력 인수가 배열인 경우, 식별자를 사용해 그 입력 인수의 특정한 배열 요소를 지정할 수 없습니다.

  • 플래그

    '–'

    왼쪽 맞춤.
    예: %-5.2f
    예: %-10s

    '+'

    모든 숫자형 값에 대해 항상 부호 문자(+ 또는 –)를 출력합니다.
    예: %+5.2f
    텍스트 오른쪽 맞춤.
    예: %+10s

    ' '

    값 앞에 공백을 삽입합니다.
    예: % 5.2f

    '0'

    값 앞의 필드 너비를 0으로 채웁니다.
    예: %05.2f

    '#'

    선택한 수치 변환을 수정합니다.

    • %o, %x 또는 %X의 경우 0, 0x 또는 0X 접두사를 출력합니다.

    • %f, %e 또는 %E의 경우 정밀도가 0이어도 소수점을 출력합니다.

    • %g 또는 %G의 경우 후행 0 또는 소수점을 제거하지 않습니다.

    예: %#5.0f

  • 필드 너비

    출력할 최소 문자 수입니다. 필드 너비 연산자는 숫자이거나 입력 인수를 가리키는 별표(*)일 수 있습니다.

    *를 필드 너비 연산자로 지정할 경우, 다른 입력 인수가 출력할 너비와 값을 모두 제공해야 합니다. 너비와 값은 인수 쌍이거나 숫자형 배열 내의 쌍일 수 있습니다. *를 필드 너비 연산자로 사용하면 각 값을 다른 너비로 출력할 수 있습니다.

    예: 입력 인수 ('%12d',intmax)('%*d',12,intmax)와 동일합니다.

    예: 입력 인수 ('%*d',[2 10 5 100])10에 두 개의 공백을 할당하고 100에 다섯 개의 공백을 할당하여 '10 100'을 반환합니다. 다른 방법으로, ('%*d',2,10,5,100)과 같이 필드 너비와 값을 여러 개의 인수로 지정할 수도 있습니다.

    플래그로 지정되지 않은 경우 이 함수는 값 앞에 공백을 사용하여 필드 너비를 채웁니다.

  • 정밀도

    %f, %e 또는 %E의 경우

    소수점 오른쪽의 자릿수입니다.
    예: '%.4f'pi'3.1416'으로 출력함

    %g 또는 %G의 경우

    유효 자릿수입니다.
    예: '%.4g'pi'3.142'로 출력함

    정밀도 연산자는 숫자이거나 인수를 가리키는 별표(*)일 수 있습니다.

    *를 필드 정밀도 연산자로 지정할 경우, 다른 입력 인수가 출력할 정밀도와 값을 모두 제공해야 합니다. 정밀도와 값은 인수 쌍이거나 숫자형 배열 내의 쌍일 수 있습니다. *를 정밀도 연산자로 사용하면 각 값을 다른 정밀도로 출력할 수 있습니다.

    *.*를 필드 너비 및 정밀도 연산자로 지정할 경우, 세 개(필드 너비, 정밀도, 값)를 한 단위로 구성해 지정해야 합니다.

    예: 입력 인수 ('%.4f',pi)('%.*f',4,pi)와 동일합니다.

    예: 입력 인수 ('%6.4f',pi)('%.*f',6,4,pi)와 동일합니다.

    예: 입력 인수 ('%*.*f',6,4,pi,9,6,exp(1))'3.1416 2.718282'를 반환합니다. 여기서, 96exp(1)의 출력값의 필드 너비와 정밀도로 사용되었습니다.

    참고

    부동소수점 값에 대한 입력 숫자 데이터형의 정밀도를 초과하는 정밀도 연산자를 지정하는 경우 결과는 지정한 정밀도에 대한 입력값과 일치하지 않을 수 있습니다. 결과는 사용자의 컴퓨터 하드웨어와 운영 체제에 따라 다릅니다.

  • 하위유형

    하위유형 연산자를 사용하여 부동소수점 값을 8진수 값, 10진수 값, 16진수 값 중 하나로 출력할 수 있습니다. 하위유형 연산자는 변환 문자 바로 앞에 옵니다. 다음 표에는 하위유형을 사용할 수 있는 변환이 나와 있습니다.

    입력값 유형

    하위유형 및 변환 문자

    출력값 유형

    부동소수점 숫자

    %bx 또는 %bX
    %bo
    %bu

    배정밀도 16진수, 8진수 또는 십진수 값
    예: %bxpi400921fb54442d18로 출력함

    %tx 또는 %tX
    %to
    %tu

    단정밀도 16진수, 8진수 또는 십진수 값
    예: %txpi40490fdb로 출력함

형식 지정 연산자 앞이나 뒤의 텍스트

formatSpec은 퍼센트 기호 % 앞이나 변환 문자 뒤에 텍스트를 추가로 포함할 수도 있습니다. 가능한 텍스트는 다음과 같습니다.

  • 출력할 일반 텍스트.

  • 일반 텍스트로 입력할 수 없는 특수 문자. 다음 표에는 formatSpec에서 특수 문자를 나타내는 방식이 나와 있습니다.

    특수 문자

    표현

    작은따옴표

    ''

    퍼센트 문자

    %%

    백슬래시

    \\

    경보

    \a

    백스페이스

    \b

    폼 피드(FF)

    \f

    새 줄(Newline)

    \n

    캐리지 리턴

    \r

    가로 탭

    \t

    세로 탭

    \v

    그 Unicode® 숫자형 값을 16진수 N으로 나타낼 수 있는 문자

    \xN

    예: sprintf('\x5A')'Z'를 반환합니다.

    그 Unicode 숫자형 값을 8진수 N으로 나타낼 수 있는 문자

    \N

    예: sprintf('\132')'Z'를 반환합니다.

형식 지정 연산자를 사용한 변환의 중요 동작

  • 수치 변환은 복소수의 실수부만 출력합니다.

  • 숫자형 값에 대한 텍스트 변환과 같이 데이터에 맞지 않는 변환을 지정하는 경우 MATLAB은 지정된 변환을 무시하고 %e를 사용합니다.

    예: '%s'pi3.141593e+00으로 변환합니다.

  • 텍스트 변환(%c%s)을 정수 값에 적용하는 경우 MATLAB은 유효한 문자 코드에 대응하는 값을 문자로 변환합니다.

    예: '%s'[65 66 67]ABC로 변환합니다.

데이터형: char | string

숫자형 또는 문자형 배열로, 스칼라, 벡터, 행렬 또는 다차원 배열로 지정됩니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char

출력 인수

모두 축소

fprintf가 쓰는 바이트 수로, 스칼라로 반환됩니다. 파일에 쓸 때에는 nbytes가 문자 인코딩에 따라 결정됩니다. 데이터를 화면에 출력하는 경우 nbytes는 화면에 표시되는 문자 개수를 의미하게 됩니다.

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

참고 문헌

[1] Kernighan, B. W., and D. M. Ritchie, The C Programming Language, Second Edition, Prentice-Hall, Inc., 1988.

[2] ANSI specification X3.159-1989: “Programming Language C,” ANSI, 1430 Broadway, New York, NY 10018.

확장 기능

R2006a 이전에 개발됨