Linuxで改行がCRLFのファイルを読み書き
投稿:2019-02-17
このツイートを見て。
Linuxで、Windowsで作成された「\r\n」のファイルを読み書きするには?
— Perlゼミ (@perlzemi) 2019年2月7日
みんな悩むよね。
読むとき。行入力セパレータを「\r\n」にします
local $/ = "\r\n";
これで、<$fh>とchompが正しく動く
書くとき、binmodeにして「\r\n」書く
binmode $fh;
print "$text\r\n";
読み書きで別物だから注意
open関数のファイルモードに、ファイルの仕様を指定すると色々と面倒をみてくれるのでそれに頼ってみよう。
Perlの組み込み関数 open の翻訳 - perldoc.jp
Perlの組み込み関数 open の翻訳 - perldoc.jp
#!/usr/bin/env perl -w use utf8; use strict; use warnings; use Encode::Locale; use feature "say"; binmode STDIN, ":encoding(console_in)"; binmode STDOUT, ":encoding(console_out)"; $| = 1; my @line; if (open my $fh, "< :utf8 :crlf", "sample_69_in.txt") { while (<$fh>) { chomp; say; push @line, $_; } close $fh; } if (open my $fh, "> :utf8 :crlf", "sample_69_out.txt") { for (@line) { say $fh $_; } close $fh; }
入力ファイルのsample_69_in.txtはutf8で改行コードはCRLFです。出力ファイルsample_69_out.txtが入力と同サイズ、LinuxでもWindowsと同じになるのを確認しました。
本日は晴天なり たこルカは俺の嫁