我必须从一个文件(.tsv)中查找FBgn ID,然后在新文件(.txt)中查找,并将FBgn ID替换为相应的基因符号。 这是一个学校作业,所以我不是在寻找答案,而只是在正确的方向推动/推动。
这是我到目前为止所拥有的。 (我对编程很陌生。)
#!/usr/bin/perl
use strict;
use warnings;
#Part 1
my $infile = '/scratch/Drosophila/fb_synonym_fb_2014_05.tsv';
open ( FILE, "<", $infile)
or die "Cannot open file $!";
my @data = <FILE>;
foreach my$line (@data) {
my @column = split( /\s+/, $line );
my $columnID = $column[0];
next if ( ! defined( $columnID ));
if ($columnID =~ /(^FBgn\d+)/ ) {
my $ID = $1;
print $ID, "\n";
}
}
#Part2
my %RnaSeq;
my $FBgn;
my $FBgnRnaSeq;
my %RnaSeq = '/scratch/Drosophila/FlyRNAi_data_baseline_vs_EGF.txt';
open (TEXT, "<", %RnaSeq)
or die "Cannot open file $!";
while (my %RnaSeq = <TEXT>) {
$FBgn = get getSymbols($FBgnRnaSeq);
print "$FBgnRnaSeq";
}
close TEXT;
sub getSymbols {
my ($GB_file) = @_;
my $Sym;
if ($GB_file =~/(/^FBgn.\d+/)\t(\d+)\t(\d+)/{
print $1, print $2, print $3, "\n";
}
}
else {
return "error";
}
}
答案 0 :(得分:4)
你没有说你遇到了什么问题,但你的代码是无效的Perl而且不会编译。
以下是一些指示
在检查您的程序编译并执行到目前为止应该执行的操作之前,您应该一次只编写极少数行。在测试之前编写整个程序会使调试变得更加困难
您应该缩进您的代码。这是使您的程序可读的最佳方式,并确保您拥有平衡的大括号和括号
Perl标识符应使用小写字母,数字和下划线。大写字母保留用于全局标识符
.tsv文件可能是制表符分隔文件,因此您应该在制表符上拆分每一行,而不是您编写的多个空格
您应该使用“lexical”文件句柄。 TEXT
和FILE
之类的内容确实有效,但它们非常老套
从文件中读取的行最后会有换行符。你几乎肯定不希望这样,所以你应该在阅读后chomp
行
如果您逐行处理文件,那么您应该一次读取一行,而不是将 all 读取到一个数组中并处理数组
Perl有一个unless
,因此next if (!defined($columnID))
可以更加整齐地编写为next unless defined $columnID
。但是,此时无法定义$columnID
,因此应删除该语句
您正在使用%RnaSeq
作为要打开的文件的名称。这是一个哈希,它是一组字符串与其对应值之间的关系。你的意思是$RnaSeq
您还在阅读文件中的行到%RnaSeq
。这是与文件名相同的变量,当您可以这样做时,您将覆盖文件名字符串。输入行变量的名称通常为$line
,但在这种情况下看起来可能意味着$FBgnRnaSeq
您的子例程{}
getSymbols
不匹配
如果模式匹配成功,则子例程打印一些信息,如果失败则返回'error'
。在成功的情况下没有任何明确的回报,我无法猜测你的意思是什么回来
这是你的程序应该如何修复这些项目,但有一些地方不清楚你的意思,我不得不猜测或只是保留原样。这段代码编译,但我确信它不能满足你的需要。
#!/usr/bin/perl
use strict;
use warnings;
my $infile = '/scratch/Drosophila/fb_synonym_fb_2014_05.tsv';
open my $tsv_fh, '<', $infile or die "Cannot open file: $!";
while (my $line = <$tsv_fh>) {
chomp $line;
my @columns = split /\t/, $line;
my $column_id = $columns[0];
if ($column_id =~ /(^FBgn\d+)/) {
my $id = $1;
print $id, "\n";
}
}
my $fbgn;
my $fbgn_rna_seq;
my $rna_seq = '/scratch/Drosophila/FlyRNAi_data_baseline_vs_EGF.txt';
open my $text_fh, '<', $rna_seq or die "Cannot open file: $!";
while (my $fbgn_rna_seq = <$text_fh>) {
chomp $fbgn_rna_seq;
my $fbgn = get_symbols($fbgn_rna_seq);
print $fbgn_rna_seq, "\n";
}
close $text_fh;
sub get_symbols {
my ($gb_file) = @_;
my $sym;
if ($gb_file =~ /(^FBgn.\d+)\t(\d+)\t(\d+)/ ) {
print $1, print $2, print $3, "\n";
}
else {
return "error";
}
}