【问题标题】:Perl Creating a CSV filePerl 创建 CSV 文件
【发布时间】:2012-08-20 16:11:40
【问题描述】:

我正在尝试创建一个 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 循环中循环以读取每一行文件。

我在这里缺少什么?我想知道是否有人可以提供帮助;我已尝试包含尽可能多的信息。

【问题讨论】:

  • 您输入的数据是否正确?还是您在复制和粘贴时犯了错误?这对我来说似乎没有意义。 “干杯”从何而来?

标签: perl csv


【解决方案1】:

你的错误是试图解析已经解析的行:

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;

您的打印语句应该可以正常工作。

【讨论】:

  • 谢谢,当我删除代码时,它仍然没有打印出任何东西。
  • 那么你需要找出原因。插入调试打印语句。
猜你喜欢
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
  • 2014-12-10
  • 2020-09-07
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多