000
10.02.2006, 10:34 Uhr
Janka
|
Also, hallo erst mal!
Ich habe die Methoden "CreateList1....6", also sechs Methoden!
Diese schreiben jeweils initial Daten in die Listen. Dann soll aus einer XML-Datei bestimmte Parameter ausgelesen werden und auch in die jeweiligen Listen geschrieben werden. Da diese XML-Datei aber sehr verschaltelt sein kann, habe ich eine weitere Methode geschrieben, die bei einer weiteren Verschachtelungstiefe als Rekursion aufgerufen wird.
Hier also mal die abgespeckte Variante:
| C++: |
void __fastcall modul::CreateList1(void) { // Deklarationsteil // ......
this->Add_FileHeader(this->LIST1,"EINS");
// Finden der Technology HeaderNode = this->XMLNode->ChildNodes->FindNode(L"HEADER"); HeaderList = HeaderNode->ChildNodes; CType = HeaderList->FindNode(L"Type")->GetText(); CType = CType.Trim();
if(CType == "LT") { this->SearchLT_1(this->PNode, ""); // PNode = Fester StartNode in Konstruktor } // festgelegt und in modul gespeichert else { if(CType == "DU") { this->SearchDU_1(this->PNode, ""); } } }
|
| C++: |
void _fastcall modul::SearchLT_1(IXMLNode *PNode, AnsiString PreviousRef) { // Deklarationsteil: // .......
// Programmteil: PList = PNode->ChildNodes; counter = PList->Count; for(i=0; i<counter; i++) { PLNode = PList->Get(i);
if (PLNode->NodeType != ntComment) { // Wenn kein Kommentar, Name behalten und weiter suchen Reference = PLNode->GetAttribute(L"reference"); if (Reference != PreviousRef) { // Sammeln aller benötigten Daten:
PLList = PLNode->ChildNodes; // Wenn weiter verschachtelt: // Daten auslesen und in Liste schreiben // ....... if ((PLList->FindNode(L"PL")) != NULL) { // Daten auslesen und in Liste schreiben this->SearchLT_1(PLList->FindNode(L"P"),Reference); } } } PreviousRef = Reference; } }
|
Und so oder ähnlich ist es für alle 6 Methoden "CreateList...". Bzw. bei einigen so wie hier gibt es eine Auswahl zw. SearchLT und SearchDU, aber die ist gleich aufgebaut, holt sich nur etwas andere Daten, bzw. verarbeitet sie anders.
Jetzt meine Frage/n: Ist das sauberes C++-Programmieren? Also das ganze in zwei verschiedene Methoden aufzuteilen. Oder wäre es besser, die zweite Methode als Funktion zu schreiben? Mir erscheint es so als ob ich es aufjeden Fall aufteilen muss, denn sonst kann ich die Rekursion ja gar nicht machen, dann würden ja immer die Initialdaten reingeschrieben, oder sollte ich diese Initialdaten in eine if-Abfrage stecken und wenn sie schon mal aufgerufen wurde, darf sie nicht mehr aufgerufen werden. (Variable in modul).
Wäre dankbar für ein paar Expertenmeinungen. Danke! Danke! Danke!
*JANKA* |