2013-06-28 2 views
0

에서 다차원 배열에 액세스하는 방법을 나는이처럼 보이는 파일이 :

내가 배열 @letters에서 파일을로드 한
A:B:C 
G:P:T 
K:M:Q 
... 

.

:없이 각 문자를 검색하고 내가 호출하는 다른 스크립트에 매개 변수로 전달해야합니다.

그래서

/bin/kish -x /home/whatever/testscript $letter[0 1] $letter[0 2] $letter[0 3] 

다음

/bin/kish -x /home/whatever/testscript $letter[1 1] $letter[1 2] $letter[1 3] 

어레이의 끝까지.

제안 사항?

+0

을 사용하여 역 참조 목록에 색인을 생성합니다.'split (":")'? [perldoc] (http://perldoc.perl.org/functions/split.html) –

+0

'split'의 첫 번째 인수가 문자열이라고 생각하지 마십시오. 'split/: /'를 사용하십시오. – ikegami

답변

0
while ($line=<FILEHANDLE>) { 
    @letters=split(/\W+/,$line); 
    system("/bin/kish -x /home/whatever/testscript $letters[0] $letters[1] $letters[2]"); 
} 

먼저 FILEHANDLE을 열어야합니다. while() 루프 (첫 번째)는 한 번에 한 줄씩 파일을 읽습니다. 두 번째 줄은 덩어리로 나뉩니다 (영숫자가 아닌 문자 [ ":"]는 청크 사이의 구분을 정의하는 데 사용됩니다). 시스템 라인은 명령 자체를 실행합니다. 마지막 줄 "}"은 루프가 끝나는 위치를 나타냅니다.

1

그래서 우리는 먼저 참조를 사용하는 다차원 배열, 내가 Perl로이 일을 알고있는 가장 좋은 방법을 구축해야합니다

use strict; 
use warnings; 

open(my $fh, "<", "data"); 
my @rows; 
while (my $line = <$fh>) { 
    chomp $line; 
    my @row = split(':', $line) ; 
    push(@rows, \@row); 
}; 

\@row\ 연산자 목록 @rows의 각 요소가 실제로 있다는 것을 의미 다른리스트에 대한 참조 @row. 평소와 같이 목록에

`/bin/kish -x /home/whatever/testscript $rows[0]->[0] $rows[0]->[1] $rows[0]->[2]` 

우선 지수 (이것은 "행"번호) : 이것은 당신과 같이, 추구하는 것 같다 중첩 된 색인의 정렬이 가능합니다. 화살표 연산자 ->은 목록에 대한 참조를 역 참조 한 다음 적절한 "열"번호

+0

배열을로드하는 것이 잘 작동했습니다, 감사합니다! 다음을 사용하여 각 요소를 인쇄 할 수 있습니다. – user1718586

+0

배열을로드하는 것이 좋습니다. 감사합니다! foreach my $ index (0 .. $ # rows) {print "$ rows [$ index] -> [0] \ n"; "$ rows [$ index] -> [1] \ n"; "$ rows [$ index] -> [2] \ n"; 하지만 내가 print ("/ bin/ksh -x/home/blah/test1 $ rows [$ index] -> [0] $ rows [$ index] -> [1] $ rows [$ index] -> [2] "); } 첫 번째 요소 만 스크립트를 실행하고 다른 요소는 스크립트를 실행하지 않습니다. 어떤 아이디어. 감사! – user1718586

+0

당신은'exec'가 아닌'system'을 사용해야합니다. – qwwqwwq