我正在尝试创建一个CSV文件,该文件读取CSV文件,然后以下列格式输出数据:
Type: ABC
A: Hello
B: World
C: Test-Data, Testing
Type: ABC
A: Hello
B: World
C: Test-Data, Testing
输入数据如下所示
0: "ABC", "Hello", "World", "Test-Data, Testing"
1: "ABC", "Hello", "World", "Test-Data, Testing"
我开始阅读Text:CSV然后创建了
use strict;
use warnings;
use Text::CSV;
my $file = 'file.csv';
my $csv = Text::CSV->new ({ binary => 1, eol => $/});
open my $input, "<", $file or die "$file: $!";
while (my $row = $csv->getline ($input){
next if ($. == 1);
if ($csv->parse($_))
{
print "variable: $_";
my @columns = $csv->fields();
print "Type: $columns[0]\n\t A: $columns[1]\n\t B:$columns[2] \n\t C:$columns[3]";
}
else
{
my $error = $csv->error_diag;
print "Failed to parse line: $error";
}
}
虽然它似乎没有工作,但我认为它会在file.csv中读取到$ file然后使用 getline 在while循环中循环读取每一行文件。
我在这里缺少什么?我想知道是否有人能够提供帮助;我试图尽可能多地包含信息。
答案 0 :(得分:4)
您的错误是尝试解析已解析的行:
while (my $row = $csv->getline ($input){ # your row is now in $row
....
if ($csv->parse($_)) # Wrong! This is already done with getline()
只需删除if/else
子句中的错误代码,然后使用
my @columns = @$row;
你的打印声明应该可以正常工作。