Latest web development tutorials

Perlのフォーマットされた出力

Perlは非常に強力なテキスト処理言語データです。

Perlは、テンプレートのフォーマットを定義し、指定されたテンプレートによって、ライトデータ出力を使用するために使用することができます。

次のようにPerlのフォーマット定義された構文は次のとおりです。

format FormatName =
fieldline
value_one, value_two, value_three
fieldline
value_one, value_two
.

分析パラメータ:

  • FORMATNAME:フォーマット名。
  • fieldline:行形式、@のような出力ラインを定義するために使用されるフォーマット、^、<、>、 |などの文字。
  • value_one、value_two ......:前列形式に値を挿入するために使用されるデータの行、すべてのperlの変数。
  • :エンドシンボル。

以下は、単純なインスタンスがフォーマットされています。

#!/usr/bin/perl

$text = "google w3big taobao";
format STDOUT =
first: ^<<<<<  # 左边对齐,字符长度为6
    $text
second: ^<<<<< # 左边对齐,字符长度为6
    $text
third: ^<<<< # 左边对齐,字符长度为5,taobao 最后一个 o 被截断
    $text  
.
write

上の例の出力は実行します。

first: google
second: w3big
third: taoba

フォーマット行(行グラフィカル)構文

  • 先頭の@または^フォーマット線は、これらの線は、変数置換の任意のフォームを受けません。
  • @フィールド(配列マーカー@と混同されるべきではない)通常のフィールドです。
  • 後に@、<、>、^ |変数が定義された長さを超える場合は、長さはフィールドの長さを決定し、それが切り捨てられます。
  • <、>、|また、中心を揃え、左揃え、右揃え、表します。
  • ^複数行のテキストブロック充填のためのフィールド。

フォーマット範囲

フォーマットの範囲、次のように

フォーマット 範囲意味
@ <<< 左出力
@ >>> 右寄せ出力
@ ||| 出力を合わせます
@ ##。## 固定精度数
@ * 複数行のテキスト

@文字ではなく、テキストの書式を使用した場合、各行の最初の文字は、充填文字の範囲です。

上記の表では、複数行の@ *範囲、広視野に加えて、たとえば、を含む、文字@で指定した文字数に等しいです:

@###.##

これは、小数点の前の4、小数点以下2後、ワイド7文字を表します。

例としては、次のとおりです:

#!/usr/bin/perl

format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<< 
$name $age
@#####.##
$salary
===================================
.

select(STDOUT);
$~ = EMPLOYEE;

@n = ("Ali", "w3big", "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
===================================
===================================
w3big                  30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

可変長形式

  • $〜($ FORMAT_NAME):フォーマット名$ ^($ FORMAT_TOP_NAME):現在の形式名は、ヘッダに格納されています
  • $%($ FORMAT_PAGE_NUMBER):現在の出力ページ数
  • $ =($ FORMAT_LINES_PER_PAGE):ページの行数
  • $ |($ FORMAT_AUTOFLUSH):自動的に出力バッファメモリをフラッシュするかどうか
  • $ ^ L($ FORMAT_FORMFEED):出力文字列が格納され前に必要なすべてのページ(最初のページを除く)ヘッダ

以下は$インスタンスを使用するのは簡単です - フォーマット:

#!/usr/bin/perl

$~ = "MYFORMAT"; # 指定缺省文件变量下所使用的格式
write;           # 输出 $~ 所指定的格式

format MYFORMAT = # 定义格式 MYFORMAT 
=================================
      Text # 本教程
=================================
.
write; 

上の例の出力は実行します。

=================================
      Text # 本教程
=================================
=================================
      Text # 本教程
=================================

あなたはケースの下に$〜を指定しない場合は、出力形式は、STDOUTと呼ばれます:

#!/usr/bin/perl

write;         # 不指定$~的情况下会寻找名为STDOUT的格式

format STDOUT =
~用~号指定的文字不会被输出
----------------
  STDOUT格式
----------------
.

上の例の出力は実行します。

----------------
  STDOUT格式
----------------

我々は$ ^や$ FORMAT_TOP_NAME変数を示すために、レポートヘッダー情報を追加し、次の例:

#!/usr/bin/perl

format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<< 
$name $age
@#####.##
$salary
===================================
.

format EMPLOYEE_TOP =
===================================
Name                    Age
===================================
.

select(STDOUT);
$~ = EMPLOYEE;
$^ = EMPLOYEE_TOP;

@n = ("Ali", "w3big", "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
===================================
===================================
w3big                  30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

また、レポートの$%または$ FORMAT_PAGE_NUMBERセットのページネーションを使用することができます。

#!/usr/bin/perl

format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<< 
$name $age
@#####.##
$salary
===================================
.

# 添加分页 $% 
format EMPLOYEE_TOP =
===================================
Name                    Age Page @<
                                 $%
=================================== 
.

select(STDOUT);
$~ = EMPLOYEE;
$^ = EMPLOYEE_TOP;

@n = ("Ali", "w3big", "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 Page 1
===================================
===================================
Ali                     20
  2000.00
===================================
===================================
w3big                  30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

他のファイルへの出力

デフォルトでは、関数は標準出力ファイルSTDOUTに結果を書き込みます、我々はまた、他のファイルに結果を出力することができます。 最も簡単な方法は、次のような書き込みをするためのパラメータとして変数をファイルすることです:

write(MYFILE);

にMYFILE MYFILEと呼ばれるファイルにデフォルトの印刷形式の出力を使用するように上記のコードを記述します。

これは$〜変数で使用する印刷フォーマットを変更するために使用することができません。 システム変数$〜変数は、デフォルトのファイルのために、私たちは書き込みを呼び出した後、〜の変更をデフォルトのファイル変数$を変更することができます動作します。

#!/usr/bin/perl

if (open(MYFILE, ">tmp")) {
$~ = "MYFORMAT";
write MYFILE; # 含文件变量的输出,此时会打印与变量同名的格式,即MYFILE。$~里指定的值被忽略。

format MYFILE = # 与文件变量同名 
=================================
      输入到文件中
=================================
.
close MYFILE;
}

次のように実装を成功した後、我々は、tmpファイルの内容を表示することができます。

$ cat tmp 
=================================
      输入到文件中
=================================

私たちは、プログラムの他の部分に影響を与えることなく、自分のアイデアの出力に応じて、サブプログラムを作成できるように、現在の内部変数は、デフォルトのファイルを示して返すデフォルトのファイル変数を、変更するために選択を使用することができます。

#!/usr/bin/perl

if (open(MYFILE, ">>tmp")) {
select (MYFILE); # 使得默认文件变量的打印输出到MYFILE中
$~ = "OTHER";
write;           # 默认文件变量,打印到select指定的文件中,必使用$~指定的格式 OTHER

format OTHER =
=================================
  使用定义的格式输入到文件中
=================================
. 
close MYFILE;
}

次のように実装を成功した後、我々は、tmpファイルの内容を表示することができます。

$ cat tmp 
=================================
      输入到文件中
=================================
=================================
  使用定义的格式输入到文件中
=================================