perl+;创建循环以打印INI文件中的值
我叫阿比 我的第一个perl脚本在linux机器上运行 此脚本读取名为(输入)的INI文件,并打印val、param、name…..的值 如何创建打印val1 valn值的循环或打印param1 paramn值的循环。。。等(在脚本中放置打印命令)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: $!\
- 循环必须具有与参数匹配的选项 例如,仅打印param1直到paramn值
#!/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};
}
}