Perl Perl_1
Perl 「 モジュール 」 ( 割り込み ) Text::CSV_XS 利用 その 1 "起動引数" (0xba)

目次 - Perl Index
Theme
Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0xba 回。
Perl モジュール Text::CSV_XS による CSV データの加工を順を追って確認する。その 1。
「 外部ファイルから CSV 形式のデータを読み込む 」。
Perl 「 モジュール 」 ( 割り込み ) Text::CSV_XS インストール (0xb7)
Perl 「 モジュール 」 ( 割り込み ) Text::CSV_XS メソッド parse() (0xb8)
Perl 「 モジュール 」 ( 割り込み ) Text::CSV_XS メソッド fileds() (0xb9)
今回僕が処理することになった double quotation (") 入りの CSV 形式のデータは、全部で 56 のフィールド ( colmun ) と 2000 程の行 ( row )を持っています。
この中で必要なのは、2 つのフィールド「 名前 」と「 年月日 」です。 これらのフィールドは、項目の並びで 1 番目と 7 番目にあります。
処理の内容は単純です。
1. 外部ファイルから CSV 形式のデータを読み込む
2. 行をカンマで分割する
3. 分割したフィールドを配列に格納する
4. 配列から必要なフィールド (名前, 年月日) だけを抜き出す
5. 年月日フィールドの末尾についてくる余分な情報 ( 時間 ) を削除する
6. 年月日のデリミタを - から / に変更する
7. 名前と年月日の対を整形して外部ファイルに書き出す
モジュール Text::CSV_XS を利用するのは、「 2 」と「 3 」の処理です。
まず、プログラムの先頭には次の記述があります。
1 行目の「 #! 」で始まるシェバン ( shebang ) 行は、スクリプトプログラムを書く場合のお馴染みです。シェバン ( シバン ) については (0x0a) で確認しましたが、併せて次のページを読めば概要を理解出来ます。
シバン (Unix) - Wikipedia
シェバング - UNIXの部屋
Shebangという謎な事実上業界標準について - 本の虫
「 warnings 」(0x15) と、「 strict 」(0x35) は、Perl プログラムではお約束のプラグマです。「 プラグマ 」( pragma ) とは、プログラムのコンパイル時にコンパイラに指示を出すモジュールの 1 種です。
「 Text::CSV_XS 」は、今回の主役となるモジュールです。
残念ながら、Text::CSV_XS は Perl 標準モジュールではないため、ユーザが独自にインストールする必要があります。僕は、(0xb7) でインストールを済ませました。
外部からファイルを読み込むには、ファイルハンドル (0x41) を利用しますが、その前に起動引数として指定する、入出力用のファイル名を取得する必要があります。
ファイル名の取得は、次の様に書きました。
1 行目の「 my ($IN, $OUT, %hash); 」では、入出力のファイルハンドルと、データ格納用のハッシュの利用をあらかじめ宣言しています。
3 行目と 4 行目は、それぞれ起動引数のファイル名を取得しています。この書き方は次のページを参考にしました。
勝手に添削 - PerlによるCSVファイルの高速集計 2 - 404 Blog Not Found
「 shift 」は、(0x23) で確認した、配列の先頭の要素を取り出す演算子です。ここでは、対象になる配列を明示していませんが、実際には (0x3b) で確認した「 @ARGV 」を対象としています。
「 or help() 」は、 (0x48) で確認した論理和の演算子「 or 」とサブルーチン「 help() 」のセットです。
論理和「 or 」演算子は、shift 演算子によるファイル名の取得が 偽 を返した ( 失敗した ) 場合に処理をサブルーチン help() に渡します。
「 or 」演算子は、(0x8b) で確認した「 || 」演算子に置き換えることも出来ますが、優先順位が低い「 or 」の方が使い勝手が良いです。
サブルーチン「 help() 」は、次の様に「 die 」関数を利用してプログラムを終了する処理を行います。
メッセージに含まれた「 $0 」は、Perl の組込み変数で、プログラムファイルのファイル名を表します。つまり、起動引数の取得に失敗した場合、次のメッセージを表示してプログラムを終了します。
プログラムの実行方法を簡易なメッセージで伝えていますが、もう少し、例えば
の様に出力すると親切 ( だが冗長 ) かもしれません。
I would appreciate it if you could teach me when there is a mistake in English message and Code
( プログラムコードおよび英文に不備があればご指摘いただけると幸いです。)
次回は、ファイルハンドルによる行の読み込みとその処理を確認します。
参考情報は以下の書籍を中心に Wikipedia および各 Web サイト。それと詳しい先輩。
参考 :「Randal L. Schwartz, brian d foy, Tom Phoenix 共著 近藤 嘉雪 訳「初めての Perl 第 6 版」(オライリー・ジャパン発行 ISBN978-4-87311-567-2)」
次回 (0xbb) へ続く。
目次 - Perl Index
Perl 「 モジュール 」 ( 割り込み ) Text::CSV_XS メソッド parse() (0xb8)
Perl 「 モジュール 」 ( 割り込み ) Text::CSV_XS メソッド fileds() (0xb9)
Text::CSV_XS を利用する処理
今回僕が処理することになった double quotation (") 入りの CSV 形式のデータは、全部で 56 のフィールド ( colmun ) と 2000 程の行 ( row )を持っています。
この中で必要なのは、2 つのフィールド「 名前 」と「 年月日 」です。 これらのフィールドは、項目の並びで 1 番目と 7 番目にあります。
処理の内容は単純です。
1. 外部ファイルから CSV 形式のデータを読み込む
2. 行をカンマで分割する
3. 分割したフィールドを配列に格納する
4. 配列から必要なフィールド (名前, 年月日) だけを抜き出す
5. 年月日フィールドの末尾についてくる余分な情報 ( 時間 ) を削除する
6. 年月日のデリミタを - から / に変更する
7. 名前と年月日の対を整形して外部ファイルに書き出す
モジュール Text::CSV_XS を利用するのは、「 2 」と「 3 」の処理です。
0. プログラムファイルの冒頭
まず、プログラムの先頭には次の記述があります。
#!/usr/bin/perl
use warnings;
use strict;
use Text::CSV_XS;
1 行目の「 #! 」で始まるシェバン ( shebang ) 行は、スクリプトプログラムを書く場合のお馴染みです。シェバン ( シバン ) については (0x0a) で確認しましたが、併せて次のページを読めば概要を理解出来ます。
シバン (Unix) - Wikipedia
シェバング - UNIXの部屋
Shebangという謎な事実上業界標準について - 本の虫
「 warnings 」(0x15) と、「 strict 」(0x35) は、Perl プログラムではお約束のプラグマです。「 プラグマ 」( pragma ) とは、プログラムのコンパイル時にコンパイラに指示を出すモジュールの 1 種です。
「 Text::CSV_XS 」は、今回の主役となるモジュールです。
残念ながら、Text::CSV_XS は Perl 標準モジュールではないため、ユーザが独自にインストールする必要があります。僕は、(0xb7) でインストールを済ませました。
1. 外部ファイルから CSV 形式のデータを読み込む
外部からファイルを読み込むには、ファイルハンドル (0x41) を利用しますが、その前に起動引数として指定する、入出力用のファイル名を取得する必要があります。
ファイル名の取得は、次の様に書きました。
my ($IN, $OUT, %hash); # ファイルハンドル IN, OUT と データ格納用のハッシュ
my $input = shift or help(); # 第 1 引数 入力ファイル
my $output = shift or help(); # 第 2 引数 出力ファイル
1 行目の「 my ($IN, $OUT, %hash); 」では、入出力のファイルハンドルと、データ格納用のハッシュの利用をあらかじめ宣言しています。
3 行目と 4 行目は、それぞれ起動引数のファイル名を取得しています。この書き方は次のページを参考にしました。
勝手に添削 - PerlによるCSVファイルの高速集計 2 - 404 Blog Not Found
「 shift 」は、(0x23) で確認した、配列の先頭の要素を取り出す演算子です。ここでは、対象になる配列を明示していませんが、実際には (0x3b) で確認した「 @ARGV 」を対象としています。
「 or help() 」は、 (0x48) で確認した論理和の演算子「 or 」とサブルーチン「 help() 」のセットです。
論理和「 or 」演算子は、shift 演算子によるファイル名の取得が 偽 を返した ( 失敗した ) 場合に処理をサブルーチン help() に渡します。
「 or 」演算子は、(0x8b) で確認した「 || 」演算子に置き換えることも出来ますが、優先順位が低い「 or 」の方が使い勝手が良いです。
サブルーチン「 help() 」は、次の様に「 die 」関数を利用してプログラムを終了する処理を行います。
sub help { # 起動引数チェックのサブルーチン
die "$0 input_file output_file\n";
}
メッセージに含まれた「 $0 」は、Perl の組込み変数で、プログラムファイルのファイル名を表します。つまり、起動引数の取得に失敗した場合、次のメッセージを表示してプログラムを終了します。
program_file input_file output_file
プログラムの実行方法を簡易なメッセージで伝えていますが、もう少し、例えば
This program requires 2 args, "input file" and "output file".
Please run as [ $0 input_file output_file ].
の様に出力すると親切 ( だが冗長 ) かもしれません。
I would appreciate it if you could teach me when there is a mistake in English message and Code
( プログラムコードおよび英文に不備があればご指摘いただけると幸いです。)
0xba -> 0xbb へ
次回は、ファイルハンドルによる行の読み込みとその処理を確認します。
参考情報は以下の書籍を中心に Wikipedia および各 Web サイト。それと詳しい先輩。
参考 :「Randal L. Schwartz, brian d foy, Tom Phoenix 共著 近藤 嘉雪 訳「初めての Perl 第 6 版」(オライリー・ジャパン発行 ISBN978-4-87311-567-2)」
次回 (0xbb) へ続く。
目次 - Perl Index
Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)