0

テキストファイルを解析するための以下のコードがあります。テキストファイルのすべての行で「Enter:」キーワードの後のすべての単語を表示します。「Enter:」キーワードの後に​​すべての単語が表示されますが、複製するのではなく、繰り返す必要があります。私のコードでwhtが間違っていることについて教えてください。

#! /usr/bin/perl
use strict;
use warnings;
$infile  "xyz.txt";
open (FILE, $infile) or die ("can't open file:$!");
if(FILE =~ /ENTER/ ){
    @functions = substr($infile, index($infile, 'Enter:'));
    @functions =~/@functions//;
    %seen=();
    @unique = grep { ! $seen{$_} ++ } @array;
    while (@unique != ''){
        print '@unique\n';
    }
}
close (FILE);
4

2 に答える 2

2

キーワードで始まる各行にある一意の単語を出力します。Enter:

#!/usr/bin/perl
use strict;
use warnings;

my $infile = "xyz.txt";

# use 3 arg open with lexical file handler
open my $fh, '<', $infile or die "unable to open '$infile' for reading: $!";

# loop thru all lines
while(my $line = <$fh) {
    # remove linefeed;
    chomp($line);
    # if the line begins with "Enter:"
    # remove the keyword "Enter:"
    if ($line =~ s/^Enter:\s+//) {
        # split the line on whitespaces
        # and populate the array with all words found
        my @words = split(/\s+/, $line);
        # create a hash where the keys are the words found
        my %seen = map { $_ => 1 }@words;
        # display unique words
        print "$_\t" for(keys %seen);
        print "\n";
    }
}
于 2012-04-19T15:50:35.060 に答える
-1

私があなたを正しく理解していれば、問題の 1 つは、「grep」が各単語の出現のみをカウントすることです。「@unique」に「@array」からの一意の単語のみが含まれるように「map」を使用したいと思います。このようなもの:

@unique = map {
    if (exists($seen{$_})) {
        ();
    } else {
        $seen{$_}++; $_;
    }
 } @array;
于 2012-04-19T15:44:51.433 に答える