2013-06-12 1 views
-3

기본적으로 문자열에 저장된 테이블을 해시 배열로 변환하려고합니다. 내 데이터는 다음과 같습니다.다중 행 문자열을 Perl의 해시 배열로 변환하는 방법

model     |part_number |type    |serial_number | 
----------------------|--------------|-----------------|----------------| 
SCBE-MX-S    |750-031391 |CB    |ZV1111   | 
SCBE-MX-S    |750-031391 |CB    |ZR1111   | 
SCBE-MX-S    |750-031391 |CB    |ZV1111   | 

어떻게 이것을 해시 배열에 넣을 수 있습니까?

그래서 기본적으로 여기에 지금까지 내 코드입니다

array 0 
model => SCBE-MX-S 
PartNumber => 750-031391 
type => CB 
serialNumber => ZV1111 

array 1 
...... 

과 같을 것이다. 그것은 괜찮은 일하지만 지금은 단 하나의 배열 대신 해시의 배열을 사용하여 변환해야합니다.

use strict; 
use warnings; 

my @data; 
my @data_; 
my @index_; 

my $input = `lrm show -t=model,part_number,type,serial_number component\\(chassis_resource_name=wf-nashville\\)`; 

@data=split(/\n/, $input); 

foreach my $token (@data){ 
    @data_ = split(/\|/,$token); 
    my %fields = (
    "model" => $data_[0], 
    "partNumber" => $data_[1], 
    "type" => $data_[2], 
    "serialNumber" => $data_[3], 
); 
    push @index_, \%fields; 
} 

use Data::Dump; 
dd \@index_; 

출력

[ 
    { 
    model => "25 records found.", 
    partNumber => undef, 
    serialNumber => undef, 
    type => undef, 
    }, 
    { 
    model => "model     ", 
    partNumber => "part_number ", 
    serialNumber => "serial_number ", 
    type => "type    ", 
    }, 
    { 
    model => ("-" x 22), 
    partNumber => "--------------", 
    serialNumber => "----------------", 
    type => "-----------------", 
    }, 
+4

는 어디 붙어 있습니까? – Amey

+2

줄 바꿈에서 문자열 배열로 분할합니다. 한 줄을 하나의 해시로 변환하는 함수로 매핑합니다. –

+0

저는 Perl을 처음 사용하기 때문에 실제로 이런 일이 일어나도록 코드를 작성해야합니다. – Korey

답변

2

나는 당신이 물어 그러나이 할 것입니다, 당신은이 간단한 문제를 직접 해결하기 위해 전혀 노력을하지 않은 것으로 보인다 매우 실망입니다.

use strict; 
use warnings; 

my @data; 

while (<DATA>) { 
    my %fields; 
    @fields{qw/ model PartNumber type serialNumber /} = /[^\s|]+/g; 
    push @data, \%fields if $fields{PartNumber} =~ /\d/; 
} 

use Data::Dump; 
dd \@data; 


__DATA__ 
model     |part_number |type    |serial_number | 
----------------------|--------------|-----------------|----------------| 
SCBE-MX-S    |750-031391 |CB    |ZV1111   | 
SCBE-MX-S    |750-031391 |CB    |ZR1111   | 
SCBE-MX-S    |750-031391 |CB    |ZV1111   | 

출력

[ 
    { 
    model => "SCBE-MX-S", 
    PartNumber => "750-031391", 
    serialNumber => "ZV1111", 
    type => "CB", 
    }, 
    { 
    model => "SCBE-MX-S", 
    PartNumber => "750-031391", 
    serialNumber => "ZR1111", 
    type => "CB", 
    }, 
    { 
    model => "SCBE-MX-S", 
    PartNumber => "750-031391", 
    serialNumber => "ZV1111", 
    type => "CB", 
    }, 
] 
+0

어쩌면 Perl 경험이있는 사람이 간단 할 수 있습니다. 아마도 온라인에서 문제를 발견하는 데 어려움을 겪고있는 것 같지만 새로 왔고 어렵습니다. 은 무엇입니까? 이것은 대신 문자열 변수에 대해 작동하지 않는 것 같습니다. – Korey

+0

@Korey - [검색 엔진이 있습니다.] (http://perldoc.perl.org/SelfLoader.html) [사용하십시오.] (http://startperl.blogspot.com/2007/12/data-virtual-file -in-perl.html) –

+1

Perl에 대한 지식이 거의 없기 때문에 직접 작성하지 않아도되고 언어를 배우거나 프로그래머를 고용하여 코드를 작성할 수 있습니다. Stack Overflow에서 무료 프로그래밍 작업을 요청하는 것은 핑계가 아닙니다. 'DATA'는 내장 된 파일 핸들입니다.이 파일 핸들을 사용하면 편의상 '__DATA__' 마커 뒤에 프로그램 소스와 동일한 파일에서 데이터를 읽을 수 있습니다. 실제 파일을 열거 나 파일의 이름을 명령 행 매개 변수로 전달하고'<>'를 사용하여 읽어야합니다. – Borodin

관련 문제