合并表达式数据

时间:2014-11-02 06:40:53

标签: regex perl

我必须从一个文件(.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";
}
}

1 个答案:

答案 0 :(得分:4)

你没有说你遇到了什么问题,但你的代码是无效的Perl而且不会编译。

以下是一些指示

  • 在检查您的程序编译并执行到目前为止应该执行的操作之前,您应该一次只编写极少数行。在测试之前编写整个程序会使调试变得更加困难

  • 您应该缩进您的代码。这是使您的程序可读的最佳方式,并确保您拥有平衡的大括号和括号

  • Perl标识符应使用小写字母,数字和下划线。大写字母保留用于全局标识符

  • .tsv文件可能是制表符分隔文件,因此您应该在制表符上拆分每一行,而不是您编写的多个空格

  • 您应该使用“lexical”文件句柄。 TEXTFILE之类的内容确实有效,但它们非常老套

  • 从文件中读取的行最后会有换行符。你几乎肯定不希望这样,所以你应该在阅读后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";
    }
}