2013-02-08 145 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