Напечатайте третье слово каждого предложения - PullRequest
0 голосов
/ 10 августа 2011
use warnings;

$reff_filepath="/home/sharma/Documents/ref.txt";
open (CONFIG,"<","$reff_filepath")or die "Unable to open $reff_filepath: $!";

while(<CONFIG>) {
    chomp;
    @cols = (split(/ /))[2];
    push(@array, @cols);
    print "@array\n";
}

close CONFIG;

Вывод, который я получил:

О
На референдуме
На референдуме законопроект
На референдуме законопроект подавляющим
На референдуме законопроект подавляющим большинством голосов
На референдуме законопроект подавляющим большинством утверждал законопроект
На референдуме законопроект подавляющим большинством утверждал законопроект правительства

но мой ожидаемый результат -

На
Референдум
Билл
подавляющая
утверждал
Билл
governmen

Объяснение: я пытаюсь напечатать третье слово каждого предложения, используя Perl. Выше я написал свой Perl-скрипт. Я получил тот результат, который я ожидал выше. Но я поместил этот вывод в массив, как это push(@array, @cols), затем я получил первый вывод, что я упомянул выше. Пожалуйста, кто-нибудь даст предложение или перепишет скрипт Perl для отображения ожидаемого результата.

Ответы [ 4 ]

1 голос
/ 10 августа 2011

Если вы хотите напечатать каждое третье слово, просто используйте

@cols = grep {not ++$i % 3} (split /\s+/)
0 голосов
/ 10 августа 2011

Решение для одной строки для вывода каждого третьего слова из каждой строки (не предложения) - оно НЕ будет печатать пустую строку, где есть менее 3 слов:

perl -e '@a = map { (split /\s+/)[2] } <>; $" = "\n"; print "@a\n";'

Это решение напечатает пустую строку, где есть менее 3 слов:

perl -e 'print map { (split /\s+/)[2] . "\n" } <>;'

0 голосов
/ 10 августа 2011

Как насчет определения входного разделителя для "."?

$/ = .;

while(<>) {
  $i = 0;
  @words = split(/\s+/);
  while ($i <= $#words) {
     push (@array, @words[$i]);
     $i+=3;
  }
}
print "@array\n";

или что-то подобное (я не пытался запустить этот скрипт). Вы не пытаетесь получить каждое третье слово каждого предложения, а каждое третье слово во всем документе.

0 голосов
/ 10 августа 2011

Вы печатаете массив на каждой итерации цикла.

Вам нужно переместить «print» за пределы цикла, а также добавить «\ n» к каждому элементу массива:

push(@array, @cols);

}
print "$_\n" foreach @arr;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...