숫자를 문자열로 변환

직접 인쇄하지 않고 임의 개수의 변수를 연결해 완전한 문자열로 합치고 싶은 경우, 파스칼에는 주요 구현 방식이 세 가지 제공됩니다.

전용 변환 함수로 문자열 연결

***ToStr + 문자열 + 연결 연산

전용 변환 함수로 단일 자료형을 따로 변환한 뒤 + 연산자로 문자열을 합칩니다.

uses SysUtils;

var
  MyInt: Integer;
  MyStr: string;
begin
  MyInt := 123;
  MyStr := 'My int number is ' + IntToStr(MyInt) + ', and the value of Pi is ' + FloatToStr(Pi);
end;Code language: JavaScript (javascript)

자주 쓰는 보조 함수 (모든 함수는 SysUtils 유닛에 포함):

  • 숫자 → 문자열: IntToStr, FloatToStr, FormatFloat (부동 소수점 형식 커스터마이징)
  • 문자열 → 숫자 복원: StrToInt, StrToIntDef, StrToFloat

전체 실행 가능 예제

{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}

uses SysUtils;

var
  MyInt: Integer;
  MyStr: string;
begin
  MyInt := 180;
  MyStr := 'My int number is ' + IntToStr(MyInt) + ', and the value of Pi is ' + FloatToStr(Pi);
  WriteLn(MyStr);
end.Code language: PHP (php)
장점
  1. 유연성이 매우 높고 정수, 부동 소수점, 날짜 등 대부분의 자료형을 지원하는 세분화된 함수가 준비되어 있음;
  2. 역변환 함수가 완비되어 사용자 입력 문자열을 파싱할 때 편리함.
단점

변수가 많아지면 여러 겹의 + 연결 구문이 길어져 가독성이 떨어집니다.


서식 함수 Format

Format (C언어의 sprintf와 유사한 방식)

기본 문법

uses SysUtils;

var
  Res: string;
  MyInt: Integer;
  MyFloat: Double;
  MyString: string;
begin
  Res := Format('%d %.4f %s', [MyInt, MyFloat, MyString]);
end;Code language: JavaScript (javascript)
  • %d : 정수 자리 표시자; %.4f : 부동 소수점, 소수점 4자리 유지; %s : 문자열 자리 표시자
  • 두 번째 매개변수는상수 배열로 순서대로 자리 표시자에 값을 채움

전체 예제

{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}

uses SysUtils;

var
  Res: string;
  MyInt: Integer;
  MyFloat: Double;
  MyString: string;
begin

  // set value
  MyInt := 169;
  MyFloat := 0.618;
  MyString := 'foxdevelop.com';

  Res := Format('%d %.4f %s', [MyInt, MyFloat, MyString]);
  WriteLn(Res);
end.Code language: PHP (php)

장점

  1. 서식 템플릿과 데이터가 분리되어 구조가 깔끔함; 소프트웨어 다국어 지원 시 템플릿 문자열만 수정하면 되고 변수 목록은 변경할 필요 없음;
  2. 컴파일러의 숨겨진 특수 로직이 없음. array of const 가변 매개변수를 선언한 사용자 정의 함수로 이 서식 로직을 재사용할 수 있으며 매개변수를 Format에 전달해 처리 위임 가능.

단점

컴파일 시 자리 표시자와 변수 자료형의 일치 여부를 검사하지 않으며, 자료형 불일치 시 런타임에 EConvertError 변환 예외가 발생합니다 (메모리 접근 크래시는 발생하지 않음).


WriteStr

Write 출력 결과를 문자열 변수에 저장

용도: Write/WriteLn와 거의 동일한 동작을 하지만 콘솔에 인쇄하지 않고 결과를 첫 번째 대상 문자열 변수에 저장합니다:

var S: string;
begin
  WriteStr(S, 'Pi value: ', Pi:1:4);
end;Code language: JavaScript (javascript)

전체 예제

{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}

uses SysUtils;

var S: string;
begin
  WriteStr(S, 'Pi value: ', Pi:1:4);
  WriteLn(S);
end.Code language: PHP (php)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다