Как я могу использовать Perl, чтобы получить список элементов CSS с атрибутом цвета или цвета фона? - PullRequest
0 голосов
/ 05 июня 2009

Я задал вопрос ранее сегодня относительно , использующего Perl для поиска в документе CSS . С тех пор я немного уточнил свои требования и лучше представляю, что я пытаюсь сделать.

Документ, который я ищу, на самом деле является документом .html с CSS в качестве стиля в <head>, если это имеет смысл.

По сути, мне нужно найти все элементы CSS, имеющие атрибут color или background color, и записать их. Вот мой мыслительный процесс.

  1. открыть файл и установить его как массив
  2. читать массив построчно, пока не получится "{"
  3. превращать все в скалярную переменную или массив, пока я не доберусь до "}"
  4. поиск вторичной переменной или строки для поиска экземпляров «color» бла-бла-бла.

Проблема, с которой я столкнулся, заключается в том, чтобы найти способ просмотреть документ и превратить все, что находится между {и}, в некоторую переменную. У кого-нибудь есть идеи?

Ура!

Ответы [ 3 ]

3 голосов
/ 05 июня 2009

Несмотря ни на что, я бы не советовал писать собственный код с нуля для этого. Вы должны использовать парсер. Быстрый поиск на CPAN предлагает это семейство модулей . С другой стороны, если ваш css находится в html-файле, а не в отдельном css-файле (как вам не стыдно), вам может понадобиться другой тип парсера.

В любом случае, обычно не стоит пытаться выкрутить свой собственный квазипарсер из регулярных выражений. Используйте правильный анализатор и используйте чужую работу.

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

#!/usr/bin/env perl
use strict;
use warnings;

open my $fh, '<', 'file-of-interest'
  or die "Couldn't open 'file-of-interest': $!";

my @saved_items;

while (my $line = <$fh>) {
  # process $line
  # push @saved_items, $something
}

# Do more fun stuff with @saved_items
1 голос
/ 05 июня 2009

Я думаю, что это действительно тот же вопрос, который вы задавали ранее, хотя вы не упомянули, как в предыдущем комментарии, что не думаете, что вам разрешено использовать модули.

Модуль CSS уже делает это. Вы можете посмотреть на источник, чтобы увидеть, как они это делают. Это тот же ответ, который я дал тебе в прошлый раз.

Нет никакого магического или секретного способа, которым все прячутся от вас. В большинстве случаев, если модуль, который вы найдете на CPAN, может быть проще, это будет так. Однако без какой-либо дополнительной информации, которая ограничивает вашу проблему, можно найти общее решение, например SS] (http://search.cpan.org/dist/CSS). Изучите этот источник или просто поднимите его полностью в свой сценарий, хотя вы можете попробовать некоторые аргументы, чтобы получить некоторые модули установлены. Если вы могли бы использовать модуль, вы, возможно, уже сделали это и перейдете к следующему проекту. Это часто является убедительным аргументом.:)

1 голос
/ 05 июня 2009

Вы можете использовать модуль CSS , который доступен на CPAN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...