[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[原创代码] Perl在线汇率查询.pl (美元:RMB)

汇率.pl

第二行的
   $rcd="D:/记录/汇率记录.txt";
指定了一个用于记录汇率的文本,每次打开除了显示汇率还会往文本追加查询结果,供以后观察。

你知道,我perl很菜,为达目的,不仅生成临时文件,还用了wget。


求助啊   为什么发上来 $& 会变成 [ DISCUZ_CODE_0 ]  (在code里面)
改为quote存放代码,使用IE浏览器的可以通过 CTRL+鼠标左键点击quote框框, 选中框中的代码
$html="http://www.baidu.com/s?wd=美元汇率";
$rcd="E:/R_记录/汇率记录.txt";
open WRITE,">>$rcd" or warn "$!";

system("wget -O main.txt $html 2>nul >nul");
open READ,"<main.txt" or warn "File not exists\n";
foreach (<READ>) {
        if (/(1美元=.*人民币元)/) {
                print "$&\n";
                print WRITE "$&  ";
                if (/汇率数据由和讯外汇提供,更新时间:(\d+)-(\d+)-(\d+)/) {
                        print "$&\n\n";
                        print WRITE "${1}-${2}-${3}\n";
                }
        }
}
close WRITE;

$html="http://www.baidu.com/s?wd=汇率";
system("wget -O main.txt $html 2>nul >nul");
open READ,"<main.txt" or warn "File not exists\n";
foreach (<READ>) {
        if (/(更新时间.*\d:\d+)/) {
                print "$&\n";
                foreach $a (0..5) {
                        if ($_=~s#.*?<th.*?>(.*?)</th>##i) {
                                $arr1[$a]=$1;
                        }
                }
                foreach $a (0..5) {
                        if ($_=~s#.*?<td.*?>(.*?)</td>##i) {
                                printf "%-10s \t\t%s\n",$arr1[$a],$1;
                        }
                }
        }
}

print "Press Enter to quit";
<STDIN>;



人性化输出
  1. 1美元=6.4845人民币元
  2. 汇率数据由和讯外汇提供,更新时间:2011-06-02
  3. 更新时间:2011-6-2 10:31:17
  4. 币种                    美元(USD)
  5. 交易单位                100
  6. 中间价                  648.34
  7. 现汇买入价              647.04
  8. 现钞买入价              641.86
  9. 卖出价                  649.64
  10. Press Enter to quit
复制代码
  1. [ DISCUZ_CODE_1 ]
复制代码

本帖最后由 --Perl 于 2014-10-13 17:35 编辑

回复 1# 523066680
  1. $&
复制代码
  1. \$&
复制代码
:smile:

TOP

  1. $html="http://www.baidu.com/s?wd=美元汇率";
  2. $rcd="E:/R_记录/汇率记录.txt";
  3. open WRITE,">>$rcd" or warn "$!";
  4. system("wget -O main.txt $html 2>nul >nul");
  5. open READ,"<main.txt" or warn "File not exists\n";
  6. foreach (<READ>) {
  7.         if (/(1美元=.*人民币元)/) {
  8.                 print "$&\n";
  9.                 print WRITE "$&  ";
  10.                 if (/汇率数据由和讯外汇提供,更新时间:(\d+)-(\d+)-(\d+)/) {
  11.                         print "$&\n\n";
  12.                         print WRITE "${1}-${2}-${3}\n";
  13.                 }
  14.         }
  15. }
  16. close WRITE;
  17. $html="http://www.baidu.com/s?wd=汇率";
  18. system("wget -O main.txt $html 2>nul >nul");
  19. open READ,"<main.txt" or warn "File not exists\n";
  20. foreach (<READ>) {
  21.         if (/(更新时间.*\d:\d+)/) {
  22.                 print "$&\n";
  23.                 foreach $a (0..5) {
  24.                         if ($_=~s#.*?<th.*?>(.*?)</th>##i) {
  25.                                 $arr1[$a]=$1;
  26.                         }
  27.                 }
  28.                 foreach $a (0..5) {
  29.                         if ($_=~s#.*?<td.*?>(.*?)</td>##i) {
  30.                                 printf "%-10s \t\t%s\n",$arr1[$a],$1;
  31.                         }
  32.                 }
  33.         }
  34. }
  35. print "Press Enter to quit";
  36. <STDIN>;
复制代码

TOP

说了prel我不懂,感觉标签间的数据可以一次取出,用sed就是:
  1. sed "s/[^>]*>\([^<>]*\)<*/\1/g"
复制代码
***共同提高***

TOP

本帖最后由 523066680 于 2011-6-2 11:00 编辑

关键行:
   <tr> <th>币种</th> <th>交易单位</th> <th>中间价</th> <th>现汇买入价</th> <th>现钞买入价</th> <th id="op_table02_zh0">卖出价</th> </tr>   <tr> <td>美元(USD)</td> <td>100</td> <td>648.34</td> <td>647.04</td> <td>641.86</td> <td class="op_table02_zh">649.64</td> </tr>   

输出:
币种                    美元(USD)
交易单位                100
中间价                  648.34
现汇买入价              647.04
现钞买入价              641.86
卖出价                  649.64

那个匹配应该是为了求稳当吧
s///带有替换作用,前面 的.*?是用来删除前面字符串的

TOP

本帖最后由 batman 于 2011-6-2 10:27 编辑

可惜我是prel门外汉,只能纯顶一个,顺便建议exist将常用币种的汇率换算搞出来。。。

另外感觉这个正则是不是可以简化下:($_=~s#.*?<th.*?>(.*?)</th>##i)(应该是正则吧?)
***共同提高***

TOP

返回列表