Ich habe eine Konfiguration ähnliches Format wie * SLN-Format, so nehme die folgenden als Beispiel:Wie parsen Sie mehrstufige "Knoten" im Text?
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
Ich weiß, dass ich wahrscheinlich eine rekursive Funktion benötigt, dass ein Segment Text als Parameter so, übergeben Sie beispielsweise einen ganzen Abschnitt und rekursiv so.
Ich kann einfach nicht meinen Kopf herum, wie man das macht. Jeder Abschnitt kann potenziell mehr untergeordnete Abschnitte enthalten. Es ist wie ein Xml-Dokument. Ich frage hier nicht wirklich nach Code, sondern nur nach einer Methode, wie man ein Dokument so parsen kann.
Ich habe über die Verwendung der Registerkarten nachgedacht (spezifiziert den Index), um festzustellen, mit welchem Abschnitt ich arbeite, aber das würde fehlschlagen, wenn das Dokument nicht richtig formatiert war. Irgendwelche besseren Gedanken?
Ja, sind die Begin und EndSection ist im Grunde Endanschlag Knoten starten, aber wie würde ich unterscheiden zwischen denen EndSection zu dem BeginSection gehört? Ich konnte nicht einfach den ersten greifen, weil es der EndSection eines verschachtelten Knotens sein könnte und nicht der erste, der geparst wird. –
Schreiben Sie einen Parser, der eine BeginSection analysiert, und wenn er eine BeginSection innerhalb der BeginSection findet, ruft er sich mit dem Beginn des neuen Unterabschnitts auf. Weitergabe des Ergebnisses als Hash-Ref, das zum Hash in der aufrufenden Funktion – Sorantis
hinzugefügt werden kann Okay, danke für die Einsicht. Ich denke, ich weiß jetzt, wie ich das anstellen soll, und ich nehme an, ich werde zurückschreiben, wenn ich noch andere Fragen habe. Vielen Dank! –