【问题标题】:Perl: Iterating through INI filesPerl:遍历 INI 文件
【发布时间】:2012-04-13 05:06:57
【问题描述】:

我正在制作一个需要读取和获取 INI 文件值的 Perl 脚本。

INI 文件格式:

[name]
Property=value

例子:

[switch_6500]
cpu=1.5.1.12.4
free_memory=1.45.32.16

[oracle_db_11g]
param1=value1
param2=value2
param3=value3
param4=value4
...

如您所见,可以有任意数量的部分,其中包含任意数量的参数。部分名称/参数的名称总是不同的。

我需要做的是让我的 Perl 脚本遍历每个部分,并获取该部分的所有参数名称/值。我过去对 INI 文件所做的只是简单地指定节名称以及参数名称,如下所示:

  #!/usr/bin/perl -w

  use strict;
  use warnings;
  use Config::Tiny;

  # Read the configuration file
  my $Config = Config::Tiny->new();
  $Config = Config::Tiny->read( 'configfile.ini' );
  my $Metric1_var = $Config->{switch_6500}->{cpu};
  my $Metric2_var = $Config->{switch_6500}->{free_memory};

但是,既然我有无限数量的部分名称/参数,而且不知道它们的名称,我似乎无法找到提取所有值的方法。我正在查看 Config::IniFiles 模块,它有一些有趣的东西,但我似乎无法在不知道部分/参数名称的情况下找到获取参数值的方法。

如果有人能帮助我遍历这个 INI 文件,将不胜感激。

谢谢。

【问题讨论】:

    标签: perl file iteration config ini


    【解决方案1】:

    您可以使用Config::Tiny 为所欲为。只需使用keys 函数遍历哈希的所有键,如下:

    use strict;
    use Config::Tiny;
    
    my $config = Config::Tiny->read('configfile.ini');
    
    foreach my $section (keys %{$config}) {
        print "[$section]\n";
        foreach my $parameter (keys %{$config->{$section}}) {
            print "\t$parameter = $config->{$section}->{$parameter}\n";
        }
    }
    

    注意:因为哈希是“散列的”,而不是像数组那样有序,所以返回的键的顺序可能看起来很荒谬。由于 INI 文件中的顺序无关紧要(重要的是哪些参数在哪个部分中的位置),这应该不是问题。

    【讨论】:

    • 非常感谢,这正是我想要的。
    【解决方案2】:

    我个人更喜欢Config::Simple。您可以调用它的 param() 方法,不带参数返回文件中的所有参数。除了Config::Tiny,它还有一些其他不错的功能。

    【讨论】:

      【解决方案3】:

      我了解到您对解析 ini 文件感到满意。 如果您只想遍历所有部分及其密钥对,那么

      你可以像这样循环 Hash-Of-Hash。

      foreach my $Section (keys %$Config) {
       print "[$Section]";
       foreach my $Key (keys %{$Config->{$Section}}) {
        print "$Key = $Config->{$Section}->{$Key}";
       }
      }
      

      【讨论】:

        猜你喜欢
        • 2010-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-06
        • 1970-01-01
        • 2021-11-28
        • 1970-01-01
        • 2011-06-29
        相关资源
        最近更新 更多