2013-02-08 109 views
1

如何使用Text :: CSV_XS模块从CSV字符串读取其输入。然后我只能找到记录的信息是从文件中读取。Perl Text :: CSV_XS从字符串中读取

要做到这一点的最快方法是使用perl split函数分割CSV字符串,并从那里读取每一行,或者是否有一些内置方法使用Text :: CSV_XS直接从CSV字符串中读取?

谢谢

+2

的'parse'方法看起来像你需要:https://metacpan.org/module/Text::CSV#parse – simbabque

+0

你想用一个长的CSV字符串做什么?这对任何想要回答的人都应该有所帮助。 – slayedbylucifer

+0

可以研究'Text :: CSV_XS'的用法[here](http://search.cpan.org/~hmbrand/Text-CSV_XS-0.95/CSV_XS.pm) –

回答

1

使用parse方法;

#!/usr/bin/env perl 
# 
use strict; 
use warnings; 
use Data::Dumper; 

use Text::CSV_XS; 

my $csv = Text::CSV_XS->new(); 
if ($csv->parse('Column1,Column2,Column2')) { 
    my @columns = $csv->fields; 
    print Dumper(\@columns); 
} 
else { 
    # Failed to parse the CSV data 
} 
2

Text::CSV_XSgetline方法从一个文件句柄读,这样你就可以打开标量字符串作为流,并通过此文件句柄。

此程序演示

use strict; 
use warnings; 

use Text::CSV_XS; 

my $string = <<'END'; 
a,b,c,d 
e,f,g,h 
i,j,k,l 
m,n,o,p 
END 


my $csv = Text::CSV_XS->new; 
open my $fh, '<', \$string; 

while (my $row = $csv->getline($fh)) { 
    print join('-', @$row), "\n"; 
} 

输出

a-b-c-d 
e-f-g-h 
i-j-k-l 
m-n-o-p