设为首页 收藏本站
查看: 1096|回复: 0

[经验分享] Perl处理输入输出-2

[复制链接]

尚未签到

发表于 2017-5-18 09:05:56 | 显示全部楼层 |阅读模式
声明:本神奇的Perl系列为刘兴(http://deepfuture.iteye.com/)原创,未经笔者授权,任何人和机构不能转载 

 6.say、print、<STDIN>与Chomp
 2个新疑问产生了,这里为什么不用say,好吧,我们通过下面的小例子解释这一切
新建一个perl1-4.txt的文本文件,内容如下:
第1行
第2行
第3行
第4行
我们分别用say和print完成对这个文件的读取
say版本:

#perl1-4.pl
#笔者的ActivePerl安装在d盘下
use 5.010;
open FH,'<./perl1-4.txt';
@mytexts=<FH>;
foreach  $mytext(@mytexts){
  say $mytext;
}
程序运行结果如下:
第1行

第2行

第3行

第4行

print版本:
#perl1-5.pl
#笔者的ActivePerl安装在d盘下
use 5.010;
open FH,'<./perl1-4.txt';
@mytexts=<FH>;
foreach  $mytext(@mytexts){
  print "$mytext";
}
程序运行结果如下:
第1行
第2行
第3行
第4行
say版本在每行后输出一个回车换行,因为perl1-4.txt文件本身每行有一个换行符,因此,每读取文件一行就会多输出1行,这也是say和print的主要区别。某些情况下,我们并不需要换行符,即使有换行符也要去掉,有一个函数能帮我们这个忙:chomp。我们打开 perl1-5.txt,可以看到内容如下:
西红柿
黄瓜
丝瓜
冬瓜
白菜
鸡蛋
我们完成一个小任务,将这些人名在一行内输出
#perl1-6.pl
use 5.010;
open FH,'<./perl1-4.txt';
@mytexts=<FH>;
foreach  $mytext(@mytexts){
  chomp($mytext);
 print “$mytext,”;
}
输出如下:
西红柿 黄瓜 丝瓜 冬瓜 白菜 鸡蛋
因为foreach循环一次,从@mytexts中取得下一个元素放在$mytext中,这个过程并不包括删除每个元素的换行符,这个例子中每个元素就是一行,自然包括换行符,所以必须要使用chomp函数去掉末尾的换行符:chomp($mytext)。
Chomp还有一个地方用得最多,就是接受用户输入时。Perl处理用户键盘输入的语句形式如下:
变量=<STDIN>
我们先看一段程序,这段程序的本意是接受用户输入,并将用户和用户的表妹的年纪在一行内显示出来。
#perl1-7.pl
print "你表妹多大了?";
$myinput1=<STDIN>;
print "你今年多大了?";
$myinput2=<STDIN>;
print "你的年纪是$myinput1,";
print "你表妹的年纪是$myinput2。";
$myinput=<STDIN>;
上面程序中的$myinput1=<STDIN>表示接受输入,并将输入的内容赋值给$myinput1。输出结果如下:
你表妹多大了?15
你今年多大了?22
你的年纪是15
,你表妹的年纪是22
程序并没有按想像中的运行,用户和其表妹的年纪在2行内显示出来,因为Perl接受输入,但并不包括清除用户完成输入最后敲入的换行符。因为应去掉$myinput1所含的换行符。程序修改如下:
#perl1-8.pl
print "你表妹多大了?";
$myinput1=<STDIN>;
print "你今年多大了?";
$myinput2=<STDIN>;
chomp($myinput1);
print "你的年纪是$myinput1,";
print "你表妹的年纪是$myinput2";
输出结果如下,任务完成。
你表妹多大了?15
你今年多大了?22
你的年纪是15,你表妹的年纪是22。
7.读取每行的多列数据
上面的例子涉及的都是单列数据,而多数情况下,我们需要读取文件的多列数据。
我从朋友那得到一份北京现代汽车的报价清单,做为消费者,想从中挑选出10-15万的车型,并显示出来。
清单文件为perl1-9.csv,内容如下:
伊兰特 悦动1.6GL手动舒适型2010款,9.98
伊兰特 悦动1.6GL自动舒适型2010款,10.88
伊兰特 悦动1.6GLS手动豪华型2010款,10.98
伊兰特 悦动1.6GLS自动豪华型2010款,11.98
伊兰特 悦动1.8GLS手动豪华型2010款,12.18
伊兰特 悦动1.8GLS自动豪华型2010款,12.98
……
…...
仔细观察可以发现,型号和价格是用“,”分隔,我们再次使用split函数。
#perl1-9.pl
use 5.010;
open CAR,'<.\perl1-9.csv';
foreach $carmes(<CAR>){
   ($name,$price)=split(',',$carmes);
       chomp($price);
       say "$name:$price万" if $price<15 and $price>10;
}
close CAR;
程序运行结果如下(……表示以下有若干行省略没列出):
伊兰特 悦动1.6GL自动舒适型2010款:10.88万
伊兰特 悦动1.6GLS自动舒适型2010款:10.98万
伊兰特 悦动1.6GLS自动豪华型2010款:11.98万
伊兰特 悦动1.8GLS手动豪华型2010款:12.18万
伊兰特 悦动1.8GLS自动豪华型2010款:12.98万
……
……
 

 

 


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-378621-1-1.html 上篇帖子: perl http模块总结 下篇帖子: Perl BackConnectShell + Rootlab t00l
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表