0

我有一个结构如下的文本文件数据库(对于每一行)ID#VALUE1#VALUE2,它的外观如下:

1#foo#bar
2#boo#tall
3#34h3s#kdfjf8
4#asdff34#fret45

就我的目的而言,拥有这样的面具会很有用:

$ID#$val1#$val2

所以---为了这个例子---这样的代码:

print "type ID number:";

$ID=<>;

print "value1 is:$val1, and value2 is:$val2";

对于标准input = 1( $ID = 1),我的脚本将返回:

value1 is:foo, and value2 is:bar

如何以这种方式加载和索引文件?我正在考虑使用哈希表,但它并不完全有效,因为它只返回 val1。也许它可以用一个简单的数组来完成。有没有聪明的方法来做到这一点?它会是什么样子?

PS。对我来说,仅检索 $val1 或仅检索 $val2 也很重要

4

1 回答 1

1

如果您的键都是数字并且序列中没有间隙,那么您应该使用数组,而不是哈希。

您可以通过存储对包含两个值的数组的引用来解决在每个元素中存储多个值的问题。

这个程序演示

use strict;
use warnings;

open my $fh, '<', 'data.txt' or die "can't open data file: $!";

my @data;
while (<$fh>) {
  chomp;
  my ($key, @values) = split /#/;
  $data[$key] = \@values;
}

print "type ID number:";

my $id = <>;

printf "value1 is: %s, and value2 is: %s\n", @{$data[$id]};
于 2013-05-12T17:04:42.810 回答