2016-11-15 256 views
0

我想阅读一个文本文件,并做一些分裂的文件,目的是将数据添加到数据库中。 文本文件看起来像。Perl阅读文本文件

object-group network og-net-network-hostname-blah 
description blah 
network-object host 192.168.0.1 
network-object host 192.168.0.2 
network-object host 192.168.0.3 
network-object host 192.168.0.4 
network-object host 192.168.0.5 
network-object host 192.168.0.6 
object-group network og-net-network-hostname-anotherblah 
description blah2 
network-object host 192.168.1.1 
network-object host 192.168.1.2 
network-object host 192.168.1.3 
network-object host 192.168.1.4 
network-object host 192.168.1.5 
network-object host 192.168.1.6 

我想要添加到数据库中的内容如下。

Column Name => og-net-network-hostname-blah,og-net-network-hostname-anotherblah 
Column Description => blah,blah2 
`Column Objects =>192.168.0.1...,192.168.1.1... 
`Column Objects =>192.168.0.1...,192.168.1.1... 

到目前为止,我已经能够打开文件读取它并做一个拆分,但它根本不可扩展。我最想做的是在对象组和下一个对象组之间进行任何操作,将该对象组的各种值作为数组的一部分放入数组中。

回答

2

您可以使用下面的数据结构。它形成良好,易于访问。

#!/usr/bin/perl 
use strict; 
use warnings; 
use Data::Dumper; 

my $filename = 'file.txt'; 
open (my $fh, "<", $filename) or die $!; 

my %data_for_object; 
my $key; 

while(<$fh>){ 
    chomp; 
    if ($_ =~ /object-group network (.*)/){ 
     $key = $1; 
    } 
    else{ 
     if ($_ =~ /description (.*)/){ 
      $data_for_object{$key}{description} = $1; 
     } 
     if ($_ =~ /network-object host (.*)/){ 
      if (exists $data_for_object{$key}{host}){ 
       push @{$data_for_object{$key}{host}}, $1; 
      } 
      else{ 
       $data_for_object{$key}{host} = [$1]; 
      } 
     } 
    } 
} 

print Dumper \%data_for_object; 

输出:

$VAR1 = { 
      'og-net-network-hostname-blah ' => { 
               'host' => [ 
                  '192.168.0.1', 
                  '192.168.0.2', 
                  '192.168.0.3', 
                  '192.168.0.4', 
                  '192.168.0.5', 
                  '192.168.0.6' 
                 ], 
               'description' => 'blah' 
              }, 
      'og-net-network-hostname-anotherblah ' => { 
                 'host' => [ 
                    '192.168.1.1', 
                    '192.168.1.2', 
                    '192.168.1.3', 
                    '192.168.1.4', 
                    '192.168.1.5', 
                    '192.168.1.6' 
                   ], 
                 'description' => 'blah2' 
                } 
     }; 

另见:

+1

这是神奇的欢呼队友。 –

+0

正如一个额外的问题,我将如何那么所有的主机添加到数据库中,我有DB连接工作和正确输入所有其他的东西,但不是所有的主机。似乎只添加主机部分的一个主机。似乎是将第一个主机添加到一个数组,然后将所有其他主机添加到另一个数组,它使用Data :: Dumper打印出来的效果不错,但不能用于插入到数据库中? –