c 提取html table,用HTML提取几行:: TableExtract

这篇博客探讨了Perl编程中的代码优化技巧,建议使用`use strict`和`use warnings`来避免错误,并提倡直接访问数组元素而非使用计数器变量。还介绍了如何使用数组切片选择特定行,以及如何简洁地处理数组内容。此外,提出了去除冗余的字符串操作,以提高代码效率。
摘要由CSDN通过智能技术生成

几点建议:

始终:

use strict;

use warnings;

这将迫使你与my来声明变量。例如

foreach my $ts ($te->table_states) {

my $cnt = 1;

(warnings将让你了解最愚蠢的错误。strict会要求您使用在某些情况下,更好的做法,防止错误)。

在几个地方,您在使用数组时会使用自己的计数器变量。你不需要这样做。相反,直接获取你想要的数组元素。例如$array[3]得到第三个元素。

Perl还允许数组切片获取所需的某些元素。 @array[4,5,13]获得数组的第五,第六和第十四个元素。你可以用它来处理,而不是通过所有这些循环只有你想要的行:

my @rows = $ts->rows;

foreach my $row (@rows[4,5,13]) #process only the 5th, 6th, and 14th rows.

{

...

}

这里是同样的事情的快捷版本,使用匿名数组:

foreach my $row (@{[$ts->rows]}[4,5,13])

而且,也许你要定义你想要在你的代码的其他地方行:

my @wanted_rows = (4,5,13);

...

foreach my $row (@{[$ts->rows]}[@wanted_rows])

此代码是相当混乱:

$PrintLine= join("\t", @$row);

@RowData=split(/\t/,$PrintLine);

$PrintLine =~ s/\r//ig;

$PrintLine =~ s/\t//ig;

首先,您要加入一个包含制表符的数组,然后您将分裂刚刚加入的数组以重新获取数组。然后,您仍然从行中删除所有制表符。

我建议你摆脱所有的代码。无论何时需要阵列,只需使用@$row,而不是复制它。如果您需要打印调试数组(这是所有你似乎与$PrintLine做,你可以直接打印一个数组:

print @$row; #print an array, nothing between each element.

print "@$row"; #print an array with spaces between each element.

伴随着这些变化,你的代码将是这样的:

use strict;

use warnings;

my @wanted_rows = (4,5,13);

my $te = new HTML::TableExtract(count => 0);

$te->parse($content);

# Examine all matching tables

foreach my $ts ($te->table_states) {

foreach my $row (@{[$ts->rows]}[@wanted_rows]) {

s/[\xC3\xA1\xC3\xA0\xC3\xA2\xC3\xA3\r\n]//ig for (@$row);

my $SiteID = $$row[16] // ''; #set to empty strings if not defined.

my $SiteName = $$row[38] // '';

print MYFILE2 $BridgeCase."\t".$SiteID."\t".$SiteName;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值