问题描述
|
像这样的表:
<p>
Porpertity History
<p>
class Rate data
<p>
A1 5% 10
<p>
B1 3.5% 8
如何将它们解析为哈希或数组?
非常感谢。
解决方法
我们可以通过三种方式解析该表。首先,我们需要打开它并获取数据。我假设如果第二列以ѭ1结尾,则它是有效列:
#! /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轻松完成)。
但是,根据您的编程技能,您可能会更喜欢双重哈希概念,或者将两个值组合为单个哈希。