我的脚本相当大,但我会在这里简化代码.假设我创建了一个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文档中没有清楚地解释打印,没有直接的例子,我不知道数组引用是什么.
这是使用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
.