PHP
ある方にエラー処理演算子を使う例をいただいたので採用。
<?php
$argv = $_SERVER['argv'];
if (count($argv) != 2) {
die("Usage: $argv[0] filename\n");
}
$buf = @file_get_contents($argv[1]) or die("Error: failed reading $argv[1]\n");
echo implode("\n", preg_split('/\s+/', $buf));
?>
補足: PHP5ではfprintfが付いたのでfwriteとsprintfで別々に処理しなくて済む。
Perl
if(scalar(@ARGV) != 1) {
die "Usage: $0 filename\n";
}
open f, $ARGV[0] or die($!);
print join("\n", split(/\s+/, join('', <f>))) . "\n";
Alt A: クールにワンライナーで処理
> perl -e 'print join("\n", split(/\s+/, join("", <>))) . "\n"'
Alt A': 改行を未定義にすればもっと簡単ということらしい
> perl -e '$/ = undef; $_ = <>; s/\s+/\n/g; print'
Alt B: ある方よりの寄稿。さすがドウトデモ書ける言語だ。(でもちゃんとフルバッファしてないので残念)
use strict;
die "Usage: $0 FILENAME\n" unless ($#ARGV == 0);
eval{
while(<>){
s/\s+/\n/g;
print;
}
};
print $@ if ($@);
Alt B': Alt A'にならって書くとこうなのだそうだ。いやはや。
use strict;
die "Usage: $0 FILENAME\n" unless ( $#ARGV == 0 );
eval {
local $/ = undef;
$_ = <>;
};
die $@ if ($@);
s/\s+/\n/g;
print;
Ruby
if ARGV.length != 1
abort sprintf("Usage: %s filename\n", $0);
end
begin
filebuf = open(ARGV[0]).read
rescue
abort $!
end
filebuf.split(/\s+/).each do |s|
puts s
end
Python
Pythonの'StringObject'.split()はwhite spaceならなんでも区切りにするあたりがエラい。
import sys
if(len(sys.argv) != 2):
print >>sys.stderr, "Usage: %s filename" % sys.argv[0]
sys.exit(1)
try:
filebuf = open(sys.argv[1]).read()
except Exception, e:
print >>sys.stderr, e
sys.exit(1)
print '\n'.join([s for s in filebuf.split()])