2014-11-27 4 views
0

SO yeah У меня есть этот файл - allI need - это последние пять строк из файла. Я знаю, что я не должен разбирать html без модуля html. но это не так, как программа строгая - я имею в виду, что мне действительно нужны последние пять строк или около того. Кроме того, я не могу загрузить любые модули. У меня есть доступ к прокси-серверу, который позволяет мне скручивать файлы из командной строки , так что, возможно, есть способ использовать cpan fromteh или через прокси-сервер, но это уже вопрос. Дело в том, что когда я разбираю строки с файлом или так, я не получаю «Имена в MY-DEPT, которые ограничены» , и я хочу его. он пропускается.Формирование разобранного вывода perl

[email protected]:~/hey/hit_BANK_restricted.$ cat restricted.html.bak 
To:[email protected]_business.com 
From:[email protected]_business.com 
Subject: Restricted List for 25-Nov-2014 
Content-Type: text/html; 
Content-Transfer-Encoding: quoted-print HTMLFILEable> 
<HTML> 
    <HEAD> 
    <STYLE type="text/css"> 
    body { font-family: verdana; font-size: 10pt } 
    td  { font-size: 8pt; vertical-align: top } 
    td.cat { color: 6699FF ; background: 666699; text-align: right; vertical-align: bottom; height: 30 } 
    td.ind { width: 20pt } 
    td.link { } 
    td.desc { color: a0a0a0 } 
    a:visited { color: 800080; text-decoration: none } 
    </STYLE> 
<TITLE>TRADES</TITLE> 
</HEAD><BODY><TABLE width="80%" border="0" cellpadding="0" cellspacing="0"> 
     <tr> 
     <td colspan="3" align="center">Names IN MY-DEPT that are restricted</td> 
     </tr> 
     <tr> 
     <td><b>Restriction Code</b></td> 
     <td><b>Company</b></td> 
     <td><b>Ticker</b></td> 
    </tr><tr><td>RL5</td><td>First Trust Global Risk Managed Inc</td><td>ETP</td></tr><font color="red"><tr><td>RLMT</td><td>GT Advanced Technologies Inc</td><td nowrap>GTATQ (position only, not in MY-DEPT)</td></tr></font></TABLE></BODY</HTML>[email protected]:~/hey/hit_BANK_restricted.$ 
[email protected]:~/hey/hit_BANK_restricted.$ 
[email protected]:~/hey/hit_BANK_restricted.$ 
[email protected]:~/hey/hit_BANK_restricted.$ 
[email protected]:~/hey/hit_BANK_restricted.$ 
[email protected]:~/hey/hit_BANK_restricted.$ 
[email protected]:~/hey/hit_BANK_restricted.$ 
[email protected]:~/hey/hit_BANK_restricted.$ cat parse_restrict2 
#!/usr/bin/perl 
use strict; 
use warnings ; 
my @restrict_codes = qw(RL3 RL5 RL5H RL6 REGM RAF RLMT RTCA RTCAH RTCB RTCBH RTCI RTCIH RLSI RLHK RLJP RPROP RLCB RLCS RLBZ RLBZH RLSUS); 
my $rest_dir = "/home/new_guy/hey/hit_BANK_restricted./"; 
my $restrict_file = "restricted.html.bak" ; 
open my $fh_rest_codes, '<', "$rest_dir$restrict_file" or die "cannot load $! " ; 
while (<$fh_rest_codes>) { 
    next unless $_ =~ m/Names/; 
    my @lines = <$fh_rest_codes> ; 
    } 
foreach(@lines) { 
    s/td/ /g ; 
    s/<[^>]*>/ /g ; 
    foreach $restrict(@restrict_codes) { 
     s/$restrict/\n$restrict/g; 
     } 
    print $_ ; 
    sleep 1 ; 
    } 

print "\n" ; 

Эти результаты, которые я получаю: Они Хорошо, но я хотел бы, чтобы форматировать их и я не знаю, как.

[email protected]:~/hey/hit_BANK_restricted.$ cat parse_restrict^C 
[email protected]:~/hey/hit_BANK_restricted.$ ./parse_restrict2 


      Restriction Code 
      Company 
      Ticker 

RL5 First Trust Global Risk Managed Inc ETP 
RLMT GT Advanced Technologies Inc GTATQ (position only, not in MY-DEPT) 
[email protected]:~/hey/hit_BANK_restricted.$ 
[email protected]:~/hey/hit_BANK_restricted.$ 
[email protected]:~/hey/hit_BANK_restricted.$ 
[email protected]:~/hey/hit_BANK_restricted.$ 
[email protected]:~/hey/hit_BANK_restricted.$ 

Возможно ли каким-либо образом получить линии в таком формате.

Names IN MY-DEPT that are restricted 

Restriction Code Company        Ticker 
RL5    First Trust Global Risk Managed Inc ETP 
RLMT    GT Advanced Technologies Inc   GTATQ (position only, not in MY-DEPT) 
+0

Получение CPAN для работы с прокси-сервером не слишком сложно. Посмотрите на 'o conf http_proxy'. Использует тот же механизм, что и LWP (потому что он много использует LWP). – Sobrique

ответ

1

Хороший вопрос, вы могли бы попробовать это временное решение, если вам нравится:

my @lines; 
while (<$fh_rest_codes>) { 
    next unless $_ =~ m/Names/; 
    push(@lines, $_); 
    push (@lines, <$fh_rest_codes>); 
} 
my $str=join ('',@lines);  
$str=~m|<td.*?>(.*?)</td>|;  
print "$1\n\n"; 
$str=~ m|<tr>(.*?)</tr>|msg; 
my $fmt="%-24s%-40s%-40s\n"; 
printf ($fmt, $1=~ m{<td><b>(.*?)</b></td>}msg); 
while ($str=~ m|<tr>(.*?)</tr>|msg) { 
    printf ($fmt, $1=~ m{<td.*?>(.*?)</td>}msg); 
} 

Выход:

Names IN MY-DEPT that are restricted 

Restriction Code  Company         Ticker         
RL5      First Trust Global Risk Managed Inc  ETP          
RLMT     GT Advanced Technologies Inc   GTATQ (position only, not in MY-DEPT) 
Смежные вопросы