用perl检查文本文件内容
我正在寻求一些关于这段代码效率的反馈,以及如何在移动@filesuse数组时从该数组中删除符合条件的文件 我正在将目录中的所有文件加载到@filesuse数组中。然后我需要检查每个文件,看看第7行是否显示“批处理”,如果是,我想移动该文件,然后从@FilesToUse数组中删除该文件名,这样当我以后使用该数组时,该数组中就没有批处理文件名了。我希望我把这个问题说清楚 文本文件大约为10Mb,我通常每天要处理2个文件 提前感谢您的帮助用perl检查文本文件内容,perl,Perl,我正在寻求一些关于这段代码效率的反馈,以及如何在移动@filesuse数组时从该数组中删除符合条件的文件 我正在将目录中的所有文件加载到@filesuse数组中。然后我需要检查每个文件,看看第7行是否显示“批处理”,如果是,我想移动该文件,然后从@FilesToUse数组中删除该文件名,这样当我以后使用该数组时,该数组中就没有批处理文件名了。我希望我把这个问题说清楚 文本文件大约为10Mb,我通常每天要处理2个文件 提前感谢您的帮助 #Loop thru the files that were
#Loop thru the files that were found and delete the one that is BATCH
foreach $FileToUse (@FilesToUse) #Loop at the file level
{
open (FH, $TheInputDir . $FileToUse) or $MailMsg = $MailMsg . "ERROR: Could not open input file: $FileToUse \n";
while (<FH>) # Loop at the line level within each file
{
$TheLine = $_;
chomp($TheLine);
$LineCnt++;
if ( $LineCnt == 7 and substr( $TheLine, 1, 6 ) =~ /BATCH/ ) {
move( "$TheInputDir$FileToUse", "$TheBatchMoveDir" )
or $MoveFail = 1;
if ( $MoveFail == 1 ) {
$MailMsg = $MailMsg
. "ERROR: Failed to move $FileToUse to Batch folder!\n";
}
else {
$MailMsg
= $MailMsg . "Moved BATCH file $FileToUse to Batch folder\n";
}
}
last if $. == 7;
}
}
#循环浏览找到的文件并删除批处理的文件
foreach$FileToUse(@FileToUse)#在文件级循环
{
打开(FH,$TheInputDir.$FileToUse)或$MailMsg=$MailMsg。“错误:无法打开输入文件:$FileToUse\n”;
while()#在每个文件的行级别循环
{
$THLINE=$\u3;
咀嚼($TheLine);
$LineCnt++;
如果($LineCnt==7,substr($TheLine,1,6)=~/BATCH/){
移动($TheInputDir$FileUse“,$TheBatchMoveDir”)
或$MoveFail=1;
如果($MoveFail==1){
$MailMsg=$MailMsg
“错误:无法将$FileUse移动到批处理文件夹!\n”;
}
否则{
$MailMsg
=$MailMsg。“已将批处理文件$fileuse移动到批处理文件夹\n”;
}
}
如果$.==7,则为最后一个;
}
}
我会清理语义:
$LineCnt = $.;
if ( $LineCnt == 7 ) {
close FH;
if ( substr( $TheLine, 1, 6 ) =~ /BATCH/ ) {
move( "$TheInputDir$FileToUse", "$TheBatchMoveDir" )
or $MoveFail = 1;
if ( $MoveFail == 1 ) {
$MailMsg = $MailMsg
. "ERROR: Failed to move $FileToUse to Batch folder!\n";
}
else {
$MailMsg
= $MailMsg . "Moved BATCH file $FileToUse to Batch folder\n";
}
}
last;
}
如何从@filesuse数组中删除符合条件的文件
我们可以使用从数组中删除元素,但我们需要用于此操作的数组索引。您可以将外部循环更改为
foreach$findex($#filesuse..0)#在文件级循环
{
$FileToUse=$FilesToUse[-$findex];
并插入
splice@FilesToUse,-$findex,1;
要删除文件元素的位置。(数组从最后一个元素到第一个元素进行处理,以避免删除索引时出现“缺少元素综合症”-另请参见)输入文件的一个示例也会很有用。与其删除元素,不如先不将其添加到
@filesuse
。另外,您能为这个问题创建一个示例吗?