免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 Perl 除法题
最近访问板块 发新帖
楼主: leigh111
打印 上一主题 下一主题

除法题 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-09-28 10:54 |只看该作者

回复 #20 leigh111 的帖子

清掉旧数据  不然统计第二段的时候会加上第一段的 。

论坛徽章:
0
22 [报告]
发表于 2009-09-28 11:29 |只看该作者
明白了。谢谢您,帮了我很大的忙。我是刚学PERL.很多问题问的见笑了。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
23 [报告]
发表于 2009-09-28 11:47 |只看该作者

回复 #17 leigh111 的帖子

你不会自己修改?

论坛徽章:
0
24 [报告]
发表于 2009-09-28 12:26 |只看该作者
我感觉我现在做PERL 就跟碰运气似地,有时候复杂点的代码一看就明白自己写也可以,有时候答案告诉你了还是无从下手,其实我感觉还是思考问题时逻辑有问题。这PERL 学起来有时候兴奋有时候也挺打击自信心的。刚学,看来还是缺实践。

论坛徽章:
0
25 [报告]
发表于 2009-09-28 14:27 |只看该作者
原帖由 leigh111 于 2009-9-28 12:26 发表
我感觉我现在做PERL 就跟碰运气似地,有时候复杂点的代码一看就明白自己写也可以,有时候答案告诉你了还是无从下手,其实我感觉还是思考问题时逻辑有问题。这PERL 学起来有时候兴奋有时候也挺打击自信心的。刚学 ...



这个,不说什么了,我也很赞同你的感受……其实也没有什么捷径,多看书,多读代码,多写代码而已

顺便说下,最后的代码,还是有点问题,最后一个的 title 下,如果其下的内容也符合匹配条件,将无法打印,自己处理下吧~

论坛徽章:
0
26 [报告]
发表于 2009-09-28 17:19 |只看该作者
原帖由 dugu072 于 2009-9-28 14:27 发表



这个,不说什么了,我也很赞同你的感受……其实也没有什么捷径,多看书,多读代码,多写代码而已

顺便说下,最后的代码,还是有点问题,最后一个的 title 下,如果其下的内容也符合匹配条件,将无法打 ...


呵呵  不好意思  确实存在缺陷。
用这个吧,那个太繁琐了。
#!/usr/bin/perl-w

use strict;
open (IN,'putest.d') or die "$!";
my $file_contend =  join '',<IN>;
&nbsp;&nbsp;&nbsp;$file_contend =~ s/ //g;
my %rf= ($file_contend  =~ /(NTSEQ.*?\r\n)([\d\D]*?)(?=NTSEQ)/g);
my($key,$value);
while (($key,$value) = each %rf){
&nbsp;&nbsp;&nbsp;&nbsp; print $key.$value."\n" if (length($value)%3 == 0);
}


论坛徽章:
0
27 [报告]
发表于 2009-09-28 18:46 |只看该作者
原帖由 toniz 于 2009-9-28 17:19 发表


呵呵  不好意思  确实存在缺陷。
用这个吧,那个太繁琐了。
#!/usr/bin/perl-w

use strict;
open (IN,'putest.d') or die "$!";
my $file_contend =  join '',;
&nbsp;&nbsp;&nbsp;$file_contend = ...



代码虽然精简,但导致调试麻烦多了~尤其是,我跑了下,跑不过;调试下,感觉有不少错误……
$file_contend =~ s/ //g; #这里不用 "\s+",是想继续保留 换行符 嘛?
my %rf= ($file_contend  =~ /(NTSEQ.*?\r\n)([\d\D]*?)(?=NTSEQ)/g) #要知道上面保留了换行符的, m//匹配,缺省按行匹配吧?虽然你用了"\r\n" 但是,应该什么都匹配不到吧?

但如果修改为: $file_contend =~ s/\s+//g,没有换行符了,虽然你可以用一行来匹配,但是 如果 title 后面除了数字,还有字母的话,你怎么和下面的数据区分?

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
28 [报告]
发表于 2009-09-28 22:13 |只看该作者
  1. #!/bin/perl
  2. use warnings;
  3. use strict;

  4. open (IN,'d:\perl\genes\') || die "$!";
  5. open (OUT,'>d:\perl\genes_fasta\.fasta') || die "$!";
  6. my($title,$seqs);

  7. while (<IN>) {
  8.   if (/^NTSEQ/) {
  9.     if ($seqs && !(length($seqs)%3)) {
  10.       print OUT $title,$seqs;
  11.     }
  12.     $title = $_;
  13.     $seqs = undef;
  14.   } else {
  15.     $seqs .= $_;
  16.   }
  17. }
复制代码

[ 本帖最后由 blackold 于 2009-9-28 22:14 编辑 ]

论坛徽章:
0
29 [报告]
发表于 2009-09-29 09:11 |只看该作者
原帖由 blackold 于 2009-9-28 22:13 发表
#!/bin/perl
use warnings;
use strict;

open (IN,'d:\perl\genes\') || die "$!";
open (OUT,'>d:\perl\genes_fasta\.fasta') || die "$!";
my($title,$seqs);

while () {
  if (/^NTSEQ/) {
     ...



我发的代码肯定是可以跑的。你是哪个地方跑不过了?
其实正则表达式那里,用/r/n或者/r或者/n,具体要看你保存文本的格式是 DOS还是mac还是unix。这个其实只是换行符的问题。

论坛徽章:
0
30 [报告]
发表于 2009-09-29 09:28 |只看该作者
早上一上班就看到这么多好帖子,真的很高兴。谢谢大家的帮助。
我昨天重新看这些文件内容的时候才发现:
比如说这段:NTSEQ       267
            atggaaaatagttacaagatgggagttaaaaatattgtattgttatttgccacattttta
            ttaagtgttttagcagaagatcaaaaggatggagaaattttagcagtaactccaagagat
            ttaaagttgactccttttaatttatcagctttaattttagtttctttttttactatgttg
            attatttttattgttggattaactattgatactgatactccaactagatttgaagaaaag
            atgccacctattatgaaggaatattaa
数字267其实正好是这段字符个数的总和,那么我直接挑出数字 $_ =~ s/NTSEQ\s+(\d+)/$1/g;  这样把数字全部取出来,对$_除3取模应该可以得到所要的段(文本)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP