0

次のようなファイルがあります。

This is is my "test"
file with a lot
words separeted by whitespace.

これを分割して、各要素に1つの単語が含まれ、重複するすべての単語が削除される配列を作成したいと考えています

目的の配列:

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 に答える