这样的表:
<p>
Porpertity History
<p>
class Rate data
<p>
A1 5% 10
<p>
B1 3.5% 8
如何将它们解析为哈希或数组?
非常感谢。
答案 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很简单)。
但是,根据您的编程技巧,您可能会对双哈希想法感到更舒服,或者将这两个值组合成一个哈希值。