加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

使用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的解决方法.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读