Perl + создать цикл для печати значений из файла INI - PullRequest
1 голос
/ 16 июля 2010

Меня зовут Абби

Мой первый скрипт на Perl, запущенный на Linux-машине

Этот скрипт читает INI-файл с именем (input) и печатает значения 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};
 .
 .
 .
 .

пример файла ini с машины linux

кошачий ввод

  val1=1
  val2=2
  val3=3
  param1=a
  param2=b
  param3=c
  name1=abbi
  name2=diana
  name3=elena

Ответы [ 3 ]

2 голосов
/ 16 июля 2010

Вы можете использовать Config :: Tiny для чтения вашего INI-файла. Затем вы можете использовать возвращенный хеш для фильтрации того, что вы хотите.

1 голос
/ 16 июля 2010

Согласно вашему последнему комментарию, это будет делать то, что вы хотите:

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};
    }
}
0 голосов
/ 16 июля 2010

Как насчет этого:

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";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...