【问题标题】:Reading data in text file by perl 5 [duplicate]通过perl 5读取文本文件中的数据[重复]
【发布时间】:2019-11-20 04:15:49
【问题描述】:

我想阅读这个格式如下的文本文件:

0XC@21XAA          c 0000_001 MARRT     AC@21XAA         NERP_111 YYRRT     
                     NBBB_250 MARRT                                          

我想在每一行中恢复每个数据,并用一个“#”分隔,并将 null 放在数据为空的地方。 然后放到另一个文件中。 你有什么想法

【问题讨论】:

标签: perl


【解决方案1】:

这是一个例子:

use feature qw(say);
use strict;
use warnings;

my $fn = 'file.txt';
open ( my $fh, '<', $fn ) or die "Could not open file '$fn': $!";
my $M = 110;
while( my $line = <$fh> ) {
    chomp $line;
    my $N = length $line;
    if ( $N < $M ) {
        my $pad = " " x ( $M - $N );
        $line .= $pad;
    }
    my @fields = unpack "A18xA1xA8xA9xA16xA8xA10xA1xA16xA8xA*", $line;
    @fields = map { length ? $_ : "NULL" } @fields;
    say join "#", @fields;
}    
close $fh;

输出

0AC@21XAA#A#NAAA_001#MARRT#AC@21XAA#NERP_111#MARRT#NULL#NULL#NULL#NULL
NULL#NULL#NBBB_250#MARRT#NULL#NULL#NULL#A#AC@21XAA#NREP_001#MARRT
0AC@31XAA#A#NCCC_001#MARRT#AC@31XAA#NERP_111#MARRT#NULL#NULL#NULL#NULL
NULL#NULL#NEEE_250#MARRT#NULL#NULL#NULL#A#AC@31XAA#NREP_001#MARRT
0ACACAJAA#A#NFFF_001#MARRT#ACACAJAA#NERP_111#MARRT#NULL#NULL#NULL#NULL
NULL#NULL#NLLL_250#MARRT#NULL#NULL#NULL#A#ACACAJAA#NREP_001#MARRT
NULL#NULL#NULL#NULL#NULL#NULL#NULL#A#ACAC8JAA#NREP_001#MARRT
NULL#NULL#NULL#NULL#NULL#NULL#NULL#A#ACW40JAA#NREP_001#MARRT

【讨论】:

  • 您好,您能向我解释一下每个代码以及用于得到结果的算法吗?我是否需要导入功能模块 qw (say);
  • @obela06 该算法在perlpacktut 中进行了解释。请看一看。您无需导入模块即可使用say 功能,只需使用use feature qw(say) 启用say 功能
  • 黑格兰非常感谢。我还有一个问题,如何将结果导出到特定存储库中的另一个文本文件中。另外,如果我想将此结果添加到 mysql 数据库中,我该如何修改这个 perl 脚本
  • 不客气!保存脚本输出的最简单方法是使用 shell 重定向,例如script.pl &gt; file2.txt。我对mysql不是很熟悉,所以我必须检查一下,稍后再回来
  • @obela06 此站点不是代码编写服务。您必须付出自己的努力并描述您尝试过的内容并解释无效的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
  • 2017-07-04
  • 1970-01-01
  • 2018-11-03
相关资源
最近更新 更多