2010-12-21 15 views
4

我需要解析在Perl中有很多列的製表符/空格分隔文件。值是這樣的,即在雙引號內包含大字符串。這些字符串可以有任何字符,如製表符和空格或其他任何字符。在Perl中,如何正確解析帶引號字符串的製表符/空格分隔文件?

當我嘗試使用split函數解析它們時,它也將這些字符串分開。現在我該如何讓perl明白「」中的字符串是單列條目?

一個簡單的例子是,

12 345546.67677 "Hello World!!!" -567.55656 0.5465767 "Hello_Again; " 

回答

20

使用Text::CSV庫,它處理所有的邊緣情況爲您服務。它可以讓你設置分隔符:

my $csv = Text::CSV->new({sep_char => "\t"}); 
7

請注意,你說製表符/空格分隔。如果分隔符是混合和/或你必須把連續的空格爲一體,採用Text::ParseWords可能會更容易:

#!/usr/bin/perl 

use Text::ParseWords qw(quotewords); 
use YAML; 

while (my $line = <DATA>) { 
    print Dump [ quotewords('\s+', 0, $line) ]; 
} 

__DATA__ 
12 345546.67677 "Hello World!!!" -567.55656 0.5465767 "Hello_Again; " 

輸出:

--- 
- 12 
- 345546.67677 
- Hello World!!! 
- -567.55656 
- 0.5465767 
- 'Hello_Again; '
相關問題