我需要从文件中读取,遍历它并将该行写入另一个文件.当行数达到阈值时,关闭输出文件句柄并打开一个新句柄.
每次从输入文件句柄读取一行时,如何避免打开和关闭输出文件句柄?
use autodie qw(:all); my $tot = 0; my $postfix = 'A'; my $threshold = 100; open my $fip,'<','input.txt'; LINE: while (my $line = <$fip>) { my $tot += substr( $line,10,5 ); open my $fop,'>>','output_' . $postfix; if ( $tot < $threshold ) { print {$fop} $line; } else { $tot = 0; $postfix++; redo LINE; } close $fop; } close $fip;
解决方法
只有在更改$postfix时才重新打开文件.此外,你可以更简单一些.
use warnings; use strict; use autodie qw(:all); my $tot = 0; my $postfix = 'A'; my $threshold = 100; open my $fop,'output_' . $postfix; open my $fip,'input.txt'; while (my $line = <$fip>) { $tot += substr( $line,5 ); if ($tot >= $threshold) { $tot = 0; $postfix++; close $fop; open $fop,'output_' . $postfix; } print {$fop} $line; } close $fip; close $fop;
原文地址:https://www.jb51.cc/Perl/172300.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。