2016-11-15 9 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接続が正しく動作していることを確認しています。 1つのホストセクションだけを追加するようです。ある配列に最初のホストを追加した後、他のすべてのホストを別の配列に追加するように見えますが、これはData :: Dumperを使ってうまく印刷しますが、データベースに挿入する作業はしません。 –

関連する問題