У меня есть формат конфигурация, аналогичный * .sln формата, поэтому возьмите следующий пример:Как вы разбираете многоуровневые «узлы» в тексте?
DCOM Productions Configuration File, Format Version 1.0
BeginSection:Global
GlobalKeyA = AnswerOne
.: Stores the global configuration key
:: for the application. This key is used
:: to save the current state of the app.
:: as well as prevent lockups
GlobalKey3 = AnswerTwo
.: Secondary Key. See above setting
GlobalKeyC = AnswerThree
BeginSection: UpdateSystem
NestedKeyA = One
NestedKeyB = Two
NestedKeyC = { A set of multiline data
where we will show how
to write a multiline
paragraph }
NestedKeyD = System.Int32, 100
EndSection
EndSection
BeginSection:Application
InstallPath = C:\Program Files\DCOM Productions\BitFlex
EndSection
Я знаю, что мне нужен будет рекурсивная функция, вероятно, что занимает сегмент текста в качестве параметра так, например, передать ему весь раздел и рекурсивно разобрать его таким образом.
Я просто не могу понять, как это сделать. В каждом разделе потенциально может быть больше дочерних разделов. Это похоже на документ Xml. Я не прошу здесь код, а всего лишь методологию о том, как разбирать такой документ.
Я думал об использовании вкладок (указывает индекс), чтобы определить, с каким сектором я работаю, но это не получится, если документ не был правильно вставлен в закладки (отформатирован). Любые лучшие мысли?
Да, Бегин и EndSection являются в основном начинают Планые узлы, но как бы я различать между которыми EndSection принадлежит к которому BeginSection? Я не мог просто захватить первый, потому что это может быть EndSection вложенного узла, а не первый, который анализируется. –
Напишите парсер, который анализирует один BeginSection, и если он встречает BeginSection внутри BeginSection, вызывает себя с началом нового подраздела. Передача результата в виде хеш-ссылки, которая может быть добавлена к хэшу в вызывающей функции. – Sorantis
Хорошо, спасибо за понимание. Кажется, я знаю, как это сделать сейчас, и я полагаю, что я отправлю сообщение, если у меня появятся какие-то другие вопросы. Благодаря! –