使用perl tie :: file和utf编码文件

使用perl tie :: file和utf编码文件,第1张

概述我可以将Tie :: File与utf编码的输出文件一起使用吗?我不能让这个工作正常. 我要做的是打开这个utf编码文件,从文件中删除匹配字符串并重命名该文件. 码: use strict;use warnings;use Tie::File;use File::Copy;my ($input_file) = qw (test.txt);open my $infh, "<:encod 我可以将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的解决方法.)

总结

以上是内存溢出为你收集整理的使用perl tie :: file和utf编码文件全部内容,希望文章能够帮你解决使用perl tie :: file和utf编码文件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1222696.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存