Как удалить элементы из массива Perl, используя grep и shift? - PullRequest
1 голос
/ 09 сентября 2011

Мне нужно удалить символ записи данных и любые пустые строки в dataRecord, используя perl.

, например,

$/ = "__Data__"

__Data__
riririririr
djkfkdfjkdjkf
dghghghghghghg
(blank line)

     my @dataRecord = split(/\n/);
     grep(/(__Data__|/,@dataRecord);

Как удалить ненужные элементы вмассив, основанный на фильтрации grep?

Ответы [ 3 ]

3 голосов
/ 09 сентября 2011

Это должно работать:

my @filered_list = grep { length( $_ ) and $_ ne '__Data__' } @dataRecord;
3 голосов
/ 09 сентября 2011

Не уверен, что здесь происходит с разделителем входных записей, и использование разбиения недопустимо, если не используется неявное $_.


Чтобы ответить на вопрос, используйте! оператор для отрицания смысла совпадения:

@dataRecord = grep { ! /__Data__|^$/ } @dataRecord;

В этом случае ! также можно заменить на not:

@dataRecord = grep { not /__Data__|^$/ } @dataRecord;
0 голосов
/ 09 сентября 2011

Хорошо, если вы хотите, чтобы элементы соответствовали критериям:

@dataRecord = grep(/expr/,@dataRecord);

(при условии, что элементы, которые вам не нужны в массиве, - это те, которые не проходят соответствующее регулярное выражение).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...