我是一个完整的n00b。我已阅读本网站上的许多其他帖子,但我无法找到解决这个相对简单问题的方法。基本上,我有一个用HTML标记的文本文件目录。我想从此目录中的每个文件中删除HTML,然后将每个单独的文件导出到新的文本文件(最好使用_out.txt扩展名)。这是我到目前为止所尝试的:
use strict;
use warnings;
use File::Find;
use HTML::FormatText;
my $root_path=qq{C:\\Filings\\test}; #Declare your input path
# Recursively it process all the sub directories in $root_path
find(\&process_multiple_dir, $root_path);
sub process_multiple_dir
{
if (-f && $File::Find::name =~ m{\.txt$}) # It process .txt format files only
{
undef $/; # Input Record separator
# Files Handling process
open (FIN, "<$File::Find::name") || die "Cannot Open the Input file";
my $file=<FIN>; # Assign the file handler to scalar variable
#print $file;
my $string = HTML::FormatText->format_file($file,leftmargin => 0, rightmargin => 50);
#print $string;
close (FIN);
# Change the file name for the output file creation purpose
$File::Find::name=~ s{\.txt}{_Out.txt};
# Print the $file contents to new file
open (FOUT, ">$File::Find::name") || die "Cannot Create the Output file";
print FOUT $string;
close (FOUT);
}
}
此代码将输出一个带有新文件名的文件(标记为_out.txt的扩展名),但新创建的文件中没有文本...
谢谢!
答案 0 :(得分:1)
我自己不使用HTML :: FormatText,但我认为正确的语法是:
my $string = HTML::FormatText->format_file($File::Find::name,leftmargin => 0, rightmargin => 50);
因此无需打开文件并将其粘贴到$file
。
(PS:在你的代码中使用一些缩进;它使它更具可读性:))