首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl读取文件并将每行存储为变量/值

Perl读取文件并将每行存储为变量/值
EN

Stack Overflow用户
提问于 2013-02-01 23:25:34
回答 3查看 9.5K关注 0票数 0

我是perl的新手,但到目前为止,我几乎完成了所有我需要做的事情。

我有一个格式如下的文件:

代码语言:javascript
复制
#IPAAS

@NX_iPaaS_AuthKey=dGstaG9zaGlub0BqcCasdpasdHN1LmNvbTppUGFhUzAw
@NX_iPaaS_href=live/661134565/process/75231

我想把以@NX_iPaaS开头的每一行都读入一个类似的命名变量,例如,@NX_iPaaS_AuthKey将创建一个名为$NX_IPAAS_AUTHKEY的新变量并保存值,NX_iPaaS_href将创建一个名为$NX_IPAAS_HREF的新变量并带有值,依此类推?

-更新--

嘿,伙计们,我需要对上面的解决方案做一点小小的调整...

所以我刚刚发现我正在读的文件会有'sections',例如

代码语言:javascript
复制
----- SECTION=cr 
NX_NTF_PERSISTENT_ID=cr:400017 
NX_NTF_REF_NUM=45 
----- SECTION=cnt 
NX_NTF_PERSISTENT_ID=cnt:F9F342055699954C93DE36923835A182 

您可以看到,其中一个变量出现在两个部分中,这(因为我没有'next defined')导致前一个值被覆盖。有没有办法在每个部分顶部的'section=‘行中给NX_NTF_变量名加上前缀?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-01 23:32:58

您想要使用的是一个哈希。类似于:

代码语言:javascript
复制
use strict;
use warnings;

my $input = "yourfilename.txt";
open(my $IN, "<", $input) or die "$0: Can't open input file $input: $!\n";

my %NX_iPaaS_vars;

while (<$IN>) {
    chomp;
    if ($_ =~ /^\@NX_iPaaS/) {
        my ($key, $value) = split(/=/, $_);
        $NX_iPaaS_vars{$key} = $value;
    }
}

要在以后使用变量,请使用$NX_iPaaS_vars{"name of variable you want"},例如:

代码语言:javascript
复制
my $href_path = $NX_iPaaS_vars{'@NX_iPaaS_href'};
# Do something with $href_path here...
票数 3
EN

Stack Overflow用户

发布于 2013-02-01 23:30:18

最好的做法是使用散列。

代码语言:javascript
复制
my %hash;
while (<>) {
    chomp;
    my ($key, $value) = split /=/;
    next unless defined $value;
    $hash{$key} = $value;
}

请参阅Why it's stupid to "use a variable as a variable name",了解为什么使用变量变量名不是一个好主意。

票数 6
EN

Stack Overflow用户

发布于 2013-02-01 23:33:36

代码语言:javascript
复制
#!/usr/bin/perl -w
use strict;

open(FILE,"test.txt");

my %hash;

foreach (<FILE>)
{
       if($_=~/@(\S+)=(\S+)/)
       {
               $hash{$1}=$2;
       }

}
close(FILE);

# Test Code

foreach (keys %hash)
{
       printf("%s=%s\n",$_,$hash{$_});
}

如果变量名是唯一的,则此解决方案效果很好。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14649523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档