Verkettete Liste und Datenelemente



  • Folgendes Problem!

    Ich lese aus einer Datei Informationen über Polygone aus.
    Dabei wird jede Polygon mit seiner Nummer, seiner Subnummer (falls mehrere Polygone im Polygon liegen) und der Punktanzahl in einer Liste gespeichert.

    a) Kann ich in eine andere Funktion springen und diese Datenelemente nutzen oder werden sie ungültig nach verlassen der Datei_Auslesen Funktion?
    b) Wie kann ih zusätzlich die Punkte des Polygons im Datenelement abspeichern.
    c) Wie und wann muss ich Speicher freigeben?

    Hauptteil:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #include<fstream.h>
    #include<iostream.h>
    #include<strutils.hpp>
    #include<classes.hpp>
    
    #pragma hdrstop
    
    #include "helpfunc.h"
    #include "polygon.h"
    #include "sn_generate.h"
    
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    TList*Polygone=new TList();
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::OpenFileClick(TObject *Sender)
    {
      OpenDialog1->Execute();
      Datei_Auslesen(OpenDialog1->FileName);
    }
    
    //--Auslesen der übergebenen Datei aus OpenFileClick--------------------------
    void __fastcall TForm1::Datei_Auslesen(AnsiString Dateiname)
    {
    
     int Anz_P=0; int Anz_UP; //Anzahl der Polygone,Unterpolgone
     int punkte;
     string strLine;  // Temp. Buffer
     AnsiString temp; // Temp. Ausgabestring
    
     Anzeige->Clear();
     Anzeige->Lines->Add("Folgende Datei wird ausgelesen");
     Anzeige->Lines->Add(Dateiname);
    
     ifstream streamIn(Dateiname.c_str()); // Hier wird raus gelesen
    
     //Versuche Polygone zu finden
     while(streamIn) // Solange Daten da sind...
     {
       getline(streamIn, strLine); // Lese eine Zeile aus Datei
    
       // Polygon?
       if (AnsiStartsStr("Region",strLine.c_str())==1)
       {
         //Anzahl der Unterpolygone ermitteln -- Region  X
         temp=strLine.c_str();
         Anz_UP=Extrahiere(temp,8, temp.Length());
    
         Anz_P++;
         int i=0;
    
         while (i<Anz_UP)// Unterpolygone einlesen, wobei Hauttpolygon dazuzählt
         {
          i++;
    
           getline(streamIn, strLine); // Lese Anzahl Punkte aus
    
          // Anzahl der Punkte des Polygons ermitteln
           temp=strLine.c_str();
           punkte=Extrahiere(temp,2, temp.Length());
    
          PolygonData *Data=new PolygonData();
    
          Data->nr_MainPolygon=Anz_P;
          Data->nr_SubPolygon=i;
          Data->Anz_Punkte=punkte;
          Polygone->Add(Data);
    
         for (int j=0;j<punkte;j++) getline(streamIn, strLine);
    
         }// while - Unterpolygone einlesen
    
       }//ende if Polygon?
    
      }//Ende while Polygone finden
    
        PolygonData *ReturnData;
        for (int i = 0; i < Polygone->Count; i++)
        {
         ReturnData = (PolygonData *) Polygone->Items[i];
         temp=ReturnData->nr_MainPolygon;temp+=" - ";
         temp+=ReturnData->nr_SubPolygon;temp+=" - ";
         temp+=ReturnData->Anz_Punkte;
         /*|*/ Anzeige->Lines->Add(temp);//kann raus
        }
    }//Ende Datei_Auslesen
    
    //---------------------------------------------------------------------------
    
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::BeginneBerechnungClick(TObject *Sender)
    {
     int back;
     back=Berechnung_starten();
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::ExitProgramClick(TObject *Sender)
    {
     Close();
    }
    //---------------------------------------------------------------------------
    

    Polygon.h:

    #ifndef polygonH
    #define polygonH
    //---------------------------------------------------------------------------
    class PolygonData
    {
     public:
            int nr_MainPolygon;
            int nr_SubPolygon;
            int Anz_Punkte;
    };
    #endif
    

    helpfunc.cpp:

    #include <vcl.h>
    #include<fstream.h>
    #include<iostream.h>
    #include<strutils.hpp>
    #include<classes.hpp>
    
    #pragma hdrstop
    
    #include "helpfunc.h"
    #include "polygon.h"
    
    #pragma package(smart_init)
    
    //---------------------------------------------------------------------------
    int Berechnung_starten()
    {
     return 0; // Implementierung des Algorithmus für ein Straight Skeleton
    }
    
    int Extrahiere(String tstr, int start, int end)
    {
      AnsiString temp=tstr.c_str();
      temp=MidStr(temp,start,end);
      return temp.ToInt();
    }
    

    Danke für eure Hilfe


Anmelden zum Antworten