首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl创建CSV文件

Perl创建CSV文件
EN

Stack Overflow用户
提问于 2012-08-20 16:11:40
回答 1查看 1.6K关注 0票数 2

我正在尝试创建一个CSV文件,该文件读取CSV文件,然后以以下格式输出数据:

代码语言:javascript
复制
Type: ABC
    A: Hello 
    B: World
    C: Test-Data, Testing
Type: ABC
    A: Hello 
    B: World
    C: Test-Data, Testing

输入的数据如下所示

代码语言:javascript
复制
0: "ABC", "Hello", "World", "Test-Data, Testing"
1: "ABC", "Hello", "World", "Test-Data, Testing"

我从阅读案文:CSV开始,然后创建了

代码语言:javascript
复制
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循环中循环。

我在这里错过了什么?我想知道是否有人能帮上忙,我已经试着把尽可能多的信息包括进去。

EN

回答 1

Stack Overflow用户

发布于 2012-08-20 16:19:28

您的错误是试图解析已经分析过的行:

代码语言:javascript
复制
while (my $row = $csv->getline ($input){    # your row is now in $row
....
if ($csv->parse($_))  # Wrong! This is already done with getline()

只需删除if/else子句中的错误代码并使用

代码语言:javascript
复制
my @columns = @$row;

你的打印声明应该能正常工作。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12041245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档