В Perl, как я могу правильно анализировать файлы с разделителями табуляции / пробелами в строках в кавычках? - PullRequest
4 голосов
/ 21 декабря 2010

Мне нужно проанализировать файлы с разделителями табуляции / пробелами, которые имеют много столбцов в Perl. Значения таковы, что в двойных кавычках заключены большие строки. Эти строки могут содержать любые символы, такие как символы табуляции и пробелы или что-либо еще.

Когда я пытаюсь проанализировать их с помощью функции split, она также разделяет эти строки. Теперь, как я могу заставить Perl понять, что строки внутри "" - это одна запись в столбце?

Простой пример:

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

Ответы [ 3 ]

20 голосов
/ 21 декабря 2010

Используйте библиотеку Text::CSV, которая обрабатывает все крайние случаи для вас. Позволяет установить разделитель:

my $csv = Text::CSV->new({sep_char => "\t"});
7 голосов
/ 21 декабря 2010

Обратите внимание, что вы говорите табуляция / пробел с разделителями .Если разделители смешаны и / или вы должны обрабатывать последовательные пробелы как один, использование 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;   '
3 голосов
/ 21 декабря 2010
...