如何使用PERL解析包含表格的文本

时间:2011-06-22 03:58:19

标签: perl

这样的表:

<p>
        Porpertity        History 
<p>
class    Rate              data
<p>
A1        5%                10
<p>
B1        3.5%              8

如何将它们解析为哈希或数组?

非常感谢。

1 个答案:

答案 0 :(得分:2)

我们可以通过三种方式解析此表。首先,我们需要打开它并获取数据。我假设如果第二列以%结尾,则它是一个有效的列:

#! /usr/bin/env perl

use strict;
use warnings;

open (MY_FILE, "data.txt")
   or die qq(Can't open "data.txt" for reading\n);

my %myHash;
my %dataHash;
my %rateHash;


while (my $line = <MY_FILE>) {
   my ($class, $rate, $data) = split (/\s+/, $line);
   next (unless $rate =~ /%$/);

代码的那部分将拆分这三个项目,然后问题是如何构造哈希。我们可以创建两个哈希值(一个用于速率,一个用于数据,并使用相同的键:

   $rateHash{$class} = $rate;
   $dataHash{$data} = $data;

或者,我们可以将哈希作为散列哈希,并将两个部分放在相同的哈希中:

   $myHash{$class}->{RATE} = $rate;
   $myHash{$class}->{DATA} = $data;

您现在可以在同一个哈希中提取速率或数据。您也可以一次性完成:

   %{$myHash{$class}} = ("RATE" => $rate, "DATA" => "$data");

我个人更喜欢第一个。

另一种可能性是将两者合并为一个标量:

   $myHash{$class} = "$rate:$data";   #Assuming ":" doesn't appear in either.

我的偏好是使它成为散列的散列(如第二个例子中所示)。然后,创建一个类来处理脏工作(使用Moose很简单)。

但是,根据您的编程技巧,您可能会对双哈希想法感到更舒服,或者将这两个值组合成一个哈希值。