• 実験室
  • 実験室について
  • 実験レポート一覧
アイコンの説明
  • デザインデザイン
  • 企画企画
  • 画像処理画像処理
  • DynamicHTMLDynamicHTML
  • HTML,CSSHTML,CSS
  • JavaScriptJavaScript
  • Movable TypeMovable Type
  • WordpressWordPress
  • XOOPSXOOOPS
  • XSLTXSLT
  • Objective-CObjective-C
    iPhoneネイティブアプリ
  • Flash,ActionScript Flash,
    ActionScript
  • SilverlightSilverlight
  • PerlPerl
  • PHPPHP
  • VisualBasicVisualBasic
  • SQLServerSQLServer
  • MySQLMySQL
  • OracleOracle
  • PostgreSQLPostgreSQL
  • その他DBその他DB
  • サーバ関係サーバ関係
  • モバイルモバイル
各コンテンツは、弊社で調査及び実験の結果に基づくものですが、制作環境などの要因により、所定の結果が得られない場合も考えられます。 また、掲載内容の使用あるいは信頼性に関連して生じる直接的、間接的、派生的な損失または損害に関して、一切責任を負いません。あらかじめご了承ください。
Valid XHTML 1.0 Strict Valid CSS!

実験レポート

  • 【初級】 Perlによるツールの作成  - No.02 -

    掲載日:2006.12.29
  • Perl

それでは、前回の続きからじゃな。
前回のプログラムソースは以下の通りじゃ。
【ファイル名】test.pl

[ソース]
$input_file = "input.txt";
$output_file = "output.txt";

open(DATA, "<$input_file");
open(OUT, ">$output_file");

while(<DATA>){
	print OUT $_;
}

close(DATA);
close(OUT);
開いてからの処理じゃが、while文のところで何をしてるかじゃな。
結論から言ってしまえば、DATA を1行ずつ読み込んできて、 そのデータをそのまま OUT にprintしておるだけじゃ。
なんとなく雰囲気はわかるんですけど。。。
$_ ってなんなんですか??
perlでは、変数を省略した際に、$_を指定したものとみなされるのじゃ。
つまりwhile部分はwhile($_ = <DATA>)と書かれておるのと同様なんじゃ。
そのデータをプリントしているから print OUT $_;となる。 perlでは結構使われているから覚えておくと良いぞ。
では、 print OUT $_; のところも print OUT; でもいいんですか??
うむ、そのとおりじゃ。
今回は、後々の説明がわかりやすくなるよう入れてある。
なるほど。
つまりデータは1行ずつ取ってきて、print処理を行っているんですね。
うむ、じゃから1行ずつwhile文の中でやりたい処理を行えばいいだけの話なんじゃよ。
例えば・・・
【ファイル名】test2.pl

[ソース]
$input_file = "input.txt";
$output_file = "output2.txt";

open(DATA, "<$input_file");
open(OUT, ">$output_file");

while(<DATA>){
	$temp = 'みんなの噂' . $_;
	print OUT $temp;
}

close(DATA);
close(OUT);
こうすれば、それぞれの行の頭に「みんなの噂」と文字が追加されるはずじゃ!
ほんとだ。(博士、自分でやってて空しくないのかな。。。。)
ほっほっほ。
じゃあ本題じゃ!A君がもらったCSVデータを開いてみよう。
【ファイル名】address.csv

[ソース]
東京都,N区,S町 6-5 
東京都,C区,K町 1696
東京都,S区, Y町 16-7
千葉県,C市 ,C 1111
千葉県, N市  , H崎 135
埼玉県,S市,S

じゃあ、A君今まで説明してきたものを参考にやってみい。
はい!
ええと、カンマさえ取ればいいから正規表現をつかって・・・
【ファイル名】test3.pl

[ソース]
$input_file = "address.csv";
$output_file = "address.txt";

open(DATA, "<$input_file");
open(OUT, ">$output_file");

while(<DATA>){
	$_ =~ s/,//g;
	print OUT $_;
}

close(DATA);
close(OUT);
できた!
出力してみますね。
【出力ファイル】address.txt

東京都N区S町 6-5 
東京都C区K町 1696
東京都S区 Y町 16-7
千葉県C市 C 1111
千葉県 N市   H崎 135
埼玉県S市S
なんかカンマがとれて1つのデータになっているけど
一部分ずれているみたいですね。。。
うむ。元のデータに入っている全角や半角スペースのせいじゃな。
じゃ、じゃぁ全角や半角スペースも取ってしまえばいいんだ!
このデータをみるに番地の部分は意図的に半角スペースを入れていたりするのではないかな?
勝手に取ってしまっていいのかね〜?(ニヤニヤ)
むむむ。。。。。
そうじゃな。次回までにどうすればいいか考えてみるといい。
基本はわかってるようじゃから、いけるじゃろ!
(・・・続く)

(文責:塩谷)

このページのトップへ