文件读取并将其写入另一个文件

时间:2015-08-10 07:36:34

标签: perl file

您好我正在尝试使用Config::Simple实施配置文件。 因为我能够解析输入并将参数写入文件。 我的配置文件是

new.conf

[Section1]
param1=value1
param2=value2

[Section2]
param1=value1
param2=value2

[Section3]
param1=value1
param2=value2

此外我想制作一个单独的分段文件,即在上面的例子中我想创建3个文件(因为有3个部分) 在第一个文件中我想要一些这样的

section1.conf

[Section1]
param1=value1
param2=value2

在第二个文件中 section2.conf

[Section2]
param1=value1
param2=value2

..等等

我想首先我要解析特定的部分和相应的参数,然后将其写入新文件。如果我是,请纠正我 想错了。

应该动态创建文件,因为每次提交表单后文件结构可能会有所不同。

我正在试着这样做,请建议我该怎么做。

我的代码:

use Config::Simple;
$cfg = new Config::Simple(syntax=>'ini');
if($ENV{'REQUEST_METHOD'} eq 'POST')
{
    &myReadParse(); 
    my $cfg = Config::Simple->import_from('new.conf', \my %config) or die Config::Simple->error();      
    my %write_config= %config;      
    foreach my $config_var (sort keys %write_config) 
    {
        foreach  my $form_var ( @form_input )
        {
            local ($key, $value) = split(/=/, $form_var );
            $key =~ s/^\s+|\s+$//g; 
            $value =~ s/^\s+|\s+$//g;
            if ($config_var eq $key) 
            {
                $cfg->param($config_var, $value);
            }                   
        }       
    }
    $cfg->write("new.conf");    
}

任何有助于提前感谢的帮助。

1 个答案:

答案 0 :(得分:0)

请尝试使用Config::Tiny

#!/usr/bin/env perl

use Config::Tiny;
use Storable qw( dclone );

my $conf = Config::Tiny->read('new.conf');

for my $section (sort keys %$conf) {

    # Make a Deep Copy of the Config::Tiny object
    my $copy = dclone($conf);

    # Delete all the other sections
    delete $copy->{$_} for (grep { $section ne $_ } keys %$conf);

    # Write out section to new file
    my $new_conf = lc($section) . '.conf';
    $copy->write( $new_conf );

}

产生:

section1.conf

[Section1]
param1=value1
param2=value2

section2.conf

[Section2]
param1=value1
param2=value2

section3.conf

[Section3]
param1=value1
param2=value2

以下是使用Config::Simple的另一个版本。在这里,我们需要深入了解Config :: Simple对象的内容,这是不优雅的。

#!/usr/bin/env perl

use Config::Simple;
use Storable qw( dclone );

my $conf = Config::Simple->import_from('new.conf');
my @sections = keys %{$conf->{_DATA}};

for my $section ( @sections ) {

    # Make a Deep Copy of the Config::Simple object
    my $copy = dclone($conf);

    # Delete all the other sections
    delete $copy->{_DATA}->{$_} for (grep { $section ne $_ } @sections);

    # Write out section to new file
    my $new_conf = lc($section) . '.conf';
    $copy->write( $new_conf );

}

生成这样的部分文件:

section1.conf

; Config::Simple 4.58
; Mon Aug 10 21:13:43 2015

[Section1]
param2=value2
param1=value1