2
回答
Perl(格式和字符串处理)
华为云实践训练营,热门技术免费实践!>>>   

众所周知Perl处理字符串的功能非常强大,PerlPractical Extraction and Reporting language)处理格式的功能也非常强大。这节我们就开始学些Perl的格式和字符串处理。这些程序以后都可以直接拷贝使用,每段小程序以#隔开。

 

学习Perl推荐使用Perl IDE(功能虽然无法和VS 2005Eclipse 3.1那样功能那样强大),但是其支持断点处理功能,已经比直接使用命令行功能强大多了。

此免费软件的下载点:http://open-perl-ide.sourceforge.net/

其他Perl软件列表看此推荐:http://www.shengfang.org/blog/p/perlidesumm.php

 

Perl

格式处理

 

#1.format

 

 

format STDOUT=

 

 

@<<<<<<<<@||||||||@>>>>>> @.## @.######

 

 

$string1,$string2,$string3,$pi,$pi

 

 

.

 

 

$string1="zhang";

 

 

$string2="love";

 

 

$string3="chan";

 

 

$pi="3.1415926";

 

 

write;

 

 

##########

 

$display=1;

 

 

if($display)

 

 

{

 

 

  $here= <<EOD;

 

 

  zhang

 

 

  bufeng

 

 

  love

 

 

  China.

 

 

EOD

 

 

  print "$here\n";

 

 

}

 

 

########

 

$: ="";

 

 

format STDOUT=

 

 

Name:^<<<<<<<<<<

 

 

     $person

 

 

Sex:^<<<

 

 

     $person

 

 

Age:^<

 

 

     $person

 

 

.

 

 

$person="zhangbufengmale23";

 

 

write;

 

 

########

 

format standformat_top=

 

 

@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

 

 

"Page $%"

 

 

 

        Employees

 

 

FirstName   LastName    ID      Extension

 

 

-----------------------------------------

 

 

.

 

 

format standformat=

 

 

@<<<<<<<<<<<@<<<<<<<<<<<@<<<<<<@<<<<<

 

 

$firstname  $lastname   $ID    $extension

 

 

.

 

 

$firstname="Cary";

 

 

$lastname="Grant";

 

 

$ID="123";

 

 

$extension="x45";

 

 

 

open(FILEHANDLE,">>D:\\perlproject\\page.txt") or die("can't open this file");

 

 

select FILEHANDLE;

 

 

$~=standformat;

 

 

$^=standformat_top;

 

 

$==1;

 

 

for($loop=1;$loop<10;$loop++)

 

 

{

 

 

  write;

 

 

}

 

 

Perl

字符串处理

 

熟悉其最强大的三个函数:substrpackunpack

 

#大小写处理函数 lc(转为小写) uc

(转为大写)

 

 

$text="ZhangBufeng";

 

 

$text2=lc $text;

 

 

$text3=uc $text;

 

 

print "$text2\n";

 

 

print "$text3\n";

 

 

#将第一字母变为小写(lcfirst),将第一个字母大写(ucfirst

 

$string="zhang";

 

 

$string2=lcfirst $string;

 

 

$string3=ucfirst $string;

 

 

print "$string2\n";

 

 

print "$string3\n";

 

 

#顺序查找string位置(index),逆序查找string位置(rindex

 

$string="zhang bu feng zhang bu feng";

 

 

$position1=index($string,"bu");

 

 

$position2=index($string,"bu",10);

 

 

$position3=rindex($string,"zhang");

 

 

$position4=rindex($string,"zhang",10);

 

 

print "$position1,$position2,$position3,$position4\n";

 

 

#获取子串函数substr

,功能非常强大,可以直接支持以一个字符串代替字符串的一个子串。

 

#字符串处理的

MVP

 

 

$text="Zhang bufeng

ChanChan";

 

 

$replace_to="

";

 

 

$replace_with="喜欢

";

 

 

substr($text,index($text,$replace_to),length($replace_to),$replace_with);

 

 

print "$text\n";

 

 

#packunpack

函数用于字符串的打包和解包,功能非常强大,支持多种打包格式

 

#字符串处理的

MVP

 

 

$decimal=17;

 

 

$newdecimal=unpack("B32",pack("N",$decimal));

 

 

print "$newdecimal\n";

 

 

 

$string="张步峰爱中国

";

 

 

@array1=unpack("c*",$string);

 

 

@array2=unpack("C*",$string);

 

 

print (join(",",@array1),"\n");

 

 

print (join(",",@array2),"\n");

 

 

$string1=pack("c*",@array1);

 

 

$string2=pack("C*",@array2);

 

 

print "$string1\n";

 

 

print "$string2\n";

 

 

 

#

打印格式sprintf

 

 

$value=1234.56789;

 

 

print sprintf "%.4f\n",$value;

 

 

#字符串比较函数 eq,ne,cmp,lt,gt,le,ge.使用cmp

就好。

 

$string1="步峰

";

 

 

$string2="步峰

";

 

 

if($string1 eq $string2)

 

 

{

 

 

  print "$sting1==$string2\n";

 

 

}

 

 

if($string1 ne $string2)

 

 

{

 

 

   print "$string1!=$string2\n";

 

 

}

 

 

if( ($string1 cmp $string2)==0)

 

 

{

 

 

   print "$string1==$string2\n";

 

 

}

 

 

$string1="zhang";

 

 

$string2="chan";

 

 

if($string1 lt $string2)

 

 

{

 

 

  print "left < right \n";

 

 

}

 

 

if($string1 gt $string2)

 

 

{

 

 

  print "left > right \n";

 

 

}

 

 

if($string1 le $string2)

 

 

{

 

 

  print "left < right \n";

 

 

}

 

 

if($string1 ge $string2)

 

 

{

 

 

  print "left > right \n";

 

 

}

 

 

#

 

 

$string="张步峰爱中国

";

 

 

@array=split(//,$string);#这种方法无法将其进行分成"","","","","",""等单字

 

print (join(",",@array),"\n");

 

 

 

#

演示中文字符夹带英文字符的反序(使用了多个函数)

 

print "------begin-----\n";

 

 

$string1="中国love!张步峰

";

 

 

@array=unpack("C*",$string1);

 

 

$length=$#array;#此数组的最后一个下标

 

for(;$length>=0;)

 

 

{

 

 

   if($array[$length]<=128)

 

 

   {

 

 

     #英文或者标点

 

     push(@array2,$array[$length]);

 

 

     $length=$length-1;

 

 

   }

 

 

   else

 

 

   {

 

 

     #中文字符

 

     push(@array2,$array[$length-1]);

 

 

     push(@array2,$array[$length]);

 

 

     $length=$length-2;

 

 

  

}

 

 

}

 

 

$string2=pack("C*",@array2);

 

 

print "$string2\n";

 

 

#

 

 

$dir=dir;

 

 

print qx/$dir/;

 

 

@name=qw/zhang bu feng chan chan/;

 

 

print join(",",@name);s

 

 

 

 

 

 


Trackback: http://tb.donews.net/TrackBack.aspx?PostId=851874

 

 

参考资料:《Perl 技术内幕》 Black Book Steven Holzner 

 

 

 

 

 

 

 

 

 

举报
范堡
发帖于9年前 2回/2K+阅
顶部