【发布时间】:2017-08-11 07:07:48
【问题描述】:
我有一组来自数据库的行,我想将它们保存到 csv 文件中。
考虑到数据是没有任何奇怪字符的 ascii 字符,以下就足够了吗?
my $csv_row = join( ', ', @$row );
# save csv_row to file
我担心的是,这是否会创建任何工具都可以接受为 CSV 的行,例如不关心引用等。
更新:
这有什么区别吗?
my $csv = Text::CSV->new ( { binary => 1, eol => "\n"} );
my $header = join (',', qw( COL_NAME1 COL_NAME2 COL_NAME3 COL_NAME4 ) );
$csv->print( $fh, [$header] );
foreach my $row ( @data ) {
$csv->print($fh, $row );
}
这给了我第一行:
" COL_NAME1,COL_NAME2,COL_NAME3,COL_NAME4"
请注意双引号,其余行没有任何引号。
与我的普通join 有什么区别?我还需要binary 设置吗?
【问题讨论】:
-
@zdim:是的,实际上我想知道如果这种方法有效,我为什么要使用模块。可能是我应该有引号或我正在取消的东西,以确保它可以被任何程序接受为 CSV
-
@zdim:你的意思是使用 JSON 而不是 CSV?关于
JSON_XS的建议我没看懂 -
呃,非常抱歉……偏离了另一个评论。这是Text::CSV。我正在删除该评论。这正是一个可靠的模块有帮助的一件事(我认为你的格式很好,但我不确定)。
-
至少,您在第一列的开头有一个额外的空间。另外,你怎么能确定永远不会有任何字符,如 " 或换行符或逗号?使用现有模块可能是更好的选择。另请注意,CSV 可能是最不标准的标准:并非所有应用程序都同意关于其格式,包括字段分隔符、行分隔符、编码、转义……如果可能,请选择另一种格式。
-
@jcaron:比如什么? JSON 使用起来很痛苦,例如在 Google 表格或 Excel 中。