if 命令未按要求执行。也许是由于非局部变量?
The if command is not performed as desire. Maybe due to non local variables?
我需要在 Perl 程序中拆分两种不同类型的记录。
每条记录都带有不同的代码(ZBKPF_W 和 ZBUS2081_W),因此它们会根据代码进行不同的处理。
信息来自解析文件名,最后我应该根据正确的解析字段获得正确的命令。
然而,Perl 中的 if 命令显然不遵守它,在一半的情况下,我得到了错误的数据。
请允许我展示过程:
需要拆分的 2 种不同类型的文档:
# get info from filename and process each file
# BO-CC-FY-DOCID-KOFAX#.PDF
# ZBKPF_W-DE10-2020-1900000001-00034113.PDF and
# ZBUS2081_W-DE10-2019-5106000000-00034114.PDF
( $fileindex, $filetype) = split( '\.', $dir[i] );
$fname = $dir[i];
$BO = "";
$CCode = "";
$FY = "";
$DocNo = "";
$KofaxNo = "";
$CCDocNoFY = "";
$CCFYDocNo = "";
# Get the index values from filename
( $BO, $CCode, $FY, $DocNo, $KofaxNo ) = split( '\-', $fileindex );
if ( $BO == "ZBKPF_W" ) {
$R3_SAP_OBJ = "ZBKPF_W";
$CCDocNoFY = $CCode.$DocNo.$FY;
$CCFYDocNo = $CCode.$FY.$DocNo;
}
else {
if ( $BO == "ZBUS2081_W" ) {
$R3_SAP_OBJ = "ZBUS2081_W";
$CCDocNoFY = $DocNo.$FY;
$CCFYDocNo = $FY.$DocNo;
}
}
所以,最后,所有记录看起来像 ZBUS2081_W
结果:
$R3_SAP_OBJ = "ZBBUS2081_W"
$CCDocNoFY = $DocNo.$FY
$CCFYDocNo = $FY.$DocNo
始终提供 if 命令的 else。
正确的结果应该是:
For ZBKPF_W-DE10-2020-1900000001-00034113.PDF
$R3_SAP_OBJ = "ZBKPF_W"
$CCDocNoFY = "DE1019000000012020"
$CCFYDocNo = "DE1020201900000001"
For ZBUS2081_W-DE10-2019-5106000000-00034114.PDF
$R3_SAP_OBJ = "ZBUS2081_W"
$CCDocNoFY = "51060000002019"
$CCFYDocNo = "20195106000000"
我尝试过使用嵌套的 IF、ELSEIF 以及在 MY 中使用局部变量
同样的结果...我通常不喜欢 Perl,所以我远不是专家,但这是 ArchiveLink 的要求,所以我需要它 运行 顺利。
拜托,如果您知道为什么可能是问题的根本原因,我将不胜感激。
==
在 Perl 中比较数字。使用 eq
比较字符串。
当使用以 Z
开头的字符串时,它被强制转换为数字 0,因此第一个条件始终为真。
有关详细信息,请参阅 perlop。
我需要在 Perl 程序中拆分两种不同类型的记录。 每条记录都带有不同的代码(ZBKPF_W 和 ZBUS2081_W),因此它们会根据代码进行不同的处理。
信息来自解析文件名,最后我应该根据正确的解析字段获得正确的命令。 然而,Perl 中的 if 命令显然不遵守它,在一半的情况下,我得到了错误的数据。
请允许我展示过程: 需要拆分的 2 种不同类型的文档:
# get info from filename and process each file
# BO-CC-FY-DOCID-KOFAX#.PDF
# ZBKPF_W-DE10-2020-1900000001-00034113.PDF and
# ZBUS2081_W-DE10-2019-5106000000-00034114.PDF
( $fileindex, $filetype) = split( '\.', $dir[i] );
$fname = $dir[i];
$BO = "";
$CCode = "";
$FY = "";
$DocNo = "";
$KofaxNo = "";
$CCDocNoFY = "";
$CCFYDocNo = "";
# Get the index values from filename
( $BO, $CCode, $FY, $DocNo, $KofaxNo ) = split( '\-', $fileindex );
if ( $BO == "ZBKPF_W" ) {
$R3_SAP_OBJ = "ZBKPF_W";
$CCDocNoFY = $CCode.$DocNo.$FY;
$CCFYDocNo = $CCode.$FY.$DocNo;
}
else {
if ( $BO == "ZBUS2081_W" ) {
$R3_SAP_OBJ = "ZBUS2081_W";
$CCDocNoFY = $DocNo.$FY;
$CCFYDocNo = $FY.$DocNo;
}
}
所以,最后,所有记录看起来像 ZBUS2081_W 结果:
$R3_SAP_OBJ = "ZBBUS2081_W"
$CCDocNoFY = $DocNo.$FY
$CCFYDocNo = $FY.$DocNo
始终提供 if 命令的 else。
正确的结果应该是:
For ZBKPF_W-DE10-2020-1900000001-00034113.PDF
$R3_SAP_OBJ = "ZBKPF_W"
$CCDocNoFY = "DE1019000000012020"
$CCFYDocNo = "DE1020201900000001"
For ZBUS2081_W-DE10-2019-5106000000-00034114.PDF
$R3_SAP_OBJ = "ZBUS2081_W"
$CCDocNoFY = "51060000002019"
$CCFYDocNo = "20195106000000"
我尝试过使用嵌套的 IF、ELSEIF 以及在 MY 中使用局部变量 同样的结果...我通常不喜欢 Perl,所以我远不是专家,但这是 ArchiveLink 的要求,所以我需要它 运行 顺利。
拜托,如果您知道为什么可能是问题的根本原因,我将不胜感激。
==
在 Perl 中比较数字。使用 eq
比较字符串。
当使用以 Z
开头的字符串时,它被强制转换为数字 0,因此第一个条件始终为真。
有关详细信息,请参阅 perlop。