開発環境
- 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 コメント:
コメントを投稿