0

我有一个这样的文件:

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(" "); 
4

3 回答 3

2

要提取单词,您可以使用

my @words = $str =~ /\w+/g;

至于删除重复项,

use List::MoreUtils qw( uniq );
my @uniq_words = uniq @words;

或者

my %seen;
my @uniq_words = grep !$seen{$_}++, @words;
于 2013-03-06T23:30:45.233 回答
0

您正在将文件的文本加载到数组中,但将文件加载到单个字符串中可能更有意义。这将使您能够利用@ikegami 提供的解决方案。要将所有这些结合在一起,请尝试以下操作。

use List::MoreUtils qw( uniq );
my $filecontent = do
{
  local $/ = undef;
  <STDIN>;
};
my @words = $filecontent =~ /\w+/g;
my @uniqword = uniq(@words);
于 2013-03-07T04:13:16.790 回答
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);
于 2013-03-07T06:46:26.170 回答