2016-06-24 1 views
4

У меня есть очень большой файл, который мне нужно проанализировать с помощью Perl. Формат файла (который я не могу изменить) был первоначально написан, чтобы разрешить открывать файл в Excel в виде CSV. В частности, для этой проблемы мне нужно заменить разделитель в каждой строке трубкой (|). Обычно это не тяжелая работа, но у меня есть несколько вопросов (ниже), и пока у меня есть решение, мне интересно, есть ли более эффективный способ выполнить мою задачу.Замена разделителей цитат и множественных запятых в Perl

  1. Сам данных содержит комментарии с запятыми (имеется в виду, я не могу найти и заменить на запятую)
  2. Каждая «клетка» ценность данных инкапсулируется в кавычки, но если клетка была пуста, то ни кавычки не являются настоящее

Пример строки в файле:

"Foo Bar","More Foo","More Bar",,,,,"Yet More","Comma,Separated,Statement" 

Мое текущее решение выглядит как код ниже. Он работает, но кажется неэлегантным и требует обработки каждой строки несколько раз (что-то, чего я хочу избежать, поскольку этот файл очень большой).

# Change the delimiter 
$line =~ s/",,,,,"/|||||/g; 
$line =~ s/",,,,"/||||/g; 
$line =~ s/",,,"/|||/g; 
$line =~ s/",,"/||/g; 
$line =~ s/","/|/g; 

$line =~ s/^"//;  # Remove leading quotation mark 
$line =~ s/"$//;  # Remove trailing quotation mark 

Может ли кто-нибудь помочь мне найти более быстрое и элегантное решение?

+2

Я могу принять это как дубликат. По какой-то причине я не рассматривал проблему в том, что было описано в этой теме, чтобы найти ее. Очень признателен! – GrinningX

ответ

Смежные вопросы