Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl+;创建循环以打印INI文件中的值_Perl - Fatal编程技术网

perl+;创建循环以打印INI文件中的值

perl+;创建循环以打印INI文件中的值,perl,Perl,我叫阿比 我的第一个perl脚本在linux机器上运行 此脚本读取名为(输入)的INI文件,并打印val、param、name…..的值 如何创建打印val1 valn值的循环或打印param1 paramn值的循环。。。等(在脚本中放置打印命令) 循环必须具有与参数匹配的选项 例如,仅打印param1直到paramn值 n-是每个参数的最后一个数字 #!/usr/bin/perl open(IN,"input") or die "Couldn't open input: $!\

我叫阿比

我的第一个perl脚本在linux机器上运行

此脚本读取名为(输入)的INI文件,并打印val、param、name…..的值

如何创建打印val1 valn值的循环或打印param1 paramn值的循环。。。等(在脚本中放置打印命令)

  • 循环必须具有与参数匹配的选项 例如,仅打印param1直到paramn值
n-是每个参数的最后一个数字

 #!/usr/bin/perl




 open(IN,"input") or die "Couldn't open input: $!\n"; 
 while(<IN>) { 
 chomp; 
 /^([^=]+)=(.*)$/; 
 $config{$1} = $2; 

 } 
 close(IN);


 print $config{val1};
 print $config{val2};
 print $config{val3};

 print $config{param1};
 print $config{param2};
 print $config{param3}; 

 print $config{name1};
 .
 .
 .
 .
这个怎么样:

use warnings;
use strict;
my %config;

open my $input, "<", "input"
    or die "Couldn't open input: $!\n"; 
while(<$input>) { 
    chomp; 
    if ( /^([^=]+)=(.*)$/) { 
        $config{$1} = $2; 
    }
} 
close($input) or die $!;

for (sort keys %config) {
    if (/param\d+/) {
        print "$config{$_}\n";
    }
}
使用警告;
严格使用;
我的%config;

打开我的$input,“根据您最后的评论,这将满足您的要求:

use strict;
use warnings;

my %config;
my $max_n = 0;
my $input = 'input';
open my $in, '<', $input
    or die "unable to open '$input' for reading: $!";
while (<$in>) {
    chomp;
    if (/^(.*?(\d+))\s*=(.*)$/) { 
        $config{$1} = $3; 
        $max_n = $2 if $2 > $max_n;
    }
}
close $in or die "unable to close '$input': $!";

for my $n(1..$max_n) {
    for my $param (qw/val param/) {
        print "$param.$n = $config{$param.$n}\n" if exists $config{$param.$n};
    }
}
使用严格;
使用警告;
我的%config;
我的$max\u n=0;
我的$input='input';
在“中打开我的$in”,您可以使用它读取.ini文件。

然后,您可以使用返回的散列来筛选所需内容。

hi Kinopiko,我可以在位置参数中设置参数吗?例如,在位置参数中设置$param,并且$param可以是任何单词??Abbillittle问题,例如,如果param1A它也匹配它,如果param的右侧有一些字符作为param1X,那么它必须不匹配,规则必须例如param如何解决这个问题?@abbi:在正则表达式的末尾使用$。另一个问题是,为了先打印val1和param1,然后在第二个循环中打印val2和param2,需要在脚本中更改什么。。。。。,abbi@abbi:你能试着自己做一个练习吗?嗨,M42,同样的问题:,我可以在原地设置参数吗?例如,原地参数我设置了$param,$param可以是任何单词??abbi–另一个问题是,为了先打印val1和param1,然后在第二个循环val2和param2上打印,需要在脚本中更改什么…,abbihi M42看到我得到错误全局符号“$max\n”“在./new_ini第22行需要显式的包名。您真的复制粘贴了代码吗?”?我想你把我的$max\n忘在第五行了。不,行中的$max\n副本没问题,我确信-:(abbi
use strict;
use warnings;

my %config;
my $max_n = 0;
my $input = 'input';
open my $in, '<', $input
    or die "unable to open '$input' for reading: $!";
while (<$in>) {
    chomp;
    if (/^(.*?(\d+))\s*=(.*)$/) { 
        $config{$1} = $3; 
        $max_n = $2 if $2 > $max_n;
    }
}
close $in or die "unable to close '$input': $!";

for my $n(1..$max_n) {
    for my $param (qw/val param/) {
        print "$param.$n = $config{$param.$n}\n" if exists $config{$param.$n};
    }
}