如何在每个空格上拆分数组的每个条目?

时间:2013-03-06 23:27:29

标签: perl

我有一个这样的文件:

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

3 个答案:

答案 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);