perl - 无法解析固定宽度的文本文件

标签 perl

我正在尝试解析如下所示的文本文件:

aaa aaa aaa
111 111 111
bbb bbb bbb
222 222 222
ccc ccc ccc
333 555 666
ddd ddd ddd
444 444 444

为了得到这样的结果:

 aaa aaa111 aaa
 bbb bbb222 bbb
 ccc ccc333 ccc
 ddd ddd444 ddd

我的代码是这样的:

use strict;
use warnings;
use Data::Dumper;

my @array;  
my $flag = "";
my $permit;
my $adrr;
my $descr;
my $str_no;

my $file = 'Permit.txt';
open my $fh, '+<', $file
    or die "Cannot open 'file ' for writing: $!";

while (my $line = <$fh>) {
    chomp($line);
    if ($line =~ /^[abcd]/) {
        $str_no = substr($flag,0,3);
        $permit = substr($line, 0, 3);
        $adrr = substr($line, 4, 3);
        $descr = substr($line, 8, 3);
        if($flag) {
            if ($str_no) {
                $adrr .= $str_no;   
        }       

        }
        push @array, {permi => $permit, adr => $adrr, desc => $descr};
        $flag = ""; 

    } else {
            $flag = $line;
    }
}
print Dumper(\@array);

但这会将我所有的值从数字行向下推,将第一个数字连接到第二个字母行。

最佳答案

一次读取两行文件:

use strict;
use warnings;

while (<DATA>) {
    my @fields  = split;
    my @numbers = split(' ', <DATA>);
    $fields[1] .= $numbers[0];

    print "@fields\n";
}

__DATA__
aaa aaa aaa
111 111 111
bbb bbb bbb
222 222 222
ccc ccc ccc
333 555 666
ddd ddd ddd
444 444 444

输出:

aaa aaa111 aaa
bbb bbb222 bbb
ccc ccc333 ccc
ddd ddd444 ddd

关于perl - 无法解析固定宽度的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41922286/

相关文章:

perl - 执行使用 Elasticsearch.pm 的 perl 脚本时,Module/Runtime.pm 的版本格式无效(需要版本)

linux - perl + 将 json 转换为 csv 文件

multithreading - Perl:在线程之间共享复杂的数据结构

perl - 如何在 perl 中获取 'milliseconds' 作为时间的一部分?

perl - 如何在perl中对对象进行散列

perl - 如何使用Perl下载文件?

perl - 在 Perl 中,如何检测是否在 5.9.4 之前的版本中加载了 bignum 支持?

arrays - 将数组数组转换为哈希数组

linux - 为什么 "kill"与终端和 system() 不同?

perl - 如何在 OSX Snow Leopard 10.6 上安装 perl DBD::Oracle