0

私はperlにかなり慣れていませんが、これまでのところ、必要なことはほとんどすべて行う必要がありました。

私は次のようにフォーマットされたファイルを持っています:

#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という新しい変数になります。の上?

- アップデート -

やあみんな、私は上記の解決策に必要な微調整が必​​要です...

だから私はちょうど私が読んでいるファイルが「セクション」を持っていることを発見しました、例えば

----- SECTION=cr 
NX_NTF_PERSISTENT_ID=cr:400017 
NX_NTF_REF_NUM=45 
----- SECTION=cnt 
NX_NTF_PERSISTENT_ID=cnt:F9F342055699954C93DE36923835A182 

変数の1つが両方のセクションに表示されていることがわかります。これにより、(定義されていない限り'next'がないため)、前の値が上書きされます。NX_NTF_変数名の前に、各セクションの上部にある「section =」行に指定された値を付ける方法はありますか?

ありがとう

4

3 に答える 3

6

ハッシュを使用することをお勧めします。

my %hash;
while (<>) {
    chomp;
    my ($key, $value) = split /=/;
    next unless defined $value;
    $hash{$key} = $value;
}

変数変数名を使用するのが得策ではない理由については、「変数を変数名として使用する」のが愚かである理由を参照してください。

于 2013-02-01T15:30:17.823 に答える
3

使用したいのはハッシュです。何かのようなもの:

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"}

my $href_path = $NX_iPaaS_vars{'@NX_iPaaS_href'};
# Do something with $href_path here...
于 2013-02-01T15:32:57.990 に答える
-1
#!/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{$_});
}

このソリューションは、変数名が一意である場合にうまく機能します。

于 2013-02-01T15:33:36.160 に答える