当前位置: 首页 > news >正文

perl文本处理总结[2]

7. 文件成行读入
把一个文件读入一个字符串
方法:
my $contents;
{
local $/;
$contents = <IN>;
}

my $contents = do {local $/; <IN>}
例子: 文件中以空行为语块分割的标记,把语块内部顺序保留,而语块间逆序输出。
#!
open IN,"input.txt";
open OUT,">output.txt";
my $contents;
{
local $/;
$contents = <IN>;
}
my @all = split("\n\n",$contents);#不同文件格式也可能是my @all = split("\n\r\n",$contents);
for(my $i=@all-1;$i>=0;$i--)
{
print OUT $all[$i],"\n\n";
}
close(IN);
close(OUT);

8. 如何用foreach每次读取多句?
那就用<FH>读三次,
while (!eof(FH)){
$line1 = <FH>;
$line2 = <FH>;
$line3 = <FH>;
...
}


9 (非)贪婪(non-greedy)匹配

? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,
匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,
而默认的贪婪模式则尽可能多的匹配所搜索的字符串。
例如,对于字符串 "oooo",’o+?’ 将匹配单个"o",而 ’o+’ 将匹配所有 ’o’。

如果你使用一个旧的Perl版本, 并且你不想贪婪匹配, 你必须使用否定的字符类。(真的, 你正在得到一种限制的贪婪匹配)

在Perl的现在版本中, 你能通过在数量词后使用一个问号,
强迫进行非贪婪的最小匹配。 
同样的用户名匹配将是/.*?:/。现在这个.*?将尽可能匹配少的字符, 而不是尽可能多的字符,
所以它停在第一个冒号而不是最后一个冒号。

例子:
问题是这样的:
比如给一句话,形式如下:
I(i)/xx came(come)/xx ,(,)/xx ((()/xx {({)/xx how it like(how it like)/yy
解释格式:
词组,然后是用小括号包围的词组还原形式,然后是斜杠'/',然后是词性..

要求: 把还原形式去掉
例如上句想得到:
I/xx came/xx ,/xx (/xx {/xx how it like/yy

难点: 1. 词组可能是左小括号'(' 即可能有词组: ((()/xx
2. 各种标点,括号() [] {}等
3. 好几个词的词组,如: How it like(how it like)/xx

做法: 拆分成一段一段来做吧,要不然用regexp处理各段之间的混淆很麻烦:

my $str="I(i)/xx came(come)/xx ,(,)/xx ((()/xx )())/x {({)/xx how it like(how it like)/yy";
my $res='';
while($str=~m|(.*?/\S+)|g) {# 非贪婪匹配,否则结果就是 I/yy
my $token=$1;
$token=~s|\(\(\(\)|\(|g;
$token=~s|\)\(\)\)|\)|g;
$token=~s|\(.*\)||g;
$res.=$token;
}
print $res,"\n";

10 .如何判断某个字符在一个串中出现几次?

$a="abbababababaaadjdsj";
$n=($a=~tr/a//);
print"thereare$nain'$a'\n";

perldoc-qcount可以找到

11.perl怎样判断一个数组为空?

_________________________

if(@a){
print"\@ahaselement!";
}
或者:
unless(@a){
print"\@aisempty!";
}
____________________
if(scalar@a==0)

____________________

@a==1
$#a==-1
____________________

12. 统计英文平均句长,字符数

#!
#统计输入文件的平均句长。
#分为两种:
#1.average word length,count by space number
#2.average character length ,count by length() function
#并且要得到full-passage,dlg,essay三种分别统计
use strict;
my $infile = shift;
my $outfile = shift;
open IN,"$infile" or die "can not open inputfile $infile $!\n";
open OUT,">$outfile" or die "can not open outputfile $outfile $!\n";

my $dlg_word_num=0;
my $essay_word_num=0;
my $dlg_chara_num=0;
my$essay_chara_num=0;
my $lines_count=0;
foreach my $line(<IN>){
$lines_count++;
my $word_num = ($line=~tr/ / /);
my $chara_num = length($line);
$word_num += 1;#词数等于空格数加1

if($lines_count<=437){
$dlg_word_num+=$word_num;
$dlg_chara_num+=$chara_num;
}
elsif($lines_count<=746){
$essay_word_num+=$word_num;
$essay_chara_num+=$chara_num;

}
else
{
print "something wrong with the input file:too many sentence?\n"

}

}
print OUT " avg_word_num avg_chara_num\n";
print OUT " dlg: ",$dlg_word_num/437," ",$dlg_chara_num/309," \n";
print OUT "essay: ",$essay_word_num/437," ",$essay_chara_num/309," \n";
print OUT " all: ",($dlg_word_num+$essay_word_num)/746," ", ($dlg_chara_num+$essay_chara_num)/746;

13. 对数据进行察看

#!
use strict;

require Data::Dumper;
my @trans=("1","asdas",2,3,1.2,"asas");
#print join("\n",@trans);
print Data::Dumper::Dumper(@trans);

14

相关文章:

  • 方形变圆形html动画,CSS3 方形到圆角到圆形变换动画
  • 中移动员工工资待遇全揭秘
  • html代码格式化vscode,Vscode代码格式化
  • 视频:百度打击google的最新广告 google执行官估计得吐血
  • 从psd到css+div+html网页制作全流程过程讲解,从PSD到CSS+DIV+HTML网页制作全流程过程讲解_docx...
  • 1 制作一个表格html表格,学术论文表格制作速成!
  • WINDOWS专集大集合,绝对是精品中的精品
  • 鲁东大学2021高考成绩查询,2021年鲁东大学录取结果查询网址入口及录取结果公布时间...
  • 深山红叶袖珍PE系统工具箱说明 V22 正式版
  • 2021云南省卫生副高考试成绩查询,2021年卫生高级职称考试准考证打印入口:云南卫生健康人才网...
  • html文件无法通过复制粘贴传输,远程桌面无法复制粘贴传输文件解决办法
  • 计算机网络实验指导书谢希仁,计算机网络[谢希仁]实验指导书.doc
  • 燕山大学计算机网络课程设计,燕山大学计算机网络课程设计报告1.doc
  • 计算机大赛剪辑的视频,视频创作剪辑大赛活动策划
  • 大学生计算机课程内容1000字,大学生计算机实习报告1000字【一】.doc
  • pdf文件如何在线转换为jpg图片
  • SegmentFault 2015 Top Rank
  • Spring Cloud中负载均衡器概览
  • tab.js分享及浏览器兼容性问题汇总
  • Vue 动态创建 component
  • windows下如何用phpstorm同步测试服务器
  • 复杂数据处理
  • 猴子数据域名防封接口降低小说被封的风险
  • 基于web的全景—— Pannellum小试
  • 简单数学运算程序(不定期更新)
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 数据结构java版之冒泡排序及优化
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • const的用法,特别是用在函数前面与后面的区别
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • 数据库巡检项
  • ​iOS安全加固方法及实现
  • !$boo在php中什么意思,php前戏
  • #宝哥教你#查看jquery绑定的事件函数
  • (1)bark-ml
  • (1)Nginx简介和安装教程
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (二十四)Flask之flask-session组件
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (强烈推荐)移动端音视频从零到上手(下)
  • (三)uboot源码分析
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转)scrum常见工具列表
  • ***利用Ms05002溢出找“肉鸡
  • .NET 4.0中的泛型协变和反变
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .net反编译工具
  • .NET下的多线程编程—1-线程机制概述
  • .NET序列化 serializable,反序列化
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • @WebService和@WebMethod注解的用法
  • @基于大模型的旅游路线推荐方案