The OpenNET Project / Index page

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

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

"Вытащить строку из файла"  
Сообщение от ALUM on 05-Июн-08, 13:10 
open FN, "$Epr_file_name" || die "Файл не найден!";
foreach( <FN> )
{ $Wget_epr .= $_; }
close FN;

теперь надо найти в $Wget_epr подстроку "Software realese 3.0.0" и взять только цифры с точками.

помогите пожалуйста, моск рушится

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

 Оглавление

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


1. "Вытащить строку из файла"  
Сообщение от Mil on 05-Июн-08, 13:29 
>open FN, "$Epr_file_name" || die "Файл не найден!";
>foreach( <FN> )
>{ $Wget_epr .= $_; }
>close FN;
>
>теперь надо найти в $Wget_epr подстроку "Software realese 3.0.0" и взять только
>цифры с точками.
>
>помогите пожалуйста, моск рушится

if ($Wget_epr=~m/Software\srealese\s([\d.]+)/) {
  print "найдено $1\n";
} else {
  print "не найдено\n";
}

---
а вообще Perl -- зло :-)

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

2. "Вытащить строку из файла"  
Сообщение от ALUM on 05-Июн-08, 13:41 
>[оверквотинг удален]
>>помогите пожалуйста, моск рушится
>
>if ($Wget_epr=~m/Software\srealese\s([\d.]+)/) {
>  print "найдено $1\n";
>} else {
>  print "не найдено\n";
>}
>
>---
>а вообще Perl -- зло :-)

не ловит.

пример файла:

    <TD height="24" COLSPAN=1 align=right background="imagesnavi/topbg3.gif" align="right" class="header">
 DVD Rel. 20  - Software release 4.1.0   </TD>

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

3. "Вытащить строку из файла"  
Сообщение от Mil on 05-Июн-08, 15:17 
>[оверквотинг удален]
>>
>>---
>>а вообще Perl -- зло :-)
>
>не ловит.
>
>пример файла:
>
>    <TD height="24" COLSPAN=1 align=right background="imagesnavi/topbg3.gif" align="right" class="header">
> DVD Rel. 20  - Software release 4.1.0   </TD>

так вы определитесь, что вам надо искать release или realese и ищите именно это :-)

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

5. "Вытащить строку из файла"  
Сообщение от ALUM on 05-Июн-08, 16:36 
>[оверквотинг удален]
>>
>>не ловит.
>>
>>пример файла:
>>
>>    <TD height="24" COLSPAN=1 align=right background="imagesnavi/topbg3.gif" align="right" class="header">
>> DVD Rel. 20  - Software release 4.1.0   </TD>
>
>так вы определитесь, что вам надо искать release или realese и ищите
>именно это :-)

дело не в неправильном написании, эту ошибку я сразу просёк, за идиота не держите.

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

6. "Вытащить строку из файла"  
Сообщение от andy (??) on 06-Июн-08, 06:52 
[red@mail ~/dev/perl/re]$ ls -l
total 4
-rwxr-xr-x  1 red  red  475  6 июн 10:43 on20080606
-rw-r--r--  1 red  red  163  6 июн 10:41 on20080606.txt
[red@mail ~/dev/perl/re]$
[red@mail ~/dev/perl/re]$ cat ./on20080606
#!/usr/bin/perl
use strict;
use warnings;
use vars qw( $text $release );
sub get_release($);

open(F, '<', 'on20080606.txt') or die($!); $text.= $_ while <F>; close(F);

if( defined( $release = get_release($text) ) ) {
    printf "found release %s\n", $release;
} else {
    printf "nothing found\n";
}

sub get_release($) {
    my($text, $release);
    $text = shift;
    ( $release ) = $text =~ / \b software \s+ release \s+ (\d[a-z0-9.]*) \b /gxis;
    return $release;
}
[red@mail ~/dev/perl/re]$
[red@mail ~/dev/perl/re]$
[red@mail ~/dev/perl/re]$ cat ./on20080606.txt
   <TD height="24" COLSPAN=1 align=right
   background="imagesnavi/topbg3.gif" align="right" class="header">
DVD Rel. 20  - Software
release 11.Pre4</TD>
gfwd
[red@mail ~/dev/perl/re]$
[red@mail ~/dev/perl/re]$ ./on20080606
found release 11.Pre4
[red@mail ~/dev/perl/re]$


>а вообще Perl -- зло :-)

любой инструмент или неудобен или опасен, если не читать мануалы к нему (ни к кому лично фраза не относится, просто комментарий)

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

7. "Вытащить строку из файла"  
Сообщение от madskull (??) on 06-Июн-08, 10:17 
че-та как-то много всего...

open F,"<file" or die $!;
($_=join "",<F>)=~s/^.+software\s+release\s+(.+?)\s.+/$1/si;
print;

Хотя, если в целях обучения... все равно много :)

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

8. "Вытащить строку из файла"  
Сообщение от angra (ok) on 06-Июн-08, 10:36 
Вы это проверяли хоть? Проверьте на строке:
software release 1.23
То есть без лишних символов в начале и одиночного пробельного и произвольных дальше в конце. Я бы сказал что ваш регекс нежизнеспособен, слишком специфические условия ему подавай.  
Но даже если хочется короче, то я бы все-таки предпочел:
open F,"<a" or die $!;map {print "$1\n" if /software\s+release\s+([\d.]+)/i} <F>
Хотя еще правильней было бы использовать такой:
open F,"<a" or die $!;foreach (<F>) {print "$1\n" if /[Ss]oftware\s+[Rr]elease\s+([\d.]+)/}
Данный вариант не ест лишней памяти и будет нормально работать на больших файлах, также избавлен от проблем со скоростью у /i.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Вытащить строку из файла"  
Сообщение от madskull (??) on 06-Июн-08, 12:33 
>Вы это проверяли хоть? Проверьте на строке:
>software release 1.23
>То есть без лишних символов в начале и одиночного пробельного и произвольных
>дальше в конце. Я бы сказал что ваш регекс нежизнеспособен, слишком
>специфические условия ему подавай.

Конечно проверял. На том примере, чтобыл дан - работает.
Да я и не ставил целью сделать что-то универсальное. Есть задача - есть решение.
Если бы мне понадобилось выдрать что-то из файла, я бы сделал примерно так, однострочником и не задумываяь о памяти, скорости и тому подобном.
Мало того, я бы даже не стал заморачиваться с открытием файла, а сделал бы что-то вроде
perl -wlne '/Software release (.+?) / && print $1' file

И вообще, я не регексп демонстрировал, а то, что можно сделать намного короче.

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

4. "Вытащить строку из файла"  
Сообщение от vg (??) on 05-Июн-08, 16:11 
>[оверквотинг удален]
>>>помогите пожалуйста, моск рушится
>>
>>if ($Wget_epr=~m/Software\srealese\s([\d.]+)/) {
>>  print "найдено $1\n";
>>} else {
>>  print "не найдено\n";
>>}
>>
>>---
>>а вообще Perl -- зло :-)

man perlre

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

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

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




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

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