blog20100901

2013/08/20 - プログラミング言語 Perl にまつわる etc. - Perl monger
参考 : perldoc, perldoc.jp, search.cpan.org, perldoc.perl.org ...
「 初めての Perl 第 6 版 」(オライリー・ジャパン発行 ISBN978-4-87311-567-2) 」
「 続・初めての Perl 改訂版 」(オライリー・ジャパン発行 ISBN4-87311-305-9) 」
「 Effective Perl 第 2 版 」(翔泳社発行 ISBN978-4-7981-3981-4) 」 ... etc,.

Perl Perl_1

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

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)


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)の記事
 Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228) (2023-10-11 23:49)
 Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227) (2023-05-26 15:41)
 Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226) (2023-05-19 17:05)
 Perl mp2 翻訳 テンプレートシステムの選択 (d225) (2022-08-15 22:23)
 Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224) (2022-06-15 20:43)
 Perl mp2 翻訳 チュートリアル (d223) (2022-06-15 20:42)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

Llama
リャマ
TI-DA
てぃーだブログ
プロフィール
セラ (perlackline)
セラ (perlackline)
QRコード
QRCODE
オーナーへメッセージ

PAGE TOP ▲