URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 1418
[ Назад ]

Исходное сообщение
"Удаление лишних строк из массива"

Отправлено agat , 20-Фев-03 13:32 
Уважаемые господа подскажите пожалуйста как вырезать из массива строки начинающиеся на #. Неделю бъюсь ничего не получается.
Пример:
#!/usr/bin/perl
@Stat = ('
#Timing mark 31626411. Interval 03:07
#1000 entries of 1000
#Dropped 533573 bytes
#src dst bytes
xxxxxxxx      xxxxxxxxxxxxx
xxxxxxxx      xxxxxxxxxxxxx
#end');
foreach $s (@Stat) {
if ($s = ~/^#/) { next; }
@Stat1=(@Stat, $s)
}

Содержание

Сообщения в этом обсуждении
"RE: Удаление лишних строк из массива"
Отправлено konst , 20-Фев-03 13:46 
>Уважаемые господа подскажите пожалуйста как вырезать из массива строки начинающиеся на #.
>Неделю бъюсь ничего не получается.
>Пример:
>#!/usr/bin/perl
>@Stat = ('
>#Timing mark 31626411. Interval 03:07
>#1000 entries of 1000
>#Dropped 533573 bytes
>#src dst bytes
>xxxxxxxx      xxxxxxxxxxxxx
>xxxxxxxx      xxxxxxxxxxxxx
>#end');
В этом случае массив Stat содержит 1 элемент (строку с переводами строк)
Все заработает если добавить
@Stat = split("\n",$Stat[0]);
Но проблема вероятно в неверном понимании массива

>foreach $s (@Stat) {
#$s == "\n#Timing mark 31626411. Interval 03:07\n...\nxxxxxxxx      xxxxxxxxxxxxx\n....";
>if ($s = ~/^#/) { next; }
>@Stat1=(@Stat, $s)
>}


"RE: Удаление лишних строк из массива"
Отправлено agat , 20-Фев-03 14:45 
Прошу прощения сделал ошибку в самом начале, там должно было быть:

@Stat = split(/\n/, '#Timing mark 31626411. Interval 03:07
...........................

Так вот как правильно составить резулярное выражение для поиска и удаления строк, начинающихся с #?


"RE: Удаление лишних строк из массива"
Отправлено konst , 20-Фев-03 15:21 
>Прошу прощения сделал ошибку в самом начале, там должно было быть:
>
>@Stat = split(/\n/, '#Timing mark 31626411. Interval 03:07
>...........................
>
>Так вот как правильно составить резулярное выражение для поиска и удаления строк,
>начинающихся с #?


if ($s = ~/^#/) { next; }
- это правильно!
можно также unless ($s = ~/^#/) {
push(@Stat1, $s); # добавляет $s в @Stat1
}
включить в массив: perldoc -f push
исключить : perldoc -f splice

@Stat1=(@Stat, $s) - НЕ ВЕРНО!


"RE: Удаление лишних строк из массива"
Отправлено agat , 20-Фев-03 15:35 
>if ($s = ~/^#/) { next; }
>- это правильно!
>можно также unless ($s = ~/^#/) {
>push(@Stat1, $s); # добавляет $s в @Stat1
>}

А с этого места можно поподробнее, что это за функции?
>включить в массив: perldoc -f push
>исключить : perldoc -f splice
>



"RE: Удаление лишних строк из массива"
Отправлено agat , 20-Фев-03 15:43 
И еще вопрос

foreach $s (@Stat) {
if($s=~/^#/) {
push(@Stat1, $s);
}
}

Массив @Stat1 в данном случае будет содержать строки которые начинаюся с #, а как правильнее получить массив который не содержит данных строк?


"RE: Удаление лишних строк из массива"
Отправлено konst , 20-Фев-03 15:52 
>И еще вопрос
>
>foreach $s (@Stat) {
>if($s=~/^#/) {
>push(@Stat1, $s);
>}
>}
>
>Массив @Stat1 в данном случае будет содержать строки которые начинаюся с #,
>а как правильнее получить массив который не содержит данных строк?

Вместо if($s=~/^#/) {

unless ($s=~/^#/) {
ИЛИ
if($s !~ /^#/) {


"RE: Удаление лишних строк из массива"
Отправлено agat , 20-Фев-03 15:57 
Большое спасибо за консультации!
Будем юзать дальше.


"RE: Удаление лишних строк из массива"
Отправлено konst , 20-Фев-03 15:44 
>>if ($s = ~/^#/) { next; }
>>- это правильно!
>>можно также unless ($s = ~/^#/) {
>>push(@Stat1, $s); # добавляет $s в @Stat1
>>}
>
>А с этого места можно поподробнее, что это за функции?
>>включить в массив: perldoc -f push
>>исключить : perldoc -f splice
Ты имеешь ввиду perldoc ? - Очень полезная функция.
Если у тебя *nix => в bash'е дай эти команды. Открывает man по Перлу. (Выход : 'q').
+ пользуйся
man perl
man perlfunc
(все из shell вызывается)