2013-05-06 2 views
0

다시 도움이 필요합니다.이미 일치하는 항목이 있으면 일치해야합니다.

Excel 스프레드 시트에서 호출 할 항목 목록을 만들려고합니다. A 열에 국가 목록이 있다고 가정 해 보겠습니다.

America 
South Africa 
Belgium 
America 

지금 거기에 대응하는 행의 국가에 부착 된 다른 항목이지만, 열 D에서, 그래서이 같은 첫 번째 셀 국가에 해당하는 다른 열 개 항목이있을 수 있습니다.

______________A__________________________B___________________C___________ 

---------------|----------------|-------------| 

America........|..Samsung.......|...1234......| 

South Africa...|..Dell..........|...54321.....| 

Belgium........|..iPhone........|...2345......| 

America........|..Nokia.........|...9876......| 

가 나는 XML 시트에이를 게시 할,하지만 난 한 번 이상 각 국가를 만들려하지 않는, 그래서 나는 항목에 대한 행을 확인하려면 및 존재하지 않는 경우이를 만듭니다. 그래서 위의 표에서 저는 미국을 두 번이나 가지고 있지만 XML을 한 번만 작성하고 거기에서 다른 항목을 첨부해야합니다.

당분간 시트마다 행이 다르므로 행 데이터를 가져 오는 중입니다. 그런 다음 XML을 작성해야합니다.

use Spreadsheet::Read; 

#use XML::Writer 

my $book = ReadData("InfoDB.xlsx"); 

my @rows = Spreadsheet::Read::rows($book->[1]); 

my $count = 1; 

my @clause_all; 

foreach $tab (@rows) { 
    $count++; 
    @row = Spreadsheet::Read::cellrow($book->[1], $count); 
    @country = $row[1]; 
} 

누군가가이 배열에 어울리는 것을 도와 주시면 어떻게 든 좋을 것입니다. 나는 많은 방법을 시도했지만 완벽한 결과를 얻을 수는 없지만 시도한 각각의 시도를 게시하면 실제로 당신을 지루하게 할 것입니다. :(의 라인을 따라

+0

이 y로하면 쉬울 것이다 ou는 단순히 XML로 모든 것을 내 보낸 다음 거기에서 처리했습니다. – Borodin

답변

0

키로 나라 이름을 사용, 해시 만들기 : 을 그리고 그 키에 저장된 배열 참조에 새 데이터를 푸시 -이 psuedocode입니다 당신은. '그것이 작동되도록하는 스프레드 시트 광기에 뿌려해야 할 것이다. 지금

%countries =(); 
foreach my $row (@rows) { 
    my ($country, $thing, $number) = row2columns($row); 
    push @{ $countries{$country} }, [ $thing, $number ]; 
} 

당신은 당신이 원하는 방식으로 XML로 변환 할 수있는 큰 해시를 가지고있다.

+0

밀에 감사드립니다. 반드시 시도해보십시오. 나에게 의미가 있습니다. 감사! –

0

뭔가 :

my @country; 
foreach my $tab (@rows) { 
    ... 

    # The smart match operator (~~) will return true if the value on the 
    # left is found in the list on the right. 
    unless ($row[1] ~~ @country) { 
     # do the things you need to do then add the country to the list 
     push @country, $row[1]; 
    } 
} 
+0

달콤한 것들, 나는 그것으로 놀아서 시도해 볼 것입니다. 매우 감사! –

관련 문제