2017-01-29 3 views
3

を解析するために失敗、私は次のようになり、テキストファイル解析しようとしています:修正幅テキストファイル

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

私のコード:このような結果を得るために

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

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); 

しかし、これは数字の行からすべての値をプルダウンして、最初の数字を2番目の文字の行に連結します。

答えて

5

二行時にファイルを読む:

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 
関連する問題