2013-06-28 42 views
0

訪問多維數組我有一個看起來像這樣的文件:如何在Perl

A:B:C 
G:P:T 
K:M:Q 
... 

我曾在一個陣列@letters加載的文件。

我需要檢索沒有:的每個字母,並將它作爲參數傳遞給我調用的另一個腳本。

所以

/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」; print「$ rows [$ index] - > [1] \ n」; print「$ rows [$ index] - > [2] \ n」;但是當我用exec(「/ bin/ksh -x/home/blah/test1 $ rows [$ index] - > [0] $ rows [$ index] - > [1] $ rows [$ index] - > [2]「); }它只執行第一個元素的腳本,而不是其他的。有任何想法嗎。謝謝! – user1718586

+0

你應該使用'system'而不是'exec' – qwwqwwq