zoukankan      html  css  js  c++  java
  • Perl解析INI文件

    copy from http://www.lwolf.cn/blog/article/program/perl-ini.html

    之前有写过用C#解析INI文件的文章,那时是因为要用Perl来解析INI,后来就在网上找了个现成的解析代码IniParser. 
          假设INI文件是这样的:

    [Directories]
    Input
    =c:\autoexec.bat
          使用方法如下:
    use IniParser;
    my $ini = IniParser->new("c:\\test.ini");
    my $inputdir = $ini->expectEntry("Directories","Input");

          以下是IniParser的代码:

    #-------------------------------------------------------------------------------
    # IniParser. Version 1.0
    # A freeware module for parsing .ini files.
    # Joachim Pimiskern, September 13, 2003
    #-------------------------------------------------------------------------------

    package IniParser;
    use strict;

    sub new
    {
    my ($class,$filename) = @_;
    my $data = {
    filename
    => $filename
    };
    bless($data,$class);
    $data->read($filename);
    return $data;
    }

    sub read
    {
    my ($self,$filename) = @_;
    my $sectionName = "Global";
    my $section = {};
    my $line;
    local *FP;

    $self->{$sectionName} = $section;

    open(FP,"<$filename") or die "read(): can't open $filename for read: $!";
    while (defined ($line = <FP>))
    {
    chomp($line);
    if ($line =~ /^\s*(.*?)\s*=\s*(.*?)\s*(;.*)?$/) # Assignment
    {
    my $left = $1;
    my $right = $2;
    $section->{$left} = $right;
    }
    elsif ($line =~ /^\s*\[\s*(.*?)\s*\]\s*(;.*)?$/) # Section name
    {
    $sectionName = $1;
    $section = {};
    $self->{$sectionName} = $section;
    }
    elsif ($line =~ /^\s*(;.*)?$/) # Comment
    {
    }
    else
    {
    die "read(): illegal line <$line> in file $filename.";
    }
    }
    close(FP);
    }

    sub expectSection
    {
    my ($self,$section) = @_;
    my $filename = $self->{filename};

    if (! exists $self->{$section})
    {
    die "expectSection(): $filename has no section [$section]";
    }
    return $self->{$section};
    }

    sub expectEntry
    {
    my ($self,$section,$left) = @_;
    my $filename = $self->{filename};
    my $sectionHash = $self->expectSection($section);

    if (! exists $sectionHash->{$left})
    {
    die "expectEntry(): $filename, section [$section] has no $left entry";
    }
    return $sectionHash->{$left};
    }

    1;

  • 相关阅读:
    vue computed watch 使用区别
    element 问题
    vue vue.config.js
    vue 路由
    算法
    《概率统计》10.变与不变:马尔科夫链的极限与稳态
    《概率统计》9.状态转移:初识马尔科夫链
    《概率统计》8.由静向动:随机过程导引
    《概率统计》7.统计推断:寻找最大似然与最大后验
    《概率统计》6.推断未知:统计推断的基本框架
  • 原文地址:https://www.cnblogs.com/morya/p/1996481.html
Copyright © 2011-2022 走看看