開発環境
- OS X Lion - Apple(OS)
- BBEdit - Bare Bones Software, Inc., Emacs(Text Editor)
- プログラミング言語: Perl
『続・初めてのPerl 改訂版』(Randal L. Schwartz, brian d foy, Tom Phoenix 著、伊藤 直也、田中 慎司、吉川 英興 監訳、株式会社ロングテール/長尾 高弘 訳、オライリー・ジャパン、2006年、ISBN4-87311-305-9)の8章(ファイルハンドルへのリファレンス)の8.6(練習問題)2を解いてみる。
その他参考書籍
2.
コード(BBEdit)
sample.pl
#!/usr/bin/env perl use strict; use warnings; use 5.016; use utf8; binmode STDOUT, ':utf8'; binmode STDIN, ':utf8'; binmode STDERR, ':utf8'; use IO::File; my %names; my $read_fh = IO::File->new( 'log_file.txt', 'r') or die $!; while (<$read_fh>) { if (/^(.+):/) { my $name = lc $1; my $write_fh = $names{$name} ||= IO::File->new("$name.info", 'w') || die $!; print $write_fh $_; } }
入出力結果(Terminal)
$ ls *.info ls: *.info: No such file or directory $ ./sample.pl $ ls *.info gilligan.info lovey.info monkeyman.info skipper.info ginger.info maryann.info professor.info thurston.info $ cat gilligan.info Gilligan: 1 coconut Gilligan: 1 banana Gilligan: 1 banana Gilligan: 1 papaya Gilligan: 1 kiwifruit Gilligan: 2 mangoes Gilligan: 1 kiwifruit Gilligan: 2 kiwifruits Gilligan: 2 mangoes Gilligan: 1 mango Gilligan: 1 kiwifruit Gilligan: 1 kiwifruit Gilligan: 1 coconut Gilligan: 1 coconut Gilligan: 1 coconut Gilligan: 1 coconut Gilligan: 2 papayas Gilligan: 1 mango Gilligan: 3 bananas Gilligan: 1 kiwifruit Gilligan: 1 papaya Gilligan: 1 kiwifruit Gilligan: 1 kiwifruit Gilligan: 1 banana Gilligan: 2 bananas Gilligan: 2 kiwifruits Gilligan: 4 coconuts Gilligan: 3 mangoes Gilligan: 2 coconuts Gilligan: 2 kiwifruits Gilligan: 1 kiwifruit Gilligan: 1 mango Gilligan: 1 coconut Gilligan: 1 coconut $ cat log_file.txt Gilligan: 1 coconut Skipper: 3 coconuts Gilligan: 1 banana Professor: 3 coconuts MaryAnn: 2 papayas Thurston: 2 mangoes Gilligan: 1 banana Thurston: 1 mango Gilligan: 1 papaya Gilligan: 1 kiwifruit Skipper: 2 coconuts Professor: 3 bananas Ginger: 1 banana Ginger: 1 mango Gilligan: 2 mangoes Ginger: 1 banana MaryAnn: 1 kiwifruit Professor: 1 coconut Professor: 2 coconuts Gilligan: 1 kiwifruit Ginger: 1 coconut MaryAnn: 1 banana Ginger: 1 banana Thurston: 1 kiwifruit Lovey: 1 coconut Lovey: 2 papayas Ginger: 2 mangoes Gilligan: 2 kiwifruits Skipper: 1 mango Skipper: 2 mangoes Lovey: 2 papayas Gilligan: 2 mangoes Skipper: 1 kiwifruit Gilligan: 1 mango MaryAnn: 2 bananas Skipper: 1 mango Gilligan: 1 kiwifruit Gilligan: 1 kiwifruit Gilligan: 1 coconut Professor: 2 mangoes Gilligan: 1 coconut Ginger: 3 kiwifruits Gilligan: 1 coconut MaryAnn: 1 kiwifruit Ginger: 2 coconuts Gilligan: 1 coconut Gilligan: 2 papayas Ginger: 3 bananas Professor: 1 coconut Gilligan: 1 mango MaryAnn: 1 kiwifruit Skipper: 1 mango MaryAnn: 2 coconuts Professor: 1 kiwifruit Maryann: 1 coconut Gilligan: 3 bananas Gilligan: 1 kiwifruit Gilligan: 1 papaya Lovey: 1 papaya Ginger: 1 kiwifruit Gilligan: 1 kiwifruit MonkeyMan: 8 bananas Gilligan: 1 kiwifruit Gilligan: 1 banana MaryAnn: 1 coconut Skipper: 3 kiwifruits MaryAnn: 2 coconuts Gilligan: 2 bananas Skipper: 1 coconut Lovey: 1 coconut Skipper: 1 banana Gilligan: 2 kiwifruits Gilligan: 4 coconuts Skipper: 1 kiwifruit Thurston: 1 banana Lovey: 1 banana MaryAnn: 2 bananas Lovey: 1 coconut Ginger: 1 kiwifruit Ginger: 1 coconut Lovey: 1 papaya MaryAnn: 2 bananas MaryAnn: 1 mango Gilligan: 3 mangoes Skipper: 1 kiwifruit Professor: 1 papaya Professor: 1 kiwifruit Skipper: 1 mango Thurston: 1 banana MaryAnn: 1 coconut Gilligan: 2 coconuts Gilligan: 2 kiwifruits MaryAnn: 1 banana Lovey: 1 banana Gilligan: 1 kiwifruit Ginger: 2 coconuts Gilligan: 1 mango Lovey: 1 kiwifruit Skipper: 1 kiwifruit Lovey: 1 banana Skipper: 1 mango Lovey: 1 kiwifruit Lovey: 2 kiwifruits Gilligan: 1 coconut Gilligan: 1 coconut Skipper: 1 mango Skipper: 1 coconut $
ちなみにpython3.3の場合。
コード(BBEdit)
sample.py
#!/usr/bin/env python3.3 ## Copyright (C) 2013 by kamimura #-*- coding: utf-8 -*- import re names = {} with open('log_file.txt') as f: for line in f: matched = re.search(r"^(.+):", line) if matched: name = matched.group(1).lower() if name in names: names[name].write(line) else: f1 = open('{0}.info'.format(name), 'w') f1.write(line) names[name] = f1 map(lambda f: f.close(), names.values())
入出力結果(Terminal)
$ ls *.info ls: *.info: No such file or directory $ ./sample.py $ ls *.info gilligan.info lovey.info monkeyman.info skipper.info ginger.info maryann.info professor.info thurston.info $ cat gilligan.info Gilligan: 1 coconut Gilligan: 1 banana Gilligan: 1 banana Gilligan: 1 papaya Gilligan: 1 kiwifruit Gilligan: 2 mangoes Gilligan: 1 kiwifruit Gilligan: 2 kiwifruits Gilligan: 2 mangoes Gilligan: 1 mango Gilligan: 1 kiwifruit Gilligan: 1 kiwifruit Gilligan: 1 coconut Gilligan: 1 coconut Gilligan: 1 coconut Gilligan: 1 coconut Gilligan: 2 papayas Gilligan: 1 mango Gilligan: 3 bananas Gilligan: 1 kiwifruit Gilligan: 1 papaya Gilligan: 1 kiwifruit Gilligan: 1 kiwifruit Gilligan: 1 banana Gilligan: 2 bananas Gilligan: 2 kiwifruits Gilligan: 4 coconuts Gilligan: 3 mangoes Gilligan: 2 coconuts Gilligan: 2 kiwifruits Gilligan: 1 kiwifruit Gilligan: 1 mango Gilligan: 1 coconut Gilligan: 1 coconut $
0 コメント:
コメントを投稿