![]() |
|
Модераторы: ginnie |
![]()
|
|
| EvilsInterrupt |
|
||||||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
мне надо обработать все строки имеющие diff . решил разбить подобную строку так:
где: $1 - это путь $2 - статус $3, $4 - это строка1 и строка2 имеется след. код:
под отладчиком в Komodo окне watch вижу, что к $3 приаттачивается другая строка, а мне этого не надо! Как это решить? выделить исключительно одну? Это сообщение отредактировал(а) EvilsInterrupt - 16.3.2010, 19:25 |
||||||
|
|||||||
| dva300 |
|
||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2010 Где: Москва Репутация: 2 Всего: 1 |
а $4 пустая ? тогда между последними ok и ok не табуляция \t а пробелы \s --------------------
Участник движения Культура Вождения |
||||||||
|
|||||||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
dva300,
привел не ту регулярку, извиняюсь! На самом деле вот с чем вожусь:
и вот в этом месте-то и есть захват следующей строки! >>тогда между последними ok и ok не табуляция \t а пробелы \s Между ними байт 09, что означает табуляцию и завершается строка 0D, т.е. символом новой строки! ЗЫ: Я новичок в PERL,логи огромные и не хочу ручками ;))) Прошу помочь, очень надо! |
|||
|
||||
| dva300 |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2010 Где: Москва Репутация: 2 Всего: 1 |
покажи кусок лога P.S. какой же ты новичек - написано же - опытный --------------------
Участник движения Культура Вождения |
||||
|
|||||
| shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: нет Всего: 18 |
dva300, опытный статус на форуме
|
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: нет Всего: 40 |
"опытный пользователь форума"?
|
|||
|
||||
| EvilsInterrupt |
|
||||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
Пообщавшись вчера с dva300 пришли к выводу, что проблема заключена в трактовке символа новой строки, под никсы это 0x0D, т.е. CR , а под винды это 0x0D, 0x0A, т.е. CR LF .
Но лог у меня от никсовых прог, а вот обрабатываю на винде ! ;) Как вывод функциия chomp может не корректно удалять символ. Вопрос: Как быть ? Приведу, еще раз что у меня есть:
и:
Нужно отлавливать те строки, где статус равен diff, а стринг 1 и стринг 2 могут иметь различные значения и закладываться на "ок" или чтото еще не надо! Стринги 1 и 2 и статус, а также путь разделены символом табуляции! Моя цель отловить строки с diff и расчленить на составлящие такую строку! ЗЫ: После решения этой задачи, встанет задача "как найти в этой строке под строку X разделенную символами \, т.е. слыш". Но это потом ! ;) Хотя кто может может уже приводить решение, буду только рад! ;) ЗЫ 2: >>dva300, опытный статус на форуме но никак не относительно знаний в той или иной области В точку! То что много балов, еще не говорит о знаниях! быть может человек набрал их в другой области, к примеру по С++ или задавая вопросы. Мое мнение, судить о человеке можно только о респектах, причем по реально толковым ответам, а не "Отлично побухали" или еще чтото в этом роде! |
||||
|
|||||
| dva300 |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2010 Где: Москва Репутация: 2 Всего: 1 |
Доброго дня,
что-то не пойму - танцы с бубном какие-то. провел эксперимент. 1) создал файл под юниксом с таки же содержанием как и у тебя. 2) скачал его по ssh точно в таком же виде (я так понял ты его именно так качаешь) 3) под виндой четко вижу что конец стороки LF 4) указал явно $/ = \012 - юниксовы формат конца строки LF или \012 код
работает без проблем. как я тебе и говорил возможно что там у тебя не только табуляция а например пробел и табуляция, или пробел табуляция пробел или табуляция пробел. Добавлено @ 12:19
нет, нет так. я такого не говорил. В системе Unix строки оканчиваются символом - LF (восмеричное \012) в Macintosh - CR (\015) в Windows - CRLF (\015\012) P.S. относительно "опыта" - это была шутка которую походу понял только я Это сообщение отредактировал(а) dva300 - 17.3.2010, 12:21 --------------------
Участник движения Культура Вождения |
||||
|
|||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
остались маленькие вопросы по скрипту:
1) не могу найти continue для Perl . Как аналог в Перл для подобной команды ? чтобы применить его в while и перейти к следующей итерации, не важно в какой глубине if-ов ! ;) 2) if ($_ =~ /\\str1\\/ || $_ =~ /\\str2\\/ || $_ =~ /\\Str3\\/) можно ли подобное написать короче ? Смысл при пробегании по массиву полученому после split вычленить и при их наличии записать путь в лог! Это сообщение отредактировал(а) EvilsInterrupt - 17.3.2010, 16:02 |
|||
|
||||
| dva300 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2010 Где: Москва Репутация: 2 Всего: 1 |
1) next 2) if (/str1/ || /str2/ || /Str3/) после разбиения split - ом у тебя уже не должно быть \ P.S. так в чем там была проблема ? --------------------
Участник движения Культура Вождения |
|||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
Все как ты и говорил: $/="\r"; спасибо! ))) еще один вопрос: если мы внутри while создали цикл foreach , а внутри в одном из условий last , то к чему отнесется этот last ? к foreach или while ? мне надо выйти из foreach , но продолжить while ! |
|||
|
||||
| dva300 |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2010 Где: Москва Репутация: 2 Всего: 1 |
я вообще то не так говорил или это Mac ?
относиться будет к циклу в котором вызываешь. только зачем тебе это ? иди от положительного условия а не от отрицательного. Это сообщение отредактировал(а) dva300 - 17.3.2010, 16:36 --------------------
Участник движения Культура Вождения |
||||
|
|||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
>>я вообще то не так говорил
ты намекнул про "$/" осталось из этого $path[-1] выдрать расширение, к примеру 231234123.bin.23412.ibin . Расширением файла будет ibin. и приплюсовать ее в : if(/str1/ || /str2/) близится результат, а это радует ;) |
|||
|
||||
| dva300 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2010 Где: Москва Репутация: 2 Всего: 1 |
что я так и не понял откуда выдрать и куда приплюсовать. либо давай пример либо звони. и будет тебе результат --------------------
Участник движения Культура Вождения |
|||
|
||||
| EvilsInterrupt |
|
||||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
>>либо давай пример
есть условие, уже:
и есть последний элемент массива $path[-1] это имя файла. Надо выдрать расширение файла. Пример строки "231234123.bin.23412.ibin" . Расширением файла будет ibin. после того как выдрали, надо поставить результат в условие и сравнить на равность строке "ibin". Псевдокод, после вставки:
|
||||
|
|||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Регулярные выражения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |