Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вопрос по регулярке, обработка файла 
V
    Опции темы
shamber
Дата 27.2.2007, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



Есть файлик от commview.

Нужно вытащить середину.

формат такой : 


0x0450   1B 40 30 37 1B 40 30 37-20 8F 90 8E 82 85 90 8A   .@07.@07 ПРОВЕРК
0x0460   80 20 43 4F 4D 2D 8F 8E-90 92 8E 82 20 1B 40 31   А COM-ПОРТОВ .@1
0x0470   37 1B 40 31 37 20 20 20-BA 1B 40 37 37 1B 40 37   7.@17   ¦.@77.@7
0x0570   67 37 20 20 1B 59 38 20-1B 52                     g7  .Y8 .R


то что жирное нужно вытащить.  Это хекс значения
я написал так
Код

\s{3,5}(.*)\s{3,50}

 
Работает, но на строке 0x0470 захватывает лишнее.
Подскажите варианты.

С уважением Shamber
PS в аттаче этихе строки только в файле.

Это сообщение отредактировал(а) shamber - 27.2.2007, 16:01

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  test.txt 0,29 Kb
PM MAIL Jabber   Вверх
HalkaR
Дата 27.2.2007, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: нет
Всего: 42



Код

\s{3,5}((\d\s )*?)\s{3,50}

PM MAIL   Вверх
amg
Дата 27.2.2007, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Например
Код

(split /\s{3,}/, $_)[1]
Код

perl -lne 'print((split /\s{3,}/, $_)[1])' file

Или на основе авторского варианта
Код

/\s{3,5}(.*?)\s{3,50}/


Это сообщение отредактировал(а) amg - 27.2.2007, 16:31
PM MAIL   Вверх
Nab
Дата 27.2.2007, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 25.3.2006
Где: Kiev

Репутация: 26
Всего: 37



я немного не понял что нужно, но имхо это нормальный форматированный дамп, если нужны просто хекс числа, то по мне лучше вот так

Код

while (<>) {
    chomp;
    s/^\S+\s+([0-9A-F\-\s]{23})\-([0-9A-F\-\s]{23})\s*.*$/$1 $2/;
    push @result, split;
}

Писал прям в форум, без проверки...

или думаю еще быстрее будет:
Код

while (<>) {
    chomp;
    push @result, split('\s|\-', substr($_, 10, 47));
}



--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
shamber
Дата 27.2.2007, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



Щас буду тестить, о результатах расскажу smile

Вариант 
amg,  нормально отработал.

А вот про 
Nab, 
Код

substr($_, 10, 47)


просто гениально smile, я что-то старею, что можно ведь и просто по индексу разрезать smile

Это сообщение отредактировал(а) shamber - 27.2.2007, 17:10
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0444 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.