csv - Perl - 使用 Text::CSV 将字符串/标量值写入 CSV
问题描述
我正在尝试将连接成功/失败写入从多个数据库中提取的 CSV 文件,以便我可以验证我的 eval 是否有效,并且连接失败不会使脚本停止。有一个 CSV 文件,其中包含要使用的数据库主机名和架构,我会循环使用它。我可以毫无问题地读取文件,但是在将特定值作为一种“格式化”以显示数据和测试 DBI 连接时,我在将特定值写入文件时遇到了一些麻烦。
最初,我尝试只使用多个打印语句,但没有奏效。我尝试将字符串和标量转换为 Perl 报告的数组 ref。当我创建数组并放入数组引用时,我没有任何错误,但我只得到了引用。但我需要打印出来的文字。
我正在使用的代码在下面,并且有几行我之前尝试过的注释行,但没有奏效。如果与数据库的连接失败以及它在哪个位置,则 eval 用于写入。
我知道我做错了什么,否则它会起作用。但是,我不知道我要去哪里错了。
# Instantiate Report Data CSV
my $reportCsv = Text::CSV->new();
$reportCsv->eol ("\n");
$reportCsv->sep_char (",");
$reportCsv->quote_char ("\"");
$reportCsv->always_quote (1);
$reportCsv->escape_char ("\\");
$reportCsv->strict (1);
# Open stores.csv for processing
open my $storesFile, "<:encoding(utf8)", "stores.csv" or $logger->logdie("Failed to open stores.csv.");
open my $reportOutput, ">:encoding(utf8)", "report.csv" or $logger->logdie("Failed to generate CSV.");
# Read the file and dump to another CSV
while (<$storesFile>) {
if ($storeCsv->parse($_)) {
my @storeInfo = $storeCsv->fields();
my @successArray = [$storeInfo[0], "\n", "---------------\n", "Connected to $storeInfo[2] at $storeInfo[1].\n\n"];
my @failureArray = [$storeInfo[0], "\n", "---------------\n", "Failed to connect to store database.\n\n"];
#print "$storeInfo[0], $storeInfo[1], $storeInfo[2]\n";
eval {
my $storeConnection = DBI->connect("DBI:mysql:database=$storeInfo[2];host=$storeInfo[1];port=3306", "username", "password", { RaiseError => 1, PrintError => 1 }) or $logger->error("Failed to connect to database.");
};
if ($@) {
$reportCsv->print($reportOutput, \@failureArray);
#$reportCsv->print($reportOutput, "\n");
#$reportCsv->print($reportOutput, "---------------\n");
#$reportCsv->print($reportOutput, "Failed to connect to store database.\n\n");
}
$reportCsv->print($reportOutput, \@successArray);
#$reportCsv->print($reportOutput, "\n");
#$reportCsv->print($reportOutput, "---------------\n");
#$reportCsv->print($reportOutput, "Connected to $storeInfo[2] at $storeInfo[1].\n\n");
} else {
my $inputError = $storeCsv->error_input;
print "Failed to parse line: $inputError" or $logger->error($inputError);
}
}
解决方案
推荐阅读
- flutter - 如何在父窗口小部件的回调函数中使用 Navigator.of(context)?
- excel - Multiple criteria formula should be returning multiple matches. But is only returning the first match
- scala - 第一个 jar 创建和执行问题
- kubernetes - Pull images from local (insecure) registry on kind cluster
- r - 在 R 脚本中识别多余的 library() 的快速方法?
- reactjs - 页面刷新时如何加载选定的语言
- mybatis - 如果元素,如何添加不需要的条件子句?
- spring-boot - Spring boot + rxjava 可完成。如何在不阻塞的情况下执行它?
- reactjs - 如何使用 react 迭代 API 调用的结果?
- react-native - React Navigation Material Top Tab Navigator Tabbar背景需要随组件过渡背景颜色