当前位置:  开发笔记 > 编程语言 > 正文

使用Text :: CSV根据变量内容在csv文件上打印一行

如何解决《使用Text::CSV根据变量内容在csv文件上打印一行》经验,为你挑选了1个好方法。

我的脚本相当大,但我会在这里简化代码.假设我创建了一个CSV并且我像这样写了标题:

my $csv = Text::CSV->new ({binary => 1}, eol => "\n");
open(my $out, ">", "$dir/out.csv") or die $!; #create
$out->print("CodeA,CodeB,Name,Count,Pos,Orientation\n"); #I write the header

假设我得到了一些存储在不同变量中的值,我想将这些变量写成CSV中的一行.我无法弄清楚如何,因为在Text :: CSV文档中没有清楚地解释打印,没有直接的例子,我不知道数组引用是什么.



1> Jonathan Lef..:

这是使用Text :: CSV编写CSV文件的简单示例.它生成标题行和数据行,并从固定数据中生成.

#!/usr/bin/env perl
use strict;
use warnings;
use Text::CSV;

my $csv = Text::CSV->new({binary => 1, eol => $/ })
    or die "Failed to create a CSV handle: $!";

my $filename = "output.csv";

open my $fh, ">:encoding(utf8)", $filename or die "failed to create $filename: $!";

my(@heading) = ("CodeA", "CodeB", "Name", "Count", "Pos", "Orientation");
$csv->print($fh, \@heading);    # Array ref!

my(@datarow) = ("A", "B", "Abelone", 3, "(6,9)", "NW");
$csv->print($fh, \@datarow);    # Array ref!

close $fh or die "failed to close $filename: $!";

数据行收集在一个数组中 - 我使用@heading@datarow.如果我输出了几行,则可以收集或创建每一行@datarow,然后输出.第一个参数$csv->print应该是I/O句柄 - 这里$fh是输出文件的文件句柄.第二个应该是数组引用.使用\@arrayname是创建数组引用的一种方法; Text :: CSV模块的输入例程也创建并返回数组引用.

请注意Text::CSV->new调用中使用的符号与示例中使用的符号之间的区别.另请注意,您的$out->print("…");呼叫使用的是基本文件I/O,与Text :: CSV无关.对比$csv->print($fh, …).

其余代码或多或少是样板.

output.csv

CodeA,CodeB,Name,Count,Pos,Orientation
A,B,Abelone,3,"(6,9)",NW

请注意,带有逗号的值包含在Text :: CSV模块的引号中.其他值不需要引号,所以他们没有得到它们.您可以使用选项调整CSV输出格式的详细信息Text::CSV->new.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有