Я использую пакет Perl WWW::Mechanize
для извлечения и обработки данных с некоторых веб-сайтов. Обычно мой способ действия заключается в следующем:Обработка текста внутри переменной перед записью в файл
Fetch веб-страницу
$mech->get("$url");
Сохранить содержимое веб-страницы в переменной (кстати, я не уверен, что это правильный путь сохранить этот объем текста внутри скаляр, который, насколько я знаю, предполагается использовать для одного значения)
my $list = $mech->content();
Используйте подпрограмму, которую я создал, чтобы записать содержимое переменной в текстовый файл. (The
writetoFile
подпрограммой включает в себя несколько функций, таких как пути и существующие валидаций файлов ..)writeToFile("$filename.tmp","$path",$list);
Обработка текста в файл, созданный в предыдущем шаге, создав дополнительный файл и сохранить его обработанный содержание там (Затем удаление начального временного файла).
Что интересно, о, есть ли возможность осуществлять обработку перед сохранением текста в файле, непосредственно внутри переменной $list
? Весь процесс работает так, как ожидалось, но мне не очень нравится логика, и это кажется немного неэффективным, так как мне приходится переписывать один и тот же файл несколько раз.
EDIT: Просто для получения дополнительной информации о том, что я на самом деле после обработки содержимого переменной. Таким образом, данные, которые я извлекаю с веб-сайта в этом случае, на самом деле представляют собой список элементов, разделенных пустой строкой, и первая строка для меня не имеет значения. Так что я делаю во время обработки этих данных составляют 2 вещи:
- Удалить пустой (CRLF) линии
- Удалите первую строку, если она включает в себя конкретный текст.
В идеале я хочу сохранить обработанный список (без пробелов и первой строки) в файле без создания каких-либо дополнительных файлов в пути. Чтобы сохранить файл, я хотел бы использовать writeToFile
sub (я написал), так как он также выполняет проверку того, существует ли такой файл (если файл будет сохранен до окончательной обработки - writeToFile
всегда будет переписывать существующий файл).
Надеюсь, что это имеет смысл.
Конечно, это так. Что именно вы не управляете? – Mat
@Mat Hi. Моя проблема, по-видимому, заключается в том, что вы читаете текст внутри переменной по строкам и выполняете каждую строку текста в соответствии с некоторыми условиями, а затем сохраняете результат где-то .. так же, как я делаю это с файлом. С файлом I я читаю каждую строку, проверяю каждую строку и записываю обработанный вывод в другой файл. Спасибо. –
Посмотрите ответы здесь: http://stackoverflow.com/questions/1445426/how-can-i-process-a-multi-line-string-one-line-at-a-time-in-perl-with -use-strict, особенно http://stackoverflow.com/a/1445732/635608 – Mat