生物信息生物信息杂谈码神之路:Perl篇

#Perl# 给文本中的数字添加千分符

2017-06-08  本文已影响58人  生信杂谈

日常做完生信分析后,我们会对某些数据进行统计并做成一份统计结果,而统计结果出现数字是再正常不过的。100,1000,100000这样的还好,但是对于如基因表达count等数据,几百万上千万都不为过。因此,为了方便阅读,在合适的地方添加千分符是很有必要的。如一万是这样的:10,000,100万是这样的:1,000,000。

今天安利一段对文档中的数字添加千分符的perl程序:

use strict;
use warnings;
my $input =shift;
my $output=shift;

open IN,$input;
open OUT,">$output";
while(my $line=<IN>){

     if($line=~s/(\d+.{0,1}\d+)/&separate($1)/eg);  #匹配数字,每匹配到一次,进行添加千分符操作

      print OUT $line;

}

sub separate{
       my $number=$1;
       if(substr($number,0,1)==0){return $number;}  #首位数字wei0,直接返回原数字
       if($number=~m/./){
                 return $number;   #如数字带有小数点,直接返回原数字
       }
      if(length($number)>3){    #数字长度大于3,添加千分符
              my $l=length($number);
              my $i=int $l/3;    #对3取余数
              my $j=$l%3;       #对3取模
              my $newnum="";   #添加千分符后的变量
              my $h=substr($number,0,$j);
              for(;$i>0;$i--){      #循环添加千分符
                    if($j!=0){$newnum=$newnum.$h.",";}  #如模不为0,则在第$j位置添加千分符
                    $h=substr($number,$j,3);
                     $j+=3;
             }
             $newnum=$newnum.$h;
             return $newnum;
      }
       else{return $number;}  #数字长度小于3,则返回原数字
    }
  close(IN);
  close(OUT);

这个程序思路不难,关键是要灵活运用模式匹配和函数,即首先要知道自己要干嘛,然后边写边想吧。

更多原创精彩内容敬请关注生信杂谈

上一篇下一篇

猜你喜欢

热点阅读