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

作者: 生信杂谈 | 来源:发表于2017-06-08 14:24 被阅读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);
    

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

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

    相关文章

      网友评论

      • Abelfourier:《精通正则表达式》有相同的题目,用纯正则(回溯?)实现的。

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

      本文链接:https://www.haomeiwen.com/subject/cqxtqxtx.html