Perl-형식
Perl은 보고서를 출력하기 위해 '형식'이라는 쓰기 템플릿을 사용합니다. Perl의 형식 기능을 사용하려면 먼저 형식을 정의한 다음 해당 형식을 사용하여 형식화 된 데이터를 쓸 수 있습니다.
형식 정의
다음은 Perl 형식을 정의하는 구문입니다.
format FormatName =
fieldline
value_one, value_two, value_three
fieldline
value_one, value_two
.
여기 FormatName형식의 이름을 나타냅니다. 그만큼fieldline데이터의 형식을 지정해야합니다. 값 라인은 필드 라인에 입력 될 값을 나타냅니다. 단일 마침표로 형식을 종료합니다.
다음 fieldline텍스트 또는 필드 홀더를 포함 할 수 있습니다. 필드 홀더는 나중에 배치 될 데이터를위한 공간을 보유합니다. 필드 홀더의 형식은-
@<<<<
이 필드 홀더는 필드 공간이 5 인 왼쪽 정렬됩니다. 필드의 공백 수를 알기 위해 @ 기호와 <기호를 계산해야합니다. 기타 필드 보유자는 다음과 같습니다.
@>>>> right-justified
@|||| centered
@####.## numeric field holder
@* multiline field holder
예제 형식은 다음과 같습니다.
format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<<
$name $age
@#####.##
$salary
===================================
.
이 예에서 $ name은 22 자 공백 내에서 왼쪽 맞춤으로 작성되고 해당 연령 이후에는 두 개의 공백으로 작성됩니다.
형식 사용
이 형식 선언을 호출하기 위해 우리는 write 키워드 −
write EMPLOYEE;
문제는 형식 이름이 일반적으로 열린 파일 핸들의 이름이고 write 문이 출력을이 파일 핸들로 보낸다는 것입니다. 데이터를 STDOUT으로 보내려면 EMPLOYEE를 STDOUT 파일 핸들과 연결해야합니다. 그러나 먼저 select () 함수를 사용하여 STDOUT이 선택한 파일 핸들인지 확인해야합니다.
select(STDOUT);
그런 다음 다음과 같이 특수 변수 $ ~ 또는 $ FORMAT_NAME을 사용하여 새 형식 이름을 STDOUT으로 설정하여 EMPLOYEE를 STDOUT과 연결합니다.
$~ = "EMPLOYEE";
이제 write ()를 수행하면 데이터가 STDOUT으로 전송됩니다. 기억하십시오 : STDOUT 대신 다른 파일 핸들에 보고서를 작성하려는 경우 select () 함수를 사용하여 해당 파일 핸들을 선택할 수 있으며 나머지 논리는 동일하게 유지됩니다.
다음 예를 들어 보겠습니다. 여기에 사용법을 보여주기위한 하드 코딩 된 값이 있습니다. 실제 사용에서는 실제 보고서를 생성하기 위해 파일 또는 데이터베이스에서 값을 읽고 최종 보고서를 파일에 다시 작성해야 할 수 있습니다.
#!/usr/bin/perl
format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<<
$name $age
@#####.##
$salary
===================================
.
select(STDOUT);
$~ = EMPLOYEE;
@n = ("Ali", "Raza", "Jaffer");
@a = (20,30, 40);
@s = (2000.00, 2500.00, 4000.000);
$i = 0;
foreach (@n) {
$name = $_;
$age = $a[$i];
$salary = $s[$i++];
write;
}
실행되면 다음 결과가 생성됩니다.
===================================
Ali 20
2000.00
===================================
===================================
Raza 30
2500.00
===================================
===================================
Jaffer 40
4000.00
===================================
보고서 헤더 정의
모든 것이 괜찮아 보입니다. 그러나 보고서에 헤더를 추가하고 싶을 것입니다. 이 헤더는 각 페이지의 상단에 인쇄됩니다. 이렇게하는 것은 매우 간단합니다. 템플릿을 정의하는 것 외에도 헤더를 정의하고 $ ^ 또는 $ FORMAT_TOP_NAME 변수에 할당해야합니다.
#!/usr/bin/perl
format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<<
$name $age
@#####.##
$salary
===================================
.
format EMPLOYEE_TOP =
===================================
Name Age
===================================
.
select(STDOUT);
$~ = EMPLOYEE;
$^ = EMPLOYEE_TOP;
@n = ("Ali", "Raza", "Jaffer");
@a = (20,30, 40);
@s = (2000.00, 2500.00, 4000.000);
$i = 0;
foreach (@n) {
$name = $_;
$age = $a[$i];
$salary = $s[$i++];
write;
}
이제 보고서는 다음과 같습니다.
===================================
Name Age
===================================
===================================
Ali 20
2000.00
===================================
===================================
Raza 30
2500.00
===================================
===================================
Jaffer 40
4000.00
===================================
페이지 매김 정의
보고서가 두 페이지 이상을 차지하는 경우에는 어떻게합니까? 그에 대한 해결책이 있습니다.$% 또는 다음과 같이 헤더와 함께 사용할 수있는 $ FORMAT_PAGE_NUMBER-
format EMPLOYEE_TOP =
===================================
Name Age Page @<
$%
===================================
.
이제 출력은 다음과 같습니다.
===================================
Name Age Page 1
===================================
===================================
Ali 20
2000.00
===================================
===================================
Raza 30
2500.00
===================================
===================================
Jaffer 40
4000.00
===================================
페이지의 줄 수
특수 변수를 사용하여 페이지 당 줄 수를 설정할 수 있습니다. $= (또는 $ FORMAT_LINES_PER_PAGE), 기본적으로 $ =는 60입니다.
보고서 바닥 글 정의
$ ^ 또는 $ FORMAT_TOP_NAME에 현재 헤더 형식의 이름이 포함되어 있지만 바닥 글에 대해 동일한 작업을 자동으로 수행하는 해당 메커니즘이 없습니다. 고정 크기 바닥 글이있는 경우 각 write () 전에 변수 $-또는 $ FORMAT_LINES_LEFT를 확인하여 바닥 글을 가져오고 필요한 경우 다음과 같이 정의 된 다른 형식을 사용하여 바닥 글을 직접 인쇄 할 수 있습니다.
format EMPLOYEE_BOTTOM =
End of Page @<
$%
.
형식화와 관련된 전체 변수 세트는 Perl 특수 변수 섹션을 참조하십시오 .