perl问题
发布网友
发布时间:2022-04-14 23:01
我来回答
共3个回答
热心网友
时间:2022-04-15 00:30
正则表达式(Regular Expression)方法可以满足你上面所需的要求。
正则表达式是你的好朋友
Perl的正则表达式句法能够有助于让你的代码看起来是非门外汉的作品,这就导致有的时候Perl编程的入门者避免使用regexen。这真的是一个大错误。正则表达式为 Perl编程语言增添了很大的能力,常常能够让程序用十行代码就完成其他用五十行完成的任务。正则表达式是由一些缩写组成的表达式,用于匹配字符串的模式,这些字符串可以被用寻找和操控大字符串里的小字符串。所以Perl黑客有必要学习和熟练掌握regex句法。
#!/usr/bin/perl
#ans.pl
my $file;
while (<>){s/^\s+$//;$file.=$_};
my @data=split/\./,$file;
for (@data){
/.*(^\d.*>.*\d$)/sm; #取得最后时间行
my $time=$1;
s/^\d+:.*\d$//gm; #删除时间行
s/^\d+\n//gm; #删除数目行
s/$/./; #加上点号
s/\n+/\n/g; #删除空行
print ++$num,"\n",$time,$_,"\n";
}
=====================
perl ans.pl yourfile.txt
正则表达式是 Perl 语言的一大特色,也是 Perl 程序中的一点难点,不过如果能够很好的掌握他,就可以轻易地用正则表达式来完成字符串处理的任务,当然在设计中就更能得心应手了。
热心网友
时间:2022-04-15 01:48
# chop #删除字符串最后一个字符 ..................$str=chop($str)
# keys #取哈希数组名称 ..........................@array=keys(%array)
# values #取哈希数组的值 ..........................@array=values(%array)
# split #将字符串分割成数组 ......................@array=split(/ /,$str)
# reverse #让数组逆序输出,元素里的字符也会逆序 .....@array=reverse(@array)
# sort #让数组从小到大排序 ......................@array=sort(@array)
# length #取字符串长度 ............................$len=length($str)
# substr #取字符串里的字符 ........................$string=($str,2,5)
# index #查找字符在字符串中的位子 ................$num=index($str,"abc")
# push #在数组最后添加一个新元素 ...............@array=push(@array,$str)
# pop #删除数组最后一个元素,并输出 .............$str=pop(@array)
# unshift #在数组第一个元素前添加元素 ..............@array=(@array,$str)
# shift #删除数组第一个元素,并输出 ...............$str=shift(@array)
# join #在一个数组元素之间加上字符,输出到字符串 .$string=join(@array,";")
# grep #将符合模式的元素输出 ....................$str/@array=grep(@array,/abc/)
# hex #将十六进制数转换成十进制 ................$str=hex('abc')
# rand #产生随即数字 ............................$num=int(rand(10))
#localtime #产生时间 ................................@array=localtime(time)
# die #结束程序并输出后跟的字符串 ..............die "发生错误"
同是菜鸟,给你点函数吧,
再给你点建议,先全组合到一起,然后根据句号分割
# join #在一个数组元素之间加上字符,输出到字符串 .$string=join(@array,"")
# split #将字符串分割成数组 ......................@array=split(/. /,$str)
用到的这两个函数
热心网友
时间:2022-04-15 03:23
不要迷信正则,我的运行结果:
$ perl hebing.pl
1
00:00:09,855 --> 00:00:14,724
Britain was an object of desire.
2
00:00:26,295 --> 00:00:35,803
Tacitus declared it worth the conquest,
the best compliment
that could occur to a Roman.
我实现了,但是bug都没判,最好只在每段字幕最后有一个句号。
字幕文件命名为 zimu.txt,会生成zimu_new.txt,放在一个目录下。
#!/usr/bin/perl -w
use strict;
use warnings;
main(@ARGV);
sub main
{
open(ZIMU,'<zimu.txt'); #读进来
my @zimutxt=<ZIMU>; #数组获取行
my $current_content; #暂存内容
my @zimu_new; #最终内容
my ($first_time,$last_time); #获取时间
my ($current_first_time,$current_last_time); #暂存时间
my $newline=1; #序号
foreach(@zimutxt){
if(/^(\d)$/){#不干啥,抛弃原序号
}
elsif(/(-->)/){ #找时间行
chomp $_;
my $tmp=$_;
($current_first_time,$current_last_time)=split(" --> ",$tmp); 时间行时间拆分
if(!defined($first_time)){
$first_time = $current_first_time;
} #获取开始时间,为首次暂存开始时间
$last_time = $current_last_time; #获取结束时间,为最后暂存结束时间
$tmp=''; #临时值清空
($current_first_time,$current_last_time)=();#临时值清空
}
elsif(/^$/){#空行忽略
}
elsif(!/[.]/){
$current_content.=$_;没句号,字符串拼接
}
elsif(/[.]/){
$current_content.=$_;有句号,字符串拼接
print $newline."\n".$first_time." --> ".$last_time."\n".$current_content."\n";#打印看看
push @zimu_new,$newline."\n".$first_time." --> ".$last_time."\n".$current_content."\n";
$newline++;#新序号
($first_time,$last_time)=();
$current_content="";
}else{
#不干啥
}
}
open(NEWZIMU,">zimu_new.txt");
foreach(@zimu_new){
print NEWZIMU $_;#存文件
}
close(NEWZIMU);
close(ZIMU);
}
perl缺点
总的来说,Perl的缺点在于其可能带来的代码复杂性和可读性挑战,但它同时也提供了一种高度灵活的编程方式。能否写出优雅的Perl,取决于编程者的技艺和对代码清晰度的追求。因此,对于Perl,关键在于如何平衡其灵活性与代码质量。
Load Port、SMIF
威孚(苏州)半导体技术有限公司是一家专注生产、研发、销售晶圆传输设备整机模块(EFEM/SORTER)及核心零部件的高科技半导体公司。公司核心团队均拥有多年半导体行业从业经验,其中技术团队成员博士、硕士学历占比80%以上,依托丰富的软件底层...
Perl程序的运行问题。急急急!
1、文件夹名不要中文字。2、不要有空格。3、模块缺少依赖的其他模块。
为什么电脑运行perl出现以下问题?
这是加密模块没有安装好,把与这模块相关的语句删掉就可以了,或重新安装Filter::Crypto这模块。
perl的sleep函数失效问题
并发问题、操作系统限制。1、并发问题。如果在程序中有其他任务或线程正在占用处理器资源,sleep函数会受到影响,导致暂停的时间不准确或无法暂停。2、操作系统限制。在某些操作系统上,会限制了sleep函数的时间精度。这意味着即使设置了较小的暂停时间,实际暂停的时间会比预期的要长。
perl 排列组合问题
即C4 1乘以C3 1乘以C2 1 ③: 选1个相同,3个不同...不就是4个不同的嘛。。。真不知道你怎么想的。就是C4 1*C3 1*C2 1*C1 1 ④:选两个相同的即C4 1,另两个相同的即C3 1,就是C4 1* C3 1 ⑤:你仔细想想,其实和第二个是一样的,再算就会算重复了。你的思维方式不太好。
安装perl时几个详细的问题
好的perl是不是可以正常运祚。他应 该会跑到t/目录下去做测试。make install 将binary档放到应该要去的地方..正常 应该会放到/usr/local/bin/perl5.8.6 library会放在/usr/local/lib/perl5/5.8.6 这个目录perl -V会看到...test与install是Makefile里面定义好的tag..make看到後会进去Makefile...
perl编程问题,急!怎么就不对了啊??
第1行有错,前面漏了第一个符号,应该修改为:!/usr/bin/perl -w 第18行有错,后面的引号要使用英文,应该修改为:flock( BOOK, LOCK_EX ) or die( "Cannot get exclusive lock: $!" );第35行有错(最后一行),应该删除。全部修改正确的程序如下:!/usr/bin/perl -w use strict;use ...
perl的问题!!!急急急
# readpipe 是用来执行命令,得到结果用的,效果类似函数system和exec$s = readpipe($string);#如:@result = readpipe( "ls -l /tmp" );#result就得到了ls -l /tmp的输出#所以你的问题的结果是:# 可能不一样, 因为expect一般是spawn一个进程,到远程服务器上做事情# readpipe是在当前服务器...
perl中的一个标量上下文问题
疑问1:布尔上下文特殊在那里?它特别在不同於 eq, ne, ==, != 那样, 只会返回 1 或 undef, 它会返回一个 "能对应当前正在访问的数据型态" 的 "有内容的值" 或 "空值", 以 array 来说, 空值就是 (), 以 hash 来说空值就是 ( undef, undef )...疑问2:我仿照上面的代码做了以下...
关于perl效率的问题
不过事实上那是感觉不出来的。你这两个语句的比较,由于后面的“, "\n"”部分相同的,和下面两个语句的比较结果是一致的:print 'abc';print "abc";第二个会满,因为执行第二个的时候,系统看见是双引号,要先扫描里面是否有变量和转移符,处理完毕以后执行与第一个相同的功能--输出显示。