免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123456
最近访问板块 发新帖
楼主: yanglc2013
打印 上一主题 下一主题

20积分悬赏,求个perl程序,新手,写了好几个都无果。 [复制链接]

论坛徽章:
0
51 [报告]
发表于 2013-04-02 15:57 |只看该作者
rubyish 发表于 2013-03-31 07:41


你写的code怎么没有了? 我还想学习下呢

论坛徽章:
0
52 [报告]
发表于 2013-04-03 10:37 |只看该作者
回复 51# picbhan

大哥,还有个问题请教你。
如果我想在输出的结果中的结果中,同时加上对应的ref中的数据,比如。
lnc-C1orf227-1:2        chr1        213028819        213031452        -    NM_014053        chr1        213031596        213072705        +        2210

应该怎么修改print。

现在输出的结果形式如下:
lnc-C1orf227-1:2        chr1        213028819        213031452        -


   

论坛徽章:
0
53 [报告]
发表于 2013-04-07 15:02 |只看该作者
回复 54# yanglc2013


    你在下面的代码中加入输出的信息(包括@rd和@id),并且把原来的三个赋值语句改为一个表示已经输出过的flag,这样在后面判断是否是non-overlap的时候就只需要看这个flag是不是真值了。

  1.                 if ($id[2] >= $rd[2] && $id[3] <= $rd[3]) {
  2.                     $result{ref_include_inc} = 1;
  3.                 }
  4.                 elsif ($rd[2] >= $id[2] && $rd[3] <= $id[3]) {
  5.                     $result{inc_include_ref} = 1;
  6.                 }
  7.                 else {
  8.                     $result{overlap} = 1;
  9.                 }
  10.                 if (%result) {
  11.                 if ($result{ref_include_inc}) {
  12.                     print {$ref_include_inc} join("\t", @id), "\n";
  13.                 }
  14.                 if ($result{inc_include_ref}) {
  15.                     print {$inc_include_ref} join("\t", @id), "\n";
  16.                 }
  17.                 if ($result{overlap}) {
  18.                     print {$overlap} join("\t", @id), "\n";
  19.                 }
  20.             }
  21.             else { # if $result is undef, means no overlapped genes
  22.                 print {$non_include} join("\t", @id), "\n";
  23.             }
复制代码

论坛徽章:
0
54 [报告]
发表于 2013-04-08 19:17 |只看该作者
回复 2# picbhan

谢谢啊,你的程序非常好用。还有个难题想请教你,我也写了几个,一塌糊涂啊。

难题.rar (1.89 MB, 下载次数: 9)
   

论坛徽章:
0
55 [报告]
发表于 2013-04-09 13:46 |只看该作者
yanglc2013 发表于 2013-04-08 19:17
回复 2# picbhan

谢谢啊,你的程序非常好用。还有个难题想请教你,我也写了几个,一塌糊涂啊。


首先,我没有看到你说的你也写了几个,我只看到你的问题。
其次,其实你的问题很简单,如果你真认真学了Perl并且自己动手写了,肯定是可以完成的,这根本不是什么难题,仅仅只是简单的格式转换而已。
最后,没有人可以一直帮你写代码,而且这种问题都等着别人给你写代码的话只会降低你自己的效率。好好学perl基础编程吧,足以在生物里用了。
  1. #!perl
  2. use List::MoreUtils 'pairwise';

  3. $fin = 'refGene.txt';
  4. open my $in, '<', $fin or die "Can't open $fin for reading. $!\n";
  5. $fout = 'result.txt';
  6. open my $to, '>', $fout or die "Can't create $fout for writing. $!\n";

  7. while (<$in>) {
  8.     chomp;
  9.     my @t = split;
  10.     @start = split /,/, $t[1];
  11.     @end = split /,/, $t[2];
  12.     pairwise { print {$to} "$t[0]\t$a\t$b\n" } @start, @end;
  13. }
  14. close $in;
  15. close $to;
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP