dragi Geschrieben 27. März 2006 Teilen Geschrieben 27. März 2006 Hallo, ich benötige dringend eure Hilfe! Ich muß eine bestimmte Art von Dokumenten parsen in denen Objekte beschreiben sind. Nun benötige ich einen Tip wie ich das algorithmisch am besten umsetzen kann. Folgendes kommt in dem Dokument vor: Einfaches Objekt: object NAME: TYP Wert1 = 1 Wert2 = 2 ... end kompliziertes Objekt: objekt NAME: TYP objekt NAME: TYP Wert1 = 1 Wert2 = 2 ... end objekt NAME: TYP Wert1 = 1 Wert2 = 2 ... end end Ich habe nun Klassen die ein Objekt und dessen unterobjekt repäsentieren aber wie soll ich das Dokument am besten durchgehen? Das Dokument gehe ich Zeile für Zeile durch bis ich einen Match auf object NAME: TYP habe. Nun weiß ich nicht wie ich weiter machen soll um die Unterobjekte, falls es welche gibt, zu bekommen. Und zu wissen wann ein Objekt mit unterobjekten zu ende ist. Zwischen den Objekten ist immer eine Leerzeile und ich denke das hilft mir. Aber ein Objekt kann aus N Unterobjekten bestehen...das ist mir echt zu hoch. Habt ihr einen Tip für einen Algo? Danke Dragi Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 27. März 2006 Teilen Geschrieben 27. März 2006 Wie wäre es mit einem Stapel? Immer, wenn du eine object-Zeile findest, legst du ein neues Datenobjekt auf den Stapel. Bei den wert-Zeilen bearbeitest du das oberste Datenobjekt. Bei end-Zeilen nimmst du das oberste Objekt vom Stapel weg (und speicherst es, z.B. als Kindobjekt im nächstunteren Datenobjekt). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dragi Geschrieben 27. März 2006 Autor Teilen Geschrieben 27. März 2006 Ich glaube ich kann dir einigermassen folgen, habe aber folgendes Problem: Ich beginne mit einer for-Schleife. Von 0 bis Dokument Ende gehe ich die Zeilen durch. Nun finde ich das erste object NAME: TYP und arbeite mich ja dann in anderen funktionen durch das Objekt. Gehe ich nun zurück zu meiner Vorschleife geht die einen Schritt weiter und findet das objekt NAME: TYP des Unterobjektes das ich doch aber schon abgelegt habe. Das ist für mich total verwirrend. Hier mal mein angefangener Code: C# using System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; using System.IO; using System.Windows.Forms; namespace ParsIni { class parseStructFct { public List<StFctObject> parseSTFct(string StFctPath) { List<StFctObject> StFctObjList = new List<StFctObject>(); string[] sa = File.ReadAllLines(StFctPath); Regex reg = new Regex(@"object\s+(?<name>[A-Za-z0-9 _ - # *]+)\s*:\s*(?<type>\w+)"); for (int i = 0; i < sa.Length; i++) { if (reg.Match(sa[i]).Success) { StFctObject TempStFctObj = new StFctObject(); TempStFctObj.SetObjName(reg.Match(sa[i]).Groups["name"].ToString()); TempStFctObj.SetObjType(reg.Match(sa[i]).Groups["type"].ToString()); if (sa[i] + 1 != "") // ???? keine Ahnung wie es weiter geht { } } } return StFctObjList; } } } Vielleicht denke ich einfach total verkehrt. Ist mien erster Parser und ich bin der einzige hier der programmiert, von daher steh ich hier allein auf weiter Flur... Gruß dragi Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 27. März 2006 Teilen Geschrieben 27. März 2006 Mit einer einfachen Schleife kannst du das nicht lösen, weil die Objekte eben nicht seriell abgelegt sind. Du brauchst irgendeine Lösung, die die hierarchische Struktur der Daten abbilden kann, entweder eine Rekursion oder den oben beschriebenen Stack. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dragi Geschrieben 27. März 2006 Autor Teilen Geschrieben 27. März 2006 Ich verstehe was du meinst, hab von Rekursion nciht viel Ahnung. Hast du oder jemand hier einen kleinen Ansatz zur Rekursion für mich? Also Pseudocode reicht da völlig. Vielen Dank Dragi Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 27. März 2006 Teilen Geschrieben 27. März 2006 Mach eine Funktion, die ein Objekt in eine lokale Variable einliest. Wenn diese Funktion auf eine object-Zeile trifft, ruft sie sich selbst auf, und fügt den Rückgabewert der Kind-Liste des Objekts hinzu. Am Ende der Funktion gibst du das lokale Objekt an den Aufrufer zurück. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.