![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
Как объединить эти два условия в одно? Если строка начинается с "!ACT" и в строке НЕТ "-\d", то $act=0 А если строка начинается с "!ACT" и в строке есть "-\d", то $act=1; |
|||
|
||||
| dva300 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2010 Где: Москва Репутация: -1 Всего: 1 |
думаю что при отсутствии заведомо оговоренных допущений - никак.
если же файл изначально "правильный" то можно применить следующий код
если же в файле есть "мусор" вида !PPP sjhfsjfhksljlk jl -3434 (т.е строки начинаются не только с !ACT) то нулевое значение не будет отражать реальное положение вещей - нужно предварительно готовить правильный файл. или оставить все как есть. Кстати, вот это условие if (/^!ACT/){$act=1; next} не говорит нам что в строке есть \d --------------------
Участник движения Культура Вождения |
|||
|
||||
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
dva300, дело в том, что дальше есть проверка
if (defined $act) т.е. $act может быть undefined, ==0 и ==1 Если попалась строка ^!ACT, то $act уже или 0 или 1. Если далее в строке есть -\d, то $act = 1, иначе $act=0. Добавлено @ 16:21
очень просто: if (/^!ACT/ && !/-\d/){$act=0; next} # сдесь в конце идет next. Значит, есть в строке нет -\d, то после $act=0 эта строка больше не обрабатывается. сюда мы попадаем, только если первая строка не сработала. Однако, в строке есть !ACT, поэтому $act=1 if (/^!ACT/){$act=1; next} Добавлено @ 16:23 Т.е. нужно составить регулярное выражение с условием: если нашли ^!ACT, то 1) если нет -\d, то $act=1 2) иначе $act = 0 иначе не трогаем $act Это сообщение отредактировал(а) Suppir - 27.8.2010, 16:25 |
|||
|
||||
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
попробую вот так:
/^!ACT(?(?!-d)$act=0|$act=1)/; |
|||
|
||||
| dva300 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2010 Где: Москва Репутация: -1 Всего: 1 |
я думаю что чем проще тем лучше.
не пройдет и пары м. и вы (или кто-то другой) будит читать данные конструкции очень долго + вспоминать логику. вообщем я категорично против такого рода оптимизации кода --------------------
Участник движения Культура Вождения |
|||
|
||||
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
после долгой возни и тестов я пришел к такому же выводу
|
|||
|
||||
| Grost |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 26.8.2010 Где: Москва Репутация: нет Всего: нет |
||||
|
||||
| dva300 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2010 Где: Москва Репутация: -1 Всего: 1 |
потому что вопрос изначально звучал по другому а воспользоваться безусловно можно. --------------------
Участник движения Культура Вождения |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |