テキストファイルの改行を正確に読む
投稿: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で末尾の改行を消す