Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Perl (http://www.flasher.ru/forum/forumdisplay.php?f=21)
-   -   Подскажите - где тут грабли???? (http://www.flasher.ru/forum/showthread.php?t=27268)

Unholy 15.02.2002 15:24

Подскажите - где тут грабли????
 
Я в перле почти никак, но надо сделать.... :(

Имеется файло usd.pl (скрипт не мой - скачал), которое должно получать дату и текущий курс доллара с сайта РБК и писать в файл... мне надо шоб оно мне в хтмл в нужное место выводило только курс....

пытался сделать просто вывод в браузер, еще без позиционирования.... дату выдает, а вместо курса - 0.0

Исходник:

#!/usr/bin/perl
$URL = "http://www.rbc.ru/"; # URL with rate
$keyword = "USD г+ ¦L"; # stamp of start line
$fhistory = "rate_history.txt"; # file of rate history
$frate = "rate.txt"; # file of rate
#$add_percent = 2.; # add that percents to rate before saving
$format = "%5.1f"; # format of rate to save
$regexp = "[\\d\\/,]+"; # regular expression to extract date and rate; duplicate any "\"

use LWP::Simple;

$content = get($URL);

@arr = split(/\n/, $content);

$flag = 0;
for (@arr) {
if ($flag == 0) {
if (/$keyword/) {$flag = 1};
} elsif ($flag == 1) {
/>($regexp)</;
# print "Date: $1\n";
$date = $1;
$flag = 2;
} elsif ($flag == 2) {
/>($regexp)</;
# print "Rate: $1\n";
$rate = $1;
$flag = 3;
}
}

$rate =~ s/,/./;

$rate *= (1+$add_percent/100);

$rate = sprintf($format,$rate);

open (OUT, ">>$fhistory");
print OUT "$date\t$rate\n";
close OUT;

open (OUT, ">$frate");
print OUT "$rate";
close OUT;

Чего я сделал (да почти ничего):

#!/usr/bin/perl
$URL = "http://www.rbc.ru/"; # URL with rate
$keyword = "USD г+ ¦L"; # stamp of start line
#$fhistory = "/var/log/rate_history.txt"; # file of rate history
#$frate = "/var/log/rate.txt"; # file of rate
#$add_percent = 2.; # add that percents to rate before saving
$format = "%5.1f"; # format of rate to save
$regexp = "[\\d\\/,]+"; # regular expression to extract date and rate; duplicate any "\"

use LWP::Simple;

$content = get($URL);

@arr = split(/\n/, $content);

$flag = 0;
for (@arr) {
if ($flag == 0) {
if (/$keyword/) {$flag = 1};
} elsif ($flag == 1) {
/>($regexp)</;
print "Date: $1\n";
$date = $1;
$flag = 2;
} elsif ($flag == 2) {
/>($regexp)</;
print "Rate: $1\n";
$rate = $1;
$flag = 3;
}
}

$rate =~ s/,/./;

$rate *= (1+$add_percent/100);

$rate = sprintf($format,$rate);

##open (OUT, ">>$fhistory");
##print OUT "$date\t$rate\n";
##close OUT;

##open (OUT, ">$frate");
##print OUT "$rate";
##close OUT;
print "Content-type: text/html\n";
print "\n";
print "<html><body>";
print "<b>";
print "$rate\n";
print "</b>";
print "</body></html>";

Заранее благодарен.

Fiksa 17.02.2002 08:23

Привет!

А до этого все работало???

der 17.02.2002 17:35

че-то я не пойму - зачем строку
#$add_percent = 2.
коментировать?

когда потом -
$rate *= (1+$add_percent/100);

Unholy 17.02.2002 20:43

Re: Подскажите - где тут грабли?
 
2Fiksa: не знаю.... по крайней мере файл не создавало, в него не писало и вообще не работало...

2der: думаешь и это закоментировать? я вообще-то пробовал раскомментировать эту строку, но он как 0.0 выдавал, так и выдает :(

В общем не знаю.... правда появился другой вариант, но он корявый...

в конце вместо print "$rate\n"; я прописал print "@arr[381]". но оно тогда всю строку выводит, а мне всякие тэги хтмлные, которые курс бакса обрамляют, нафик не нужны..... как их из строки удалить и вывести только курс???? :(

вот такая вот задачка :(

DeepDiver 17.02.2002 23:09

Трабл был в регулярных выражениях. Они были настроены немного на другой формат.
Вот исправленная версия:
Код:

#!/usr/bin/perl
$URL = "http://www.rbc.ru/"; # URL with rate
$keyword = "Нал. USD"; # stamp of start line
$fhistory = "rate_history.txt"; # file of rate history
$frate = "rate.txt"; # file of rate
$add_percent = 2.; # add that percents to rate before saving
$format = "%5.1f"; # format of rate to save
$timeregexp = '\d+\:\d+'; # regular expression to extract time;
$rateregexp = '\d+\,\d+'; # regular expression to extract rate;

use LWP::Simple;

$content = get($URL);

@arr = split(/\n/, $content);

$flag = 0;
for (@arr) {
 if ($flag == 0) {
  if (/$keyword/)  $flag = 1;
 } elsif ($flag == 1) {
  /($timeregexp)/;
  print "Time: $1\n";
  $date = $1;
  $flag = 2;
 } elsif ($flag == 2) {
  /($rateregexp)/;
  print "Rate: $1\n";
  $rate = $1;
  $flag = 3;
 }
}

$rate =~ s/,/./;

$rate *= (1+$add_percent/100);

$rate = sprintf($format,$rate);

open (OUT, ">>$fhistory");
print OUT "$date\t$rate\n";
close OUT;

open (OUT, ">$frate");
print OUT "$rate";
close OUT;


Unholy 19.02.2002 09:35

Re: Подскажите - где тут грабли?
 
2All: большое спасибо всем, кто откликнулся.

2DeepDiver: А Вам - отдельное спасибо. действительно все работает, только мне нужно было в хтмл все это выводить. Но это уж я сам без проблемов сделал :))
Еще раз большое спасибо.


Часовой пояс GMT +4, время: 11:07.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.