Perl !!!

Phạm Quang Minh
(Minh172)

New Member
Cái này em cũng post ở AIVN group nhưng không có ai trả lời, nếu ai biết chỉ dùm với.

*********************************************************

Em phai viet mot cai chuong trinh bang Perl, dung UPGMA algorithm
trong Bioinfomatic de compute a phylogenetic tree from distance data.

Hien tai em chua biet lam the nao de lay data tu input file.

data o input file co dang ma tran:

Species A B C D
B 9 - - -
C 8 11 - -
D 15 18 5 -

em muon chuyen no vao trong %hash de sau do tinh toan.

%hash = ('AB', 9, 'AC', 8.....);

Ngoai ra em muon hoi la @ARGV trong perl dung the nao a? Em search
tren google va doc mot so quyen sach ve perl trong thu vien truong
em thi no giai thich khong ro rang lam nen chua hieu.

Cam on moi nguoi nhieu.
 
@ARGV là array chứa command line của perl. Giả sử cái program của chú chạy như thế này
run x.html y.html z.html
thì @ARGV sẽ chứa ('x.html', 'y.html', 'z.html') và có thể access đến elements bằng cách invoke $ARGV[0], $ARGV[1], $ARGV[2]

Vấn đề của read input file thì rất đơn giản. Chú read tất cả vào một cái array trước rồi convert it into hash sau cũng được. Anh không hiểu cái file format của chú post cho lắm, chú cứ cho nguyên một cái file lên anh xem thì mới biết được. Còn mấy cái syntax để open chắc chú cũng không cần giúp đúng không? Nếu chú viết CGI thì có nhiều free module đã được viết sẵn đấy, chú có thể dl về.
 
:D bác AT có thể post lên đây một complete example program co dùng @ARGV kèm chú thích được không ạ? Em vẫn không hiểu. Cái bác giải thích thì trong quyển Perl for Bioinformatics của James Tisdall cũng có nói nhưng cách nó dùng em không hiểu.

Vấn đề của read input file thì rất đơn giản. Chú read tất cả vào một cái array trước rồi convert it into hash sau cũng được

read input file vào một array thì em làm được, nhưng convert sang hash thì em chưa biết làm thế nào, bác có thể chỉ cho em được không ?
 
Chú post a few lines of the input file cho anh rồi anh viết cho cái sample code dùng cả @ARGV lẫn read from cái input file đó.
 
Em viết cái input file rồi đấy chứ:

\ A B C D
B 9 - - -
C 8 11 - -
D 15 18 5 -

Một cái ma trận, nhưng chỉ cần quan tâm đến nửa dưới thôi vì đối xứng.
 
Chỉnh sửa lần cuối:
This might help

#!/usr/local/bin/perl
open(FILEIN,$ARGV[0]) || die "Cannot open file $ARGV[0] $!\n";

$firstline=<FILEIN>;
$num = 5

@info=split //,$firstline,$num;
@lines = <FILEIN>;

for ($i = 1; $i < $num; $i++) {
for ($j = $i; $j < $num; $j++) {
$line = $lines[$j];
@line_elem = split //,$line,$num;
$hash{$info[$i].$line_elem[0]} = $line_elem[$i];
}
}
$i++;
}

The syntax might not be correct and robust but hope you get the idea.

Cheer,
ĐTrang
PS: shortcut to read every lines from the command-line file

#!/usr/local/bin/perl -w
@line = <>;

what a great language!!!!!!
 
Chỉnh sửa lần cuối:
Back
Bên trên