繁体   English   中英

需要帮助来解析Perl中的文本文件

[英]Need Help Parsing a Text File in Perl

我的文本文件file1.txt的格式如下所示

1
A:  24
B:  6
C: -33

2
A:  44
B:  5
C:  78

3
A:  32
B: -98
C:  22

我需要我的perl程序来解析此文本文件并输出为file2.txt:

      1      2      3
 A    24     6     -33      
 B    44     5      78
 C    32    -98     22

预先感谢您的帮助

尝试过一些东西,但是不能正常工作。 但是根据其他人的反馈,我已经发布了代码。

# Program to parse output
@split1 = split(/\//,$ENV{'DESIGN_PATH'});

open (FILE1,"<path_to_file1.txt");
open (FILE2,">path_to_file2.txt"); 
my $go = 0;

while ($line = <FILE1>) {
print $line;
# Remove Blank SPaces
chomp $line;
@sp = split(/ /,$line);

$n=0;
for ($i=0; $i<=$#sp; $i++) {
  if ($sp[$i] eq "") {
  } else {
  $arry[$n] = $sp[$i];
  $n++;
  }
}

if ($line =~ /A:/ && $go == 0) {
  $go = 1;
  $group = $arry[$n-1];
  print FILE2 "- -\n";
  print FILE2 "B $arry[$n-1]\n";
}

if ($line =~ /B:/ && $go == 1) {
  $go = 0;
  print FILE2 "B: $arry[$n-1]\n";
} elsif ($line =~ /C:/ && $go == 1) {
  print FILE2 "C: $arry[$n-1]\n";
}


}
close FILE1;

将数据累积到HoH或其他数据结构中,然后输出:

use strict;
use warnings;

use List::MoreUtils qw(uniq);

my %data;

local $/ = '';    # Paragraph mode
while (<DATA>) {
    chomp;
    my ( $column, $vals ) = split "\n", $_, 2;

    while ( $vals =~ m/(.*):\s*(.*)/g ) {
        $data{$column}{$1} = $2;
    }
}

my @columns = sort keys %data;
my @rows = sort +uniq map { keys %$_ } values %data;

print join( "\t", '', @columns ), "\n";
for my $row (@rows) {
    print join( "\t", $row, map { $data{$_}{$row} // '' } @columns ), "\n";
}

__DATA__
1
A:  24
B:  6
C: -33

2
A:  44
B:  5
C:  78

3
A:  32
B: -98
C:  22

输出:

    1   2   3
A   24  44  32
B   6   5   -98
C   -33 78  22

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM