The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"передвижение внутри файла"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"передвижение внутри файла"  
Сообщение от raba email(ok) on 30-Мрт-08, 11:55 
Cтыдно спрашивать, но все же, как в Perl'e поднятся 3 строки наверх, от найденой ключевой, а потом спустится 2 строки в низ, от той же самой ключевой ?
Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "передвижение внутри файла"  
Сообщение от adews (ok) on 30-Мрт-08, 13:14 
>Cтыдно спрашивать, но все же, как в Perl'e поднятся 3 строки наверх,
>от найденой ключевой, а потом спустится 2 строки в низ, от
>той же самой ключевой ?

Вы определитесь,- Вам справочник по мелкомягкому блокноту нужен или по регулярным выражениям?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "передвижение внутри файла"  
Сообщение от raba (ok) on 30-Мрт-08, 16:43 
Речь идет о Unix, а насчет регулярных выражении, мне все равно, лишь бы текущия позиция в файле была променливая и можно было двигать ее куда угодно.Например с 4той поднятся на 2ой строке ...Еще раз как ето сделать??!!!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "передвижение внутри файла"  
Сообщение от anonymous (??) on 31-Мрт-08, 01:12 
>Речь идет о Unix, а насчет регулярных выражении, мне все равно, лишь
>бы текущия позиция в файле была променливая и можно было двигать
>ее куда угодно.Например с 4той поднятся на 2ой строке ...Еще раз
>как ето сделать??!!!

Напрямую переходить к предыдущим строкам не получится.  Нужно запоминать позицию в файле ($prev_line = tell(FILE)) и потом можно будет к ней перейти (seek(FILE, $prev_line, 0)).

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "передвижение внутри файла"  
Сообщение от anonymous (??) on 31-Мрт-08, 01:15 
Да, самое главное: скорее всего (99.999% случаев) вам это не нужно.  Вам нужны или регулярные выражения, которые обрабатывают сразу много строк, или разбор файла через грамматику и нормальный lexer/parser.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "передвижение внутри файла"  
Сообщение от idle (ok) on 31-Мрт-08, 09:28 
>Речь идет о Unix, а насчет регулярных выражении, мне все равно, лишь
>бы текущия позиция в файле была променливая и можно было двигать
>ее куда угодно.Например с 4той поднятся на 2ой строке ...Еще раз
>как ето сделать??!!!

Можно использовать переменную $INPUT_LINE_NUMBER.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "передвижение внутри файла"  
Сообщение от angra (ok) on 31-Мрт-08, 03:43 
Записывать строки в массив не судьба? Текстовый файл читается в потоковом режиме и это уже дело программиста придумать эффективный алгоритм, ЯП здесь не причем.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "передвижение внутри файла"  
Сообщение от raba (ok) on 31-Мрт-08, 11:14 
Ребята более менее проблема решена, только как переобразовать такой колонке:
0m46s
2m42s
2m50s
1m53s
2m05s

в такой(сек):
46
162
170
113
125

Вроде как sed'om можно (символы до 'm' умножить на 60 + остаток до 's') только как прочесть нужные мне символы при условии что до етой колонке предшествует кучу всякого хлама, резделено пробелами и табуляции. Например

впап апа  354   0m46s
35 авва      вп 2m42s
вы  54    авав  2m50s
в454 вав 45     1m53s
кйу йцу    куеы  2m05s

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "передвижение внутри файла"  
Сообщение от idle (ok) on 31-Мрт-08, 11:21 
Например так:
echo 2m42s | perl -ane '/(\d{1,2})m(\d{1,2})s/;print $1*60+$2'

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "передвижение внутри файла"  
Сообщение от raba (ok) on 31-Мрт-08, 11:41 
'echo 2m42s | perl -ane '/(\d{1,2})m(\d{1,2})s/;print $1*60+$2': Все круто, большое спасибо, пашеть :) только при секунды размером трех знаков и больше урезает до двух и так считает, а как сделать так, чтобы считало несмотря на обьемам секунд?


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "передвижение внутри файла"  
Сообщение от idle (ok) on 31-Мрт-08, 11:49 
>'echo 2m42s | perl -ane '/(\d{1,2})m(\d{1,2})s/;print $1*60+$2': Все круто, большое спасибо, пашеть
>:) только при секунды размером трех знаков и больше урезает до
>двух и так считает, а как сделать так, чтобы считало несмотря
>на обьемам секунд?

Про "секунды размером трех знаков" речи не было.
Можно поменять (\d{1,2})s на (\d{1,3})s или ещё проще(и жадней) (\d+)s


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

14. "передвижение внутри файла"  
Сообщение от raba (ok) on 31-Мрт-08, 13:30 
Благодарю!!!
..Не в теме, скинте пож. если не затруднить откуда про ето разбиение читали, мне тоже захотелось быть крутым после того как все проделал и увидел разультат :))) !
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

15. "передвижение внутри файла"  
Сообщение от idle (ok) on 31-Мрт-08, 13:42 
>Благодарю!!!
>..Не в теме, скинте пож. если не затруднить откуда про ето разбиение
>читали, мне тоже захотелось быть крутым после того как все проделал
>и увидел разультат :))) !

http://perldoc.perl.org/perlre.html
Если перл в новинку, читать следует начинать с llama book.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "передвижение внутри файла"  
Сообщение от angra (ok) on 31-Мрт-08, 11:34 
Если нужно менять прям в тексте, то можно так:
$echo -e "sadad sadas 433 2m01s fsdf\n wtf 01m12s" |perl -pe 's/(?<=\s)(\d{1,2})m(\d{1,2})s/$1*60+$2/e'

sadad sadas 433 121 fsdf
wtf 72

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "передвижение внутри файла"  
Сообщение от raba (ok) on 31-Мрт-08, 12:22 
Всего лишь одно слово, РЕСПЕКТ!!!
Молодцы, выручили, только последное чтоб закончить:
    - как в перле и или через command-line при условии что присуствует пустая строка где-то в средине файла, вычеслить ее и удалить;
    - верхний примерочек опять же считает только двух знаков для минуты :( , при указание  echo -e "sadad sadas 433 500m01s fsdf\n wtf 01m12s" |perl -pe 's/(?<=\s)(\d{1,2,3})m(\d{1,2,3})s/$1*60+$2/e'

sadad sadas 433 500m01s fsdf
wtf 01m12s

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

13. "передвижение внутри файла"  
Сообщение от idle (ok) on 31-Мрт-08, 12:31 
>[оверквотинг удален]
>Молодцы, выручили, только последное чтоб закончить:
>    - как в перле и или через command-line
>при условии что присуствует пустая строка где-то в средине файла, вычеслить
>ее и удалить;
>    - верхний примерочек опять же считает только двух
>знаков для минуты :( , при указание  echo -e "sadad
>sadas 433 500m01s fsdf\n wtf 01m12s" |perl -pe 's/(?<=\s)(\d{1,2,3})m(\d{1,2,3})s/$1*60+$2/e'
>
>sadad sadas 433 500m01s fsdf
> wtf 01m12s

s/^\s+$//; или s/^$//; смотря что называть пустой строкой.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

17. "передвижение внутри файла"  
Сообщение от raba (ok) on 02-Апр-08, 14:09 
Рябята я тут начал по тихонку заниматся регулярными выражениями с помощью sed, но для меня как понял оказалось немножко препятсвие:
   - считать строка с конца к началу $.^ (что-то не получается)
   - как инвертировать результат sed (при условии что найдено условие, сделать что-то с остальное кроме ето условие или вывести на екране ето условие)
   - как вычеслить запись где-то в средине, при условии что она заключена между одинаковыми едементами - допустим ...<record>... sed 's/^[^<]*(\([^>]*\)).*/\1/' (что-то опять не так делаю)
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

18. "передвижение внутри файла"  
Сообщение от angra (ok) on 02-Апр-08, 14:28 
Почитать Mastering Regular Expression, возможно есть на русском. В этой книге все разжевано исключительно качественно, также учтены различные диалекты регексов. Кстати советовал бы все-таки учить перловые как самые совершенные, так что отложите пока sed в сторонку.
Вернуться в школу на уроки русской литературы дабы научится внятно выражать свои мысли, из трех вопросов более менее понятен только третий.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

19. "передвижение внутри файла"  
Сообщение от phpcoder email(??) on 02-Апр-08, 14:59 
>Рябята я тут начал по тихонку заниматся регулярными выражениями с помощью sed,
>но для меня как понял оказалось немножко препятсвие:
>   - считать строка с конца к началу $.^ (что-то
>не получается)

Что-то непонятно :)

>   - как инвертировать результат sed (при условии что найдено
>условие, сделать что-то с остальное кроме ето условие или вывести на
>екране ето условие)

Поставить ! перед условием?
Давайте пример.

>   - как вычеслить запись где-то в средине, при условии что она заключена между одинаковыми едементами - допустим ...<record>... sed 's/^[^<]*(\([^>]*\)).*/\1/' (что-то опять не так делаю)

Что значит вычислить? Давайте с примерами.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

20. "передвижение внутри файла"  
Сообщение от raba email(ok) on 06-Апр-08, 10:50 
Помогите извлеч IP и port от данного примера с помощью perl и результат записать в масив,только сильно не ругайтесь, я только начинаю, у меня что-то не так работает:

...
$i = 0;
@arr();
...
44.5.234.66.23
192.168.0.44.80

... {
     $i++;

     $ip = m/\d+\.\d+\.\d+\.\d+/;

     $port = s/\.//;

     print "@arr[$i]=($ip,$port),\n";
}

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

21. "передвижение внутри файла"  
Сообщение от idle (ok) on 07-Апр-08, 12:31 
Жуть.
Читайте llama book.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

22. "передвижение внутри файла"  
Сообщение от raba (ok) on 07-Апр-08, 12:54 
Читаю днем и ночью, ето не шутка , только тупинкий оказался я, а тупинким помогать надо:
Почему, при
$ip = m/\d+\.\d+\.\d+\.\d+/;  выдается в качестве IP '1'  
$ip =~ m/\d+\.\d+\.\d+\.\d+/; выдается в качестве IP 'ничего' ?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

23. "передвижение внутри файла"  
Сообщение от raba (ok) on 07-Апр-08, 13:09 
Спасибо, тупинкие разобрались! Давайте тему наконец-то закроим, а то буду получать только оскарбления по своему адресу!


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

16. "передвижение внутри файла"  
Сообщение от angra (ok) on 31-Мрт-08, 15:34 
надо не {1,2,3}, а {1,3}, то есть верхний и нижний предел. А можно просто \d+, что равносильно {1,}.
А вообще читайте man perlretut(регексы для начинающих), man perlre(справочник по синтаксису регексов), man perlop(выборочно, по синтаксису операторов работающих с регексами, например использованному мной s///)
Дабы убрать пустую строку ее надо всего лишь не выводить при обработке файла. Например так:
perl -i -ne 'print unless /^\s+$/' filename
Также рекомендуется к прочтению man perlrun дабы понимать роль ключей вроже i,n,p,e,a итд, компактность(или black magic :) ) перловых однострочников во многом зиждется на них.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру