B
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