У меня проблема с кодом программы, поскольку я изменил свой файл в массив, но не уверен, был ли он изменен или нет. Поэтому, пожалуйста, проверьте приведенный ниже код, также он показывает ошибку использования неинициализированной @data в последней строке.
Теперь после этого моя самая большая проблема заключается в том, что я хочу собирать только те элементы в массиве, между которыми есть определенное ключевое слово. Например, каждый элемент массива начинается там, где заканчивается women
и начинается children
. Эти слова являются общими во всех других элементах, но информация между ними различна, и я хочу, чтобы только те элементы, которые имеют ключевое слово «фактор человек» где-то посередине, поэтому я хочу извлечь не все, а только те элементы, которые имеют ключевое слово «фактор» человек'.
Как вы видите, мой файл содержит все начальные слова, общие для всех элементов, но после этого информация отличается, но каждый элемент начинается с women
и заканчивается на children
. Пожалуйста, кто-нибудь может направить меня по этому вопросу. Спасибо заранее.
Входной файл
women bds1
origin USA
accession not known
factor xyz
work abc
children
women sds2
origin ENG
accession known
factor man
work wwe
children
women cfc4
origin UK
factor xxx
work efg
children
women gtg6
origin UAE
factor man
work qqq
children
Сценарий
#!/usr/bin/env perl
use strict;
use warnings;
my $ifh;
my $line = '';
my @data;
my $ifn = "fac.txt";
open ($ifh, "<$ifn") || die "can't open $ifn";
my $a = "women ";
my $b = "children ";
my $_ = " ";
while ($line = <$ifh>)
{
chomp
if ($line =~ m/$a/g); {
$line = $_;
push @data, $line;
while ($line = <$ifh>)
{
$line .= $_;
push @data, $line;
last if
($line =~ m/$b/g);
}
}
push @data, $line; }
print @data;
выход
women sds2
origin ENG
accession known
factor man
work wwe
children
women gtg6
origin UAE
factor man
work qqq
children