gpt4 book ai didi

perl - 如何在 Perl 中将这些字符串转换为哈希?

转载 作者:行者123 更新时间:2023-12-04 23:05:40 27 4
gpt4 key购买 nike

我希望将具有多个分隔符的单个字符串转换为 key=>value 哈希结构。有没有一种简单的方法可以做到这一点?我目前的实现是:

sub readConfigFile() {
my %CONFIG;
my $index = 0;
open(CON_FILE, "config");
my @lines = <CON_FILE>;
close(CON_FILE);

my @array = split(/>/, $lines[0]);
my $total = @array;

while($index < $total) {
my @arr = split(/=/, $array[$index]);
chomp($arr[1]);
$CONFIG{$arr[0]} = $arr[1];
$index = $index + 1;
}

while ( ($k,$v) = each %CONFIG ) {
print "$k => $v\n";
}

return;
}

“配置”包含:

pub=3>rec=0>size=3>adv=1234 123 4.5 6.00
pub=1>rec=1>size=2>adv=111 22 3456 .76

最后的数字也需要删除,并保存在一个单独的 key=>value 对中,其名称可以是 'ip'。 (如果代码过于冗长和复杂,我无法做到这一点)。

最佳答案

您的配置数据结构应该是什么样的?到目前为止,解决方案只记录最后一行,因为它们每次添加记录时都会踩到相同的哈希键。

这可能会让你更接近,但你仍然需要弄清楚数据结构应该是什么。

  • 我将文件句柄作为参数传入,因此我的子程序不会与获取数据的特定方式相关联。在这种情况下,它可以来自文件、字符串、套接字,甚至是 DATA 下面的内容。

  • 我没有在解析字符串后进行修复,而是在解析字符串之前修复字符串以使其具有“ip”元素。一旦我这样做了,“ip”元素就不是特例了,它只是一个双重分割的问题。这是一项非常重要的技术,可以节省大量工作和代码。

  • 我在子例程中创建了一个哈希引用,并在完成后返回该哈希引用。我不需要全局变量。 :)

use warnings;use strict;use Data::Dumper;readConfigFile( \*DATA );sub readConfigFile    {    my( $fh ) = shift;    my $hash = {};    while( <$fh> )        {        chomp;        s/\s+(\d*\.\d+)$/>ip=$1/;        $hash->{ $. } = { map { split /=/ } split />/ };        }    return $hash;    }my $hash = readConfigFile( \*DATA );print Dumper( $hash );__DATA__pub=3>rec=0>size=3>adv=1234 123 4.5 6.00pub=1>rec=1>size=2>adv=111 22 3456 .76

这为您提供了一个数据结构,其中每一行都是单独的记录。我选择记录的行号($.)作为顶级键,但你可以使用任何你喜欢的东西。

$VAR1 = {          '1' => {                   'ip' => '6.00',                   'rec' => '0',                   'adv' => '1234 123 4.5',                   'pub' => '3',                   'size' => '3'                 },          '2' => {                   'ip' => '.76',                   'rec' => '1',                   'adv' => '111 22 3456',                   'pub' => '1',                   'size' => '2'                 }        };

如果这不是您想要的结构,请告诉我们您希望最终得到什么,我们可以调整答案。

关于perl - 如何在 Perl 中将这些字符串转换为哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/275038/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com