使用perl tie :: file和utf编码文件
发布时间:2020-12-16 06:09:14 所属栏目:大数据 来源:网络整理
导读:我可以将Tie :: File与utf编码的输出文件一起使用吗?我不能让这个工作正常. 我要做的是打开这个utf编码文件,从文件中删除匹配字符串并重命名该文件. 码: use strict;use warnings;use Tie::File;use File::Copy;my ($input_file) = qw (test.txt);open my
我可以将Tie :: File与utf编码的输出文件一起使用吗?我不能让这个工作正常.
我要做的是打开这个utf编码文件,从文件中删除匹配字符串并重命名该文件. 码: use strict; use warnings; use Tie::File; use File::Copy; my ($input_file) = qw (test.txt); open my $infh,"<:encoding(UTF-16LE)",$input_file or die "cannot open '$input_file': $!"; for (<$infh>) { tie my @lines,"Tie::File",$_; shift @lines if $lines[0] =~ m/MyHeader/; untie @lines; my ($name) = /^(.*).csv/i; move($_,$name . ".dat"); } close $infh or die "Cannot close '$input_file': $!"; 代码:(更新) my ($input_file) = qw (test.txt); my $qfn_in = $input_file; my $qfn_out = $qfn_in . ".dat"; open(my $fh_in,"<:raw:perlio:encoding(UTF-16le):crlf:utf8",$qfn_in) or die("Can't open "$qfn_in": $!n"); open(my $fh_out,">:raw:perlio:encoding(UTF-16le):crlf:utf8",$qfn_out) or die("Can't open "$qfn_out": $!n"); while (<$fh_in>) { next if $. == 1 && /MyHeader/; print($fh_out $_) or die("Can't write to "$qfn_out": $!"); } close($fh_in); close($fh_out) or die("Can't write to "$qfn_out": $!"); rename($qfn_out,$qfn_in) or die("Can't rename: $!n"); 解决方法my $qfn_in = ...; my $qfn_out = $qfn_in . ".tmp"; open(my $fh_in,$qfn_out) or die("Can't open "$qfn_out": $!n"); while (<$fh_in>) { next if $. == 1 && /MyHeader/; print($fh_out $_) or die("Can't write to "$qfn_out": $!"); } close($fh_in); close($fh_out) or die("Can't write to "$qfn_out": $!"); rename($qfn_out,$qfn_in) or die("Can't rename: $!n"); (:perlio和:utf8是当时存在的bug的解决方法.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |