csv - 读取 CSV 文件以散列会给出不正确的结果
问题描述
我有 csv 文件包含(简化的 SQL 查询):
SQL_QRY
"insert into TTL_CCL_DB_INF.D_1244_CRB_PARTY_EXT (CD_REC_PARTY, CD_REC_OBJECT_TYPE, T_FULL_NAME, ..) select * from TTL_CCL_DB_STG.D_1244_CRB_PARTY aa1 inner join TTL_CCL_DB_STG.D_1244_CRB_COMPANYFACT bb1 on aa1.CD_REC_PARTY = bb1.CD_REC_PARTY"
我有一个 perl 脚本来将文件读入哈希:
sub somesub {
...
my $fh;
my $key;
eval { open($fh, '<', $tmp_file); };
if ($@) {
$errmsg = $@;
croak {message=>$errmsg};
};
while(my $lines = <$fh>) {
chomp $lines;
my @data = split(/|/, $lines);
$key = shift @data;
$data_rt{$key} = \@data;
};
close $fh;
unlink $tmp_file;
return %data_rt;
}
但返回的哈希看起来像:
RETURN >>>>$VAR1 = {
' => [], 'SQL_QRY
'"insert into TTL_CCL_DB_INF.D_1244_CRB_PARTY_EXT (CD_REC_PARTY, CD_REC_OBJECT_TYPE, T_FULL_NAME, CD_TAX_IDENTIFIER, CD_VAT_IDENTIFIER,DWH_TRANSFRM_ID, DWH_TRANSFRM_RUN_ID, DWH_BD, DWH_VSN_NO ) select aa1.CD_REC_PARTY, aa1.CD_REC_OBJECT_TYPE, aa1.T_FULL_NAME, bb1.CD_TAX_IDENTIFIER, bb1.CD_VAT_IDENTIFIER, $transfrmId, \'$transfrmRunId\', cast(\'$bnsDt\' as date format \'YYYYMMDD\'), $occNbr from TTL_CCL_DB_STG.D_1244_CRB_PARTY aa1 inner join TTL_CCL_DB_STG.D_1244_CRB_COMPANYFACT bb1 on aa1.C' => []ARTY = bb1.CD_REC_PARTY and cast(aa1.DWH_BD as date format \'YYYYMMDD\') = \'$10000050_dwh_bd\' and aa1.DWH_VSN_NO = $10000050_vsn_no and cast(bb1.DWH_BD as date format \'YYYYMMDD\') = \'$10000034_dwh_bd\' and bb1.DWH_VSN_NO = $10000034_vsn_no"
};
有人会帮助我如何正确地做到这一点吗?我需要让它尽可能灵活(csv文件可以包含更多的行和更多的列)
解决方案
您向我们展示的示例数据似乎与您的代码不匹配。该代码想要拆分管道符号上的数据。但数据不包含任何管道符号。所以我不确定这将如何工作。
但是,我非常有信心问题出在这条线上:
my @data = split(/|/, $lines);
第一个参数split()
是一个正则表达式。管道符号是正则表达式元字符。为了将元字符用作自身,您需要使用反斜杠对其进行转义。
my @data = split(/\|/, $lines);
推荐阅读
- linux - Lua 5.3 已安装,但我找不到正确的 lua.h
- javascript - 是否可以通过导航栏检测页面是否打开?
- sql - ORA-00928: 缺少 SELECT 关键字。请解释
- python - 用两个索引之间的数据填充 pandas 数据框列
- php - 如何为新的 API 端点添加另一个 rootUrl
- firebase - Flutter - 小部件变量始终为空
- python - 在 PyTorch 中训练 TFRobertaModel
- angular - ngFor 和 img src,结合 for 值的两个细节
- jwt - WSO2-AM 3.2.0 - OAuth 令牌 - 哈希类型
- node.js - 如何在 MongoDB 中获取最新版本的文档?