Как Вы пошли бы о парсинге Скидки с цены? [закрытый]

Существуют три листовых коллекции: Worksheets, Charts и DialogSheets. Свойство Index этих коллекций возвращает индекс коллекции Sheets, а не фактический индекс в коллекции для конкретного листа.

Скажем, у вас есть четыре листа:

  1. Рабочий лист («Лист1»)
  2. Рабочий лист («Лист2»)
  3. Диаграмма («Диаграмма1») [ 1113]
  4. Рабочий лист («Лист3»).

В этом случае Worksheets("Sheet3").Index возвращает 4, когда реальный индекс равен 3. Нижняя строка никогда не полагается на свойство Index коллекции, относящейся к листу, когда дело доходит до обработки всех листов.

Для решения вашей проблемы вам просто нужно использовать коллекцию Sheets:

Sub FFF()
    Dim x%, sheet As Variant
    For x = ActiveSheet.Index + 1 To Sheets.Count
        Set sheet = Sheets(x)
        '// Do something with sheet
    Next
End Sub
123
задан John Leidegren 8 January 2018 в 10:38
поделиться

9 ответов

Единственная реализация скидки с цены, о которой я знаю, который использует фактический синтаксический анализатор, Jon MacFarleane ’s скидка с цены штепселя . Его синтаксический анализатор основан Грамматика, разбирающая выражение парсер-генератор, названный штепсель .

<час>

РЕДАКТИРОВАНИЕ: Mauricio Fernandez недавно выпустил его Простой синтаксический анализатор Скидки с цены Разметки , который он записал как часть его механизм OcsiBlog Блога. Поскольку синтаксический анализатор записан в OCaml, это чрезвычайно просто и коротко (268 SLOC для синтаксический анализатор , 43 SLOC для эмиттер HTML ), все же ослепительно быстрый (на 20% быстрее, чем [1 112] скидка (записанный в оптимизированном рукой C) и sixhundred в 1119 раз быстрее, чем [1 113] BlueCloth ( Ruby)), несмотря на то, что он еще даже не оптимизирован для производительности. Поскольку это только предназначается для внутреннего пользования самим Mauricio для его блога, существует несколько отклонений от официальная спецификация Скидки с цены, но Mauricio создал ответвление, которое возвращается большинство тех изменений .

65
ответ дан 24 November 2019 в 01:18
поделиться

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

В основном, я создал бы mini-DOM-like дерево, когда я считал входной файл.
Для генерации вывода я просто пересек бы дерево и произвел бы HTML или что-либо еще (PS, Латекс, RTF...)

Вещи, которые могут увеличить сложность:

  • то, что можно смешать HTML и скидку с цены, хотя правило могло быть легко реализовать: просто проигнорируйте что-либо, что это между двумя сбалансированными тегами и произвело его дословно.

  • URL и примечания могут иметь свою ссылку в нижней части текста. Используя структуры данных для гиперссылок мог просто записать что-то как:

    [my text to a link][linkkey]
    results in a structure like: 
        URLStructure: 
        |  InnerText : "my text to a link"
        |  Key       : "linkkey"
        |  URL       : <null>
    
  • Заголовки могут быть определены с подчеркиванием, которое могло вынудить нас использовать простую структуру данных для универсального абзаца и изменить его свойства, поскольку мы читаем файл:

    ParagraphStructure:
    |  InnerText    : the current paragraph text 
    |                 (beginning of line until end of line).
    |  HeadingLevel : <null> or 1-4 when we can assess 
    |                 that paragraph heading level, if any.
    

Так или иначе, просто некоторые мысли.

я уверен, что существует много маленьких деталей для заботы о, и я вполне уверен, что Regexes мог стать удобным во время процесса.
, В конце концов, они были предназначены к тексту процесса.

6
ответ дан 24 November 2019 в 01:18
поделиться

Я, вероятно, считал спецификацию синтаксиса достаточно раз, чтобы знать это и получить ощущение того, как проанализировать его.

Чтение существующего кода синтаксического анализатора является, конечно, блестящим, и видеть то, что, кажется, основной источник сложности, и если какие-либо специальные умные приемы используются. Использование вычисления контрольной суммы MD5 кажется немного странным, но я не изучил код достаточно для понимания, почему это делается. Комментарий в стандартной программе, названной _EscapeSpecialChars() состояния:

Мы заменяем каждый такой символ его соответствующим значением контрольной суммы MD5; это - вероятное излишество, но оно должно препятствовать тому, чтобы мы столкнулись со значениями Escape случайно.

Замена отдельного символа полным MD5 действительно кажется экстравагантной, но возможно она действительно имеет смысл.

, Конечно, это было бы умно, чтобы полагать, что создание "истинного" синтаксиса, для инструмента такой как Flex выходит из regex трясины.

3
ответ дан 24 November 2019 в 01:18
поделиться

Если Perl не является Вашей вещью, существуют реализации Скидки с цены в по крайней мере 10 других языков . Они, вероятно, все не имеют 100%-й совместимости, но имеют тенденцию быть достаточно близкими.

2
ответ дан 24 November 2019 в 01:18
поделиться

При использовании языка программирования, который имеет больше чем трех других пользователей, необходимо быть в состоянии найти, что библиотека анализирует его для Вас. Быстрый луг Google показывает библиотеки для CL, Haskell, Python, JavaScript, Ruby, и так далее. Очень маловероятно, что необходимо будет заново изобрести это колесо.

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

0
ответ дан 24 November 2019 в 01:18
поделиться

Существуют библиотеки, доступные на многих языках, включая php, рубин, Java, c#, JavaScript. Я предложил бы смотреть на некоторые из них для идей.

Это зависит, на котором языке Вы хотите использовать для лучшего способа реализовать его, там будет идиоматично и не идиоматические способы сделать это.

Regexes работают в жемчуге, потому что жемчуг и regex являются лучшими друзьями.

0
ответ дан 24 November 2019 в 01:18
поделиться

Здесь можно найти реализацию JavaScript Скидки с цены. Это также полагается в большой степени на регулярные выражения, поскольку это - просто самый быстрый и самый легкий способ проанализировать текст.

, Но это экономит часть MD5.

я не могу помочь непосредственно с кодированием парсинга, но возможно эта ссылка может помочь Вам так или иначе.

0
ответ дан 24 November 2019 в 01:18
поделиться

Скидка с цены является JAWL (просто другой язык Wiki)

существует много Wiki с открытым исходным кодом там, что можно исследовать код синтаксического анализатора. Большая часть Выезда REGEX

использования screwturn Wiki, имеет интересный многопроходный конвейер средства форматирования, очень хорошая техника - видят/core/Formatter.cs, и/core/FormatterPipeline.cs

Лучше всего должен использовать/присоединяться существующий проект, эти виды вещей всегда намного более тверды, чем они появляются

0
ответ дан 24 November 2019 в 01:18
поделиться

На прошлой неделе я выпустил новую Java-реализацию Markdown на основе парсера под названием pegdown. pegdown использует парсер PEG для построения абстрактного синтаксического дерева, которое впоследствии записывается в HTML. Как таковой, он довольно чист и гораздо легче читается, поддерживается и расширяется, чем подход, основанный на regex. Грамматика PEG основана на реализации "peg-markdown" Джона Макфарлана на языке Си.

Возможно, вас что-то заинтересует...

17
ответ дан 24 November 2019 в 01:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: