我对这段代码的目标是清理一系列元素(一个URL列表,一些包含特殊字符,如%
),这样我最终可以将它与另一个URL的文件进行比较并输出哪些比赛。 URL列表来自.csv
文件,第一个字段是我想要的URL(还有一些我用快速if()
语句跳过的其他条目)。
foreach my $var(@input_1) {
#Skip anything that doesn't start with http:
if ((/^[#U]/ ) || !(/^h/)) {
next;
}
#Split the .csv into the relevant field:
my @fields = split /\s?\|\s?/, $_;
$var = uri_unescape($fields[0]);
}
我的分隔符是csv中的|
。在其当前设置中,以及当我将$_
更改为$var
时,它仅返回空行。当我在循环开始时删除$var
声明并使用$_
时,它将以正确的格式输出URL。但在这种情况下,如何将输出分配给数组中的同一元素?这是否需要第二个数组才能将值输出到?
我对perl比较陌生,所以我确信有一些我不知道的东西。我现在不知道为什么删除$var
声明中的foreach
会破坏@fields
行的解析,但删除它并使用$_
则不会。阅读perlsyn文档并没有像我希望的那样有用。任何帮助表示赞赏!
答案 0 :(得分:3)
var selIndex = [];
function SaveSelectedColumns(){
selIndex = [];
$("#myTable-popup .ui-checkbox label").each(function(idx){
if ($(this).hasClass("ui-checkbox-on")){
selIndex.push(idx);
}
});
}
未绑定任何内容,因此匹配针对function LoadSavedColumns(){
$("#myTable-popup .ui-checkbox label").each(function(idx){
var vis = IsColVisible(idx);
if ($(this).hasClass("ui-checkbox-on") && !vis){
$(this).click();
}
if ($(this).hasClass("ui-checkbox-off") && vis){
$(this).click();
}
});
}
function IsColVisible(idx){
for (var i=0; i<selIndex.length; i++){
if (selIndex[i] == idx) return true;
}
return false;
}
。如果你想匹配/^h/
,你必须绑定它:
$_
将$var
与两个匹配项一起使用可能会合并到一个正则表达式中,并带有替代方法:
if ($var =~ /^[#U]/ || $var !~ /^h/) {
即。该行必须以||
,next if $var =~ /^(?: [#U] | [^h] | $ )/x;
开头,而不是#
,或者为空。
您可以使用U
:
h
另请注意,如果您的数据可以包含push
引用或转义(或换行等),则应使用Text::CSV代替push @results, $var;
。