テキストファイルの改行を正確に読む
投稿:2018-02-07、更新:2018-02-08
このツイートを見て。
7行目と8行目の改行に細工してあります。
それと「たこルカ俺嫁」の下に改行1行あります。
本日は晴天なり この下に0x0aの空行2行 今日は良い天気 この下に0x0d,0x0aの空行2行 たこルカは俺の嫁
書いてみたけれど多分コレジャナイ(笑)。
肝はlinuxの改行(0x0a)を入力して:crlfがきちんと把握してる点。
ただしこのコードではファイル出力までcrlfになる。
#!/usr/bin/env perl -w
use utf8;
use warnings;
use strict;
use open IO => ":crlf :utf8";
use Encode::Locale;
binmode STDOUT, ":encoding(console_out)";
$| = 1;
while (<>) {
chomp;
print "'$_'\n";
}
exit;
例によってWindows(ActivePerl)とLinux(CentOS)でバージョンは共に5.24です。
'本日は晴天なり' 'この下に0x0aの空行2行' '' '' '今日は良い天気' 'この下に0x0d,0x0aの空行2行' '' '' 'たこルカは俺の嫁' ''ばんざーい♪
2018-02-08
ここから追加しました。
ファイルを読む際の「:crlf」「:bytes」「:utf8」の指定と環境(Windows/Linux)によるファイルの1行の扱いと、
chompの挙動が未確認でしたので追試します。
なおテスト用テキストファイルは同一です。
#!/usr/bin/env perl -w
use utf8;
use warnings;
use strict;
use Data::Hexify;
use Encode::Locale;
binmode STDOUT, ":encoding(console_out)";
$| = 1;
my $sample = "sample_14.txt";
file_input("", $sample);
file_input(":crlf", $sample);
file_input(":bytes", $sample);
file_input(":bytes :crlf", $sample);
file_input(":utf8", $sample);
file_input(":utf8 :crlf", $sample);
exit;
sub file_input {
my ($filemode, $filename) = @_;
print "ファイルモード'$filemode'―――――――――――――――――――――――――――――――――――――――――――――――\n";
open my $fh, "<$filemode", $filename or die "ファイルオープン失敗:$filename";
while (<$fh>) {
print "'$_'\n";
print hexdump($_) . "\n";
chomp;
print "chomp\n";
print "'$_'\n";
print hexdump($_) . "\n";
print "-----\n";
}
close $fh;
}
sub hexdump {
my ($d) = @_;
my @linebuff;
for (split "\n", Hexify $d, { showdata => sub { return ""; }, }) {
s/.*: //;
s/ +/ /g;
push @linebuff, $_;
}
return join "", @linebuff;
}
出力文字コードと環境(コマンドプロンプト)が異なるので警告が多量に表示されるのでリダイレクトした内容を見ます。
perl sample_17.pl >sample_17.txt 2>NUL「改行はcrlf」が前提のWindowsでは「:crlf」の有無に違いがありませんでした。
ファイルモード''―――――――――――――――――――――――――――――――――――――――――――――――
'a\x{009c}¬a\x{0097}\a\x{0081} ̄a\x{0099}´a\x{00a4}ca\x{0081}aa\x{0082}\x{008a}
'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 0a
chomp
'a\x{009c}¬a\x{0097}\a\x{0081} ̄a\x{0099}´a\x{00a4}ca\x{0081}aa\x{0082}\x{008a}'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a
-----
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a
chomp
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c
-----
'
'
0a
chomp
''
-----
'
'
0a
chomp
''
-----
'a≫\x{008a}a\x{0097}\a\x{0081} ̄e\x{0089} ̄a\x{0081}\x{0084}a\x{00a4}ca°\x{0097}
'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 0a
chomp
'a≫\x{008a}a\x{0097}\a\x{0081} ̄e\x{0089} ̄a\x{0081}\x{0084}a\x{00a4}ca°\x{0097}'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97
-----
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0d,0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a
chomp
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0d,0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c
-----
'
'
0a
chomp
''
-----
'
'
0a
chomp
''
-----
'a\x{0081}\x{009f}a\x{0081}\x{0093}a\x{0083}≪a\x{0082}≪a\x{0081} ̄a\x{00bf}oa\x{0081}Ra≪\x{0081}
'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 0a
chomp
'a\x{0081}\x{009f}a\x{0081}\x{0093}a\x{0083}≪a\x{0082}≪a\x{0081} ̄a\x{00bf}oa\x{0081}Ra≪\x{0081}'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81
-----
'
'
0a
chomp
''
-----
ファイルモード':crlf'―――――――――――――――――――――――――――――――――――――――――――――――
'a\x{009c}¬a\x{0097}\a\x{0081} ̄a\x{0099}´a\x{00a4}ca\x{0081}aa\x{0082}\x{008a}
'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 0a
chomp
'a\x{009c}¬a\x{0097}\a\x{0081} ̄a\x{0099}´a\x{00a4}ca\x{0081}aa\x{0082}\x{008a}'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a
-----
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a
chomp
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c
-----
'
'
0a
chomp
''
-----
'
'
0a
chomp
''
-----
'a≫\x{008a}a\x{0097}\a\x{0081} ̄e\x{0089} ̄a\x{0081}\x{0084}a\x{00a4}ca°\x{0097}
'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 0a
chomp
'a≫\x{008a}a\x{0097}\a\x{0081} ̄e\x{0089} ̄a\x{0081}\x{0084}a\x{00a4}ca°\x{0097}'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97
-----
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0d,0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a
chomp
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0d,0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c
-----
'
'
0a
chomp
''
-----
'
'
0a
chomp
''
-----
'a\x{0081}\x{009f}a\x{0081}\x{0093}a\x{0083}≪a\x{0082}≪a\x{0081} ̄a\x{00bf}oa\x{0081}Ra≪\x{0081}
'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 0a
chomp
'a\x{0081}\x{009f}a\x{0081}\x{0093}a\x{0083}≪a\x{0082}≪a\x{0081} ̄a\x{00bf}oa\x{0081}Ra≪\x{0081}'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81
-----
'
'
0a
chomp
''
-----
ファイルモード':bytes'―――――――――――――――――――――――――――――――――――――――――――――――
'a\x{009c}¬a\x{0097}\a\x{0081} ̄a\x{0099}´a\x{00a4}ca\x{0081}aa\x{0082}\x{008a}
'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 0a
chomp
'a\x{009c}¬a\x{0097}\a\x{0081} ̄a\x{0099}´a\x{00a4}ca\x{0081}aa\x{0082}\x{008a}'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a
-----
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a
chomp
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c
-----
'
'
0a
chomp
''
-----
'
'
0a
chomp
''
-----
'a≫\x{008a}a\x{0097}\a\x{0081} ̄e\x{0089} ̄a\x{0081}\x{0084}a\x{00a4}ca°\x{0097}
'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 0a
chomp
'a≫\x{008a}a\x{0097}\a\x{0081} ̄e\x{0089} ̄a\x{0081}\x{0084}a\x{00a4}ca°\x{0097}'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97
-----
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0d,0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a
chomp
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0d,0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c
-----
'
'
0a
chomp
''
-----
'
'
0a
chomp
''
-----
'a\x{0081}\x{009f}a\x{0081}\x{0093}a\x{0083}≪a\x{0082}≪a\x{0081} ̄a\x{00bf}oa\x{0081}Ra≪\x{0081}
'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 0a
chomp
'a\x{0081}\x{009f}a\x{0081}\x{0093}a\x{0083}≪a\x{0082}≪a\x{0081} ̄a\x{00bf}oa\x{0081}Ra≪\x{0081}'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81
-----
'
'
0a
chomp
''
-----
ファイルモード':bytes :crlf'―――――――――――――――――――――――――――――――――――――――――――――――
'a\x{009c}¬a\x{0097}\a\x{0081} ̄a\x{0099}´a\x{00a4}ca\x{0081}aa\x{0082}\x{008a}
'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 0a
chomp
'a\x{009c}¬a\x{0097}\a\x{0081} ̄a\x{0099}´a\x{00a4}ca\x{0081}aa\x{0082}\x{008a}'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a
-----
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a
chomp
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c
-----
'
'
0a
chomp
''
-----
'
'
0a
chomp
''
-----
'a≫\x{008a}a\x{0097}\a\x{0081} ̄e\x{0089} ̄a\x{0081}\x{0084}a\x{00a4}ca°\x{0097}
'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 0a
chomp
'a≫\x{008a}a\x{0097}\a\x{0081} ̄e\x{0089} ̄a\x{0081}\x{0084}a\x{00a4}ca°\x{0097}'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97
-----
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0d,0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a
chomp
'a\x{0081}\x{0093}a\x{0081}Ra,\x{008b}a\x{0081}≪0x0d,0x0aa\x{0081}Rccoe!\x{008c}i\x{00bc}\x{0092}e!\x{008c}'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c
-----
'
'
0a
chomp
''
-----
'
'
0a
chomp
''
-----
'a\x{0081}\x{009f}a\x{0081}\x{0093}a\x{0083}≪a\x{0082}≪a\x{0081} ̄a\x{00bf}oa\x{0081}Ra≪\x{0081}
'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 0a
chomp
'a\x{0081}\x{009f}a\x{0081}\x{0093}a\x{0083}≪a\x{0082}≪a\x{0081} ̄a\x{00bf}oa\x{0081}Ra≪\x{0081}'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81
-----
'
'
0a
chomp
''
-----
ファイルモード':utf8'―――――――――――――――――――――――――――――――――――――――――――――――
'本日は晴天なり
'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 0a
chomp
'本日は晴天なり'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a
-----
'この下に0x0aの空行2行
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a
chomp
'この下に0x0aの空行2行'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c
-----
'
'
0a
chomp
''
-----
'
'
0a
chomp
''
-----
'今日は良い天気
'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 0a
chomp
'今日は良い天気'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97
-----
'この下に0x0d,0x0aの空行2行
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a
chomp
'この下に0x0d,0x0aの空行2行'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c
-----
'
'
0a
chomp
''
-----
'
'
0a
chomp
''
-----
'たこルカは俺の嫁
'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 0a
chomp
'たこルカは俺の嫁'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81
-----
'
'
0a
chomp
''
-----
ファイルモード':utf8 :crlf'―――――――――――――――――――――――――――――――――――――――――――――――
'本日は晴天なり
'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 0a
chomp
'本日は晴天なり'
e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a
-----
'この下に0x0aの空行2行
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a
chomp
'この下に0x0aの空行2行'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c
-----
'
'
0a
chomp
''
-----
'
'
0a
chomp
''
-----
'今日は良い天気
'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 0a
chomp
'今日は良い天気'
e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97
-----
'この下に0x0d,0x0aの空行2行
'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a
chomp
'この下に0x0d,0x0aの空行2行'
e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c
-----
'
'
0a
chomp
''
-----
'
'
0a
chomp
''
-----
'たこルカは俺の嫁
'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 0a
chomp
'たこルカは俺の嫁'
e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81
-----
'
'
0a
chomp
''
-----
出力文字コードと環境(シェル)の文字コードは同じutf8です。Windowsのような警告は出ません。
perl sample_17.pl >sample_17.txt「改行はlf」が前提のLinuxで「:crlf」なしに「crlf」の行を読み込むと「lf」で1行になりますが「cr」は改行と見られていません。 chompで消えるのは末尾の「lf」だけで「cr」が残ります。 「:crlf」ありの場合は1行読み込んで「crlf」が「lf」に変換されていてchompで「lf」が消えます。
ファイルモード''――――――――――――――――――――――――――――――――――――――――――――――― 'a?¬a?\a? ̄a?´a?ca?aa?? ' e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 0a chomp 'a?¬a?\a? ̄a?´a?ca?aa??' e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a ----- 'a??a?Ra,?a?≪0x0aa?Rccoe!?i??e!? ' e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a chomp 'a??a?Ra,?a?≪0x0aa?Rccoe!?i??e!?' e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c ----- ' ' 0a chomp '' ----- ' ' 0a chomp '' ----- 'a≫?a?\a? ̄e? ̄a??a?ca°? ' e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 0a chomp 'a≫?a?\a? ̄e? ̄a??a?ca°?' e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 ----- 'a??a?Ra,?a?≪0x0d,0x0aa?Rccoe!?i??e!? ' e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a chomp 'a??a?Ra,?a?≪0x0d,0x0aa?Rccoe!?i??e!?' e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c ----- ' ' 0d 0a chomp ' ' 0d ----- ' ' 0d 0a chomp ' ' 0d ----- 'a??a??a?≪a?≪a? ̄a?oa?Ra≪? ' e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 0a chomp 'a??a??a?≪a?≪a? ̄a?oa?Ra≪?' e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 ----- ' ' 0a chomp '' ----- ファイルモード':crlf'――――――――――――――――――――――――――――――――――――――――――――――― 'a?¬a?\a? ̄a?´a?ca?aa?? ' e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 0a chomp 'a?¬a?\a? ̄a?´a?ca?aa??' e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a ----- 'a??a?Ra,?a?≪0x0aa?Rccoe!?i??e!? ' e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a chomp 'a??a?Ra,?a?≪0x0aa?Rccoe!?i??e!?' e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c ----- ' ' 0a chomp '' ----- ' ' 0a chomp '' ----- 'a≫?a?\a? ̄e? ̄a??a?ca°? ' e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 0a chomp 'a≫?a?\a? ̄e? ̄a??a?ca°?' e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 ----- 'a??a?Ra,?a?≪0x0d,0x0aa?Rccoe!?i??e!? ' e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a chomp 'a??a?Ra,?a?≪0x0d,0x0aa?Rccoe!?i??e!?' e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c ----- ' ' 0a chomp '' ----- ' ' 0a chomp '' ----- 'a??a??a?≪a?≪a? ̄a?oa?Ra≪? ' e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 0a chomp 'a??a??a?≪a?≪a? ̄a?oa?Ra≪?' e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 ----- ' ' 0a chomp '' ----- ファイルモード':bytes'――――――――――――――――――――――――――――――――――――――――――――――― 'a?¬a?\a? ̄a?´a?ca?aa?? ' e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 0a chomp 'a?¬a?\a? ̄a?´a?ca?aa??' e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a ----- 'a??a?Ra,?a?≪0x0aa?Rccoe!?i??e!? ' e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a chomp 'a??a?Ra,?a?≪0x0aa?Rccoe!?i??e!?' e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c ----- ' ' 0a chomp '' ----- ' ' 0a chomp '' ----- 'a≫?a?\a? ̄e? ̄a??a?ca°? ' e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 0a chomp 'a≫?a?\a? ̄e? ̄a??a?ca°?' e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 ----- 'a??a?Ra,?a?≪0x0d,0x0aa?Rccoe!?i??e!? ' e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a chomp 'a??a?Ra,?a?≪0x0d,0x0aa?Rccoe!?i??e!?' e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c ----- ' ' 0d 0a chomp ' ' 0d ----- ' ' 0d 0a chomp ' ' 0d ----- 'a??a??a?≪a?≪a? ̄a?oa?Ra≪? ' e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 0a chomp 'a??a??a?≪a?≪a? ̄a?oa?Ra≪?' e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 ----- ' ' 0a chomp '' ----- ファイルモード':bytes :crlf'――――――――――――――――――――――――――――――――――――――――――――――― 'a?¬a?\a? ̄a?´a?ca?aa?? ' e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 0a chomp 'a?¬a?\a? ̄a?´a?ca?aa??' e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a ----- 'a??a?Ra,?a?≪0x0aa?Rccoe!?i??e!? ' e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a chomp 'a??a?Ra,?a?≪0x0aa?Rccoe!?i??e!?' e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c ----- ' ' 0a chomp '' ----- ' ' 0a chomp '' ----- 'a≫?a?\a? ̄e? ̄a??a?ca°? ' e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 0a chomp 'a≫?a?\a? ̄e? ̄a??a?ca°?' e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 ----- 'a??a?Ra,?a?≪0x0d,0x0aa?Rccoe!?i??e!? ' e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a chomp 'a??a?Ra,?a?≪0x0d,0x0aa?Rccoe!?i??e!?' e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c ----- ' ' 0a chomp '' ----- ' ' 0a chomp '' ----- 'a??a??a?≪a?≪a? ̄a?oa?Ra≪? ' e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 0a chomp 'a??a??a?≪a?≪a? ̄a?oa?Ra≪?' e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 ----- ' ' 0a chomp '' ----- ファイルモード':utf8'――――――――――――――――――――――――――――――――――――――――――――――― '本日は晴天なり ' e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 0a chomp '本日は晴天なり' e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a ----- 'この下に0x0aの空行2行 ' e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a chomp 'この下に0x0aの空行2行' e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c ----- ' ' 0a chomp '' ----- ' ' 0a chomp '' ----- '今日は良い天気 ' e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 0a chomp '今日は良い天気' e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 ----- 'この下に0x0d,0x0aの空行2行 ' e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a chomp 'この下に0x0d,0x0aの空行2行' e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c ----- ' ' 0d 0a chomp ' ' 0d ----- ' ' 0d 0a chomp ' ' 0d ----- 'たこルカは俺の嫁 ' e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 0a chomp 'たこルカは俺の嫁' e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 ----- ' ' 0a chomp '' ----- ファイルモード':utf8 :crlf'――――――――――――――――――――――――――――――――――――――――――――――― '本日は晴天なり ' e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a 0a chomp '本日は晴天なり' e6 9c ac e6 97 a5 e3 81 af e6 99 b4 e5 a4 a9 e3 81 aa e3 82 8a ----- 'この下に0x0aの空行2行 ' e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a chomp 'この下に0x0aの空行2行' e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c ----- ' ' 0a chomp '' ----- ' ' 0a chomp '' ----- '今日は良い天気 ' e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 0a chomp '今日は良い天気' e4 bb 8a e6 97 a5 e3 81 af e8 89 af e3 81 84 e5 a4 a9 e6 b0 97 ----- 'この下に0x0d,0x0aの空行2行 ' e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c 0a chomp 'この下に0x0d,0x0aの空行2行' e3 81 93 e3 81 ae e4 b8 8b e3 81 ab 30 78 30 64 2c 30 78 30 61 e3 81 ae e7 a9 ba e8 a1 8c ef bc 92 e8 a1 8c ----- ' ' 0a chomp '' ----- ' ' 0a chomp '' ----- 'たこルカは俺の嫁 ' e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 0a chomp 'たこルカは俺の嫁' e3 81 9f e3 81 93 e3 83 ab e3 82 ab e3 81 af e4 bf ba e3 81 ae e5 ab 81 ----- ' ' 0a chomp '' -----
WindowsとLinuxで同じように動作させるための方法。
- ファイルを開く際に「:crlf」を付ける
- ファイルの文字コードに合わせて(例えばutf8なら)「:utf8」を付ける
- たとえファイルが「lf」しかない行でも「:crlf」は改行を把握できる
- 1行読み込んでからchompで末尾の改行を消す
