如何用perl语言循环语句实现依次打开多个文件
有多个.dat数据文件,如何用perl语言循环语句实现依次打开这些文件,对其内容进行读写操作?...
有多个.dat数据文件,如何用perl语言循环语句实现依次打开这些文件,对其内容进行读写操作?
展开
4个回答
展开全部
#Perl程序变量用前不用声明,根据使用位置的上下文,Perl能自动分析变量类型
for ($inputFileListIndex=0;$inputFileListIndex<=$#inputFileArray;$inputFileListIndex++) {
#这就是一循环,当inputFileListIndex小于等于数组 inputFileArray的索引值时,执行循环。
#“$”这个符号引导的是变量,“@”这个符号引导的是数组,$#inputFileArray这个的意思是取inputFileArray这个数组的最后一个变量的索引值(就是这个数组元素个数-1)。
$tmp = $inputFileArray[$inputFileListIndex];
#建立一个临时变量tmp,然后把数组对应inputFileListIndex这个索引的值赋给tmp。
if ($tmp =~ /^(.*[\\\/])([^\\\/]+)$/){
#这块做了个正则表达式判断, =~是个表示用来做正则表达式匹配的符号,把后面的一串正则表达式与tmp中的字符串匹配,若果匹配成功,则为真。
#/^(.*[\\\/])([^\\\/]+)$/,这个两个“/” “/”符号限制出正则表达式的范围,里面的^(.*[\\\/])([^\\\/]+)$是正则表达式,^表示字符串的开头,$表示字符串的结尾,
#(.*[\\\/])这个括号框出了一个组,它是第一个组,组号是1,在后面有用。里面“.”表示 任何字符除了回车,“*"表示0到多个重复前面的那个字符,所以.*表示任意字符无限多次,就是什么都行的意思。之后的[]这个符号表示它里面指明的所有东西匹配上一个就行,它里面是\\\/,第一个\用来转义第二个\,第三个\用来转义第四个/,所以它实际上说的就是“\”和“/”匹配上一个就行。
#([^\\\/]+)接着又是一个组,组号2。[]这里面的^和外面不同,表示非的意思,所以就是说匹配任何字符, 只要不是“\”和“/”就行。接着一个“+”表示前面匹配到的字符至少有一个。
#所以总的来看,这段正则表达式的意思是,有一个字符串,从开始起在任意字符后,有一个“\”或“/”出现,之后有一个以上重复的非“\”和“/”的字符出现直到结尾。
push(@},$tmp);
#判断成功后,以匹配到的第一组“(.*[\\\/])”的内容为键,取出folderpath这个哈希里对应的值,并将tmp里的内容push到,以该取出的值为名的数组的末尾。
}
else{
push(@},$tmp);
#不然就把,取出folderpath这个哈希里对应“nofolder”这个键的值,并将tmp里的内容push到,以该取出的值为名的数组的末尾。
}
}
for ($inputFileListIndex=0;$inputFileListIndex<=$#inputFileArray;$inputFileListIndex++) {
#这就是一循环,当inputFileListIndex小于等于数组 inputFileArray的索引值时,执行循环。
#“$”这个符号引导的是变量,“@”这个符号引导的是数组,$#inputFileArray这个的意思是取inputFileArray这个数组的最后一个变量的索引值(就是这个数组元素个数-1)。
$tmp = $inputFileArray[$inputFileListIndex];
#建立一个临时变量tmp,然后把数组对应inputFileListIndex这个索引的值赋给tmp。
if ($tmp =~ /^(.*[\\\/])([^\\\/]+)$/){
#这块做了个正则表达式判断, =~是个表示用来做正则表达式匹配的符号,把后面的一串正则表达式与tmp中的字符串匹配,若果匹配成功,则为真。
#/^(.*[\\\/])([^\\\/]+)$/,这个两个“/” “/”符号限制出正则表达式的范围,里面的^(.*[\\\/])([^\\\/]+)$是正则表达式,^表示字符串的开头,$表示字符串的结尾,
#(.*[\\\/])这个括号框出了一个组,它是第一个组,组号是1,在后面有用。里面“.”表示 任何字符除了回车,“*"表示0到多个重复前面的那个字符,所以.*表示任意字符无限多次,就是什么都行的意思。之后的[]这个符号表示它里面指明的所有东西匹配上一个就行,它里面是\\\/,第一个\用来转义第二个\,第三个\用来转义第四个/,所以它实际上说的就是“\”和“/”匹配上一个就行。
#([^\\\/]+)接着又是一个组,组号2。[]这里面的^和外面不同,表示非的意思,所以就是说匹配任何字符, 只要不是“\”和“/”就行。接着一个“+”表示前面匹配到的字符至少有一个。
#所以总的来看,这段正则表达式的意思是,有一个字符串,从开始起在任意字符后,有一个“\”或“/”出现,之后有一个以上重复的非“\”和“/”的字符出现直到结尾。
push(@},$tmp);
#判断成功后,以匹配到的第一组“(.*[\\\/])”的内容为键,取出folderpath这个哈希里对应的值,并将tmp里的内容push到,以该取出的值为名的数组的末尾。
}
else{
push(@},$tmp);
#不然就把,取出folderpath这个哈希里对应“nofolder”这个键的值,并将tmp里的内容push到,以该取出的值为名的数组的末尾。
}
}
展开全部
while (my $file = glob "*.dat" )
{
open my $fh, '+>', "$file" or die $!;
while (<$fh>)
{
}
}
{
open my $fh, '+>', "$file" or die $!;
while (<$fh>)
{
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
### /path/to/many_file.dat
while (< "/path/to/*.dat" >) {
### This is called Directory glob
}
while (< "/path/to/*.dat" >) {
### This is called Directory glob
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
学习了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询