我试图制作一个审查过的单词脚本, 我不知道为什么,但我的剧本没有正确审查这些词。 审查状态为80%〜
这是我的代码:
#!/usr/bin/perl -w
use strict;
my @text;
my @cencoredText;
my $file = "blabla\\text.txt";
open(FH, "<", $file) or die "cant open file";
while(<FH>)
{
push(@text,$_);
}
close(FH);
my $cencoredFile = "blabla\\forbidden.txt";
open(FH2, "<", $cencoredFile) or die "cant open file";
while(<FH2>)
{
push(@cencoredText,$_);
}
close(FH2);
for(my $i=0; $i<@cencoredText; $i++)
{
for(my $j=0; $j<@text; $j++)
{
$text[$j] =~ s/${cencoredText[$i]}/censored/g;
}
}
打开两个文件,perl脚本从中获取信息.. 我不知道什么是错的.. 谢谢!
答案 0 :(得分:3)
要回答您的直接问题,您需要chomp
在您读入两个数组@text
和@censoredText
的每个输入行末尾的换行符:
...
while( <FH> ) {
chomp;
push(@text,$_);
}
close(FH);
my $cencoredFile = "blabla\\forbidden.txt";
open(FH2, "<", $cencoredFile) or die "cant open file";
while(<FH2>) {
chomp;
push(@cencoredText,$_);
}
...
与您提出的问题没有直接关系的几点:
数组真的是最好的数据结构选择,表明应该审查一个单词吗?
我要说不。一个问题是,为了识别应该被审查的单词,您当前循环遍历@censoredText
中的每个单词,然后循环遍历@text
的每一行的每个单词。如果你有N行文本和M个禁止词,那么你的整体复杂度为O(N*M)
,当N和M增加时,这并不是很好。如果您使用哈希来表示应该审查的字词,则可以将其减少为O(max(N,M))
。
或者,您可以使用每个禁用词构造一个模式,并在整个输入文件中进行全局替换。