2016-10-28 5 views
1

Создание perl scritps для автоматической загрузки CSV с различных сайтов для биллинга, но у меня возникают проблемы с получением данных из $ mech-> content() во что-то, что я могу проанализировать по строкам по какой-либо причине , Содержание представляет собой многострочный CSV файл,Линейный анализ Perl Материал для механизации

#!/usr/bin/perl 
use WWW::Mechanize; 
use IO::Socket::SSL qw(); 

my $mech = WWW::Mechanize->new(); 
...stuff... 
my $data=$mech->content(); 
my (@lines)=split(/\n?\r/,$data); 
print "lines="[email protected]"\n---\[email protected]\n---\n"; 
write_file("tmp.csv",$data); 

for(my $i=0;$i<@lines;$i++){ 
    ...work that's done that depends on each 
    line being represented as an element of 
    an array... 
} 

Первоначально я присвоил $ mech-> содержание() непосредственно в @ строку, попробовал несколько других вещей, как $ mech-> содержание (сырье => 1), а вы видите выше, я попытался расщепить его с помощью \ n или \ r. Браузер показывает файл csv как текстовый/обычный, режим Quirks, UTF-8 Запуск файла tmp.csv показывает его текст ASCII и является многострочным.

Что я делаю неправильно, и что это за правильный способ сделать это?

ответ

1

Проблема здесь:

my (@lines)=split(/\n?\r/,$data); 

У вас есть символ новой строки регулярное выражение в обратном направлении. Это \r?\n, но безопаснее писать \015?\012 для буквенных символов, потому что \r и \n могут быть разными в некоторых системах.

Ваш цикл может быть лучше записать в виде:

for my $line (@lines) { 

Однако, как правило, не хотят, чтобы обрабатывать файлы целиком в виде массива. То, что вы делаете, может использовать огромное количество памяти. Вместо этого лучше сначала сохранить его на диск и прочитать файл CSV за строкой.

use autodie; 

$mech->get($uri, ':content_file' => "test.csv"); 

open my $fh, "test.csv"; 
while(my $line = <$fh>) { 
    ... 
} 

Но не делайте свой собственный анализ CSV. Это намного быстрее и менее багги для использования Text::CSV_XS.

+0

Спасибо, теперь я чувствую себя глупо. Они не должны увеличиваться и использовать Net :: Google :: Таблицы :: Таблицу для большего файла. Желание избежать ненужных записей в «Малину Пи SD». Анализ разворачивается и удаляет дубликаты. Еще раз спасибо! – Goof

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