我有一个这样的文件:
This is is my "test"
file with a lot
words separeted by whitespace.
现在我想实现拆分这个以便我创建一个数组,其中每个元素包含一个单词并删除所有重复的单词
所需的数组:
This
is
my
test
etc...
我将文件读入数组,但我不知道如何拆分整个数组,以便结果是一个新数组。我该如何删除重复的单词?
#!/usr/bin/perl
package catalogs;
use Log::Log4perl;
Log::Log4perl->init("log4perl.properties");
open(FILE, "<Source.txt") || die "file Sources.txt konnte nicht geoeffnet werden";
my @fileContent = <FILE>;
close FILE;
my $log = Log::Log4perl->get_logger("catalogs");
@fileContent = split(" ");
答案 0 :(得分:2)
要提取单词,您可以使用
my @words = $str =~ /\w+/g;
至于删除重复项,
use List::MoreUtils qw( uniq );
my @uniq_words = uniq @words;
或
my %seen;
my @uniq_words = grep !$seen{$_}++, @words;
答案 1 :(得分:0)
您正在将文件的文本加载到数组中,但将文件加载到单个字符串中可能更有意义。这将使您能够利用@ikegami提供的解决方案。要将它们组合在一起,请尝试以下方法。
use List::MoreUtils qw( uniq );
my $filecontent = do
{
local $/ = undef;
<STDIN>;
};
my @words = $filecontent =~ /\w+/g;
my @uniqword = uniq(@words);
答案 2 :(得分:0)
my $log = Log::Log4perl->get_logger("catalogs");
@fileContent = split(/\s+/, $log);
@filecontent = uniq(@filecontent);
要使单词具有唯一性,您可以使用uniq
子程序或将其映射到hash
。由于散列的键始终是唯一的,因此重写将被覆盖。
use strict;
use warnings;
use Data::Dumper;
my @a = (1,1,1,2,3,4,4);
my %hash = ();
%hash = map $_=>'1', @a;
my @new = keys(%hash );
print Dumper(@new);