#include "InitDatei.h" #include "Text.h" #include "Datei.h" using namespace Framework; // Inhalt der InitDatei Klasse aus InitDatei.h // Konstruktor InitDatei::InitDatei() : ReferenceCounter(), pfad( new Text() ), feldAnzahl( 0 ), name( new RCArray< Text >() ), wert( new RCArray< Text >() ) {} InitDatei::InitDatei( Text *pfad ) : ReferenceCounter(), pfad( new Text() ), feldAnzahl( 0 ), name( new RCArray< Text >() ), wert( new RCArray< Text >() ) { setPfad( pfad ); } InitDatei::InitDatei( const char *pfad ) : ReferenceCounter(), pfad( new Text() ), feldAnzahl( 0 ), name( new RCArray< Text >() ), wert( new RCArray< Text >() ) { setPfad( pfad ); } // Destruktor InitDatei::~InitDatei() { pfad->release(); name->release(); wert->release(); } // nicht constant void InitDatei::setPfad( Text *pfad ) { this->pfad->setText( pfad ); } void InitDatei::setPfad( const char *pfad ) { this->pfad->setText( pfad ); } bool InitDatei::laden() { Datei *dat = new Datei(); dat->setDatei( pfad->getText() ); if( !dat->open( Datei::Style::lesen ) ) { dat->release(); return 0; } removeAlle(); Text *zeile = dat->leseZeile(); for( int i = 0; zeile; ++i ) { zeile->remove( "\r\n" ); zeile->remove( "\n" ); Text *n = zeile->getTeilText( 0, zeile->positionVon( '=' ) ); Text *w = zeile->getTeilText( zeile->positionVon( '=' ) + 1 ); name->set( n, i ); wert->set( w, i ); zeile->release(); zeile = dat->leseZeile(); feldAnzahl = i + 1; } dat->close(); dat->release(); return 1; } bool InitDatei::addWert( Text *name, Text *wert ) { if( !wertExistiert( name->getText() ) ) { this->name->set( new Text( name->getText() ), feldAnzahl ); this->wert->set( new Text( wert->getText() ), feldAnzahl ); ++feldAnzahl; name->release(); wert->release(); return 1; } name->release(); wert->release(); return 0; } bool InitDatei::addWert( const char *name, const char *wert ) { if( !wertExistiert( name ) ) { this->name->set( new Text( name ), feldAnzahl ); this->wert->set( new Text( wert ), feldAnzahl ); ++feldAnzahl; return 1; } return 0; } bool InitDatei::setWert( Text *name, Text *wert ) { if( !wertExistiert( name->getText() ) ) { name->release(); wert->release(); return 0; } for( int i = 0; i < feldAnzahl; ++i ) { if( this->name->z( i )->istGleich( name->getText() ) ) { this->wert->z( i )->setText( wert->getText() ); name->release(); wert->release(); return 1; } } name->release(); wert->release(); return 0; } bool InitDatei::setWert( const char *name, const char *wert ) { if( !wertExistiert( name ) ) return 0; for( int i = 0; i < feldAnzahl; ++i ) { if( this->name->z( i )->istGleich( name ) ) { this->wert->z( i )->setText( wert ); return 1; } } return 0; } bool InitDatei::setWert( int num, Text *wert ) { if( num >= feldAnzahl ) { wert->release(); return 0; } this->wert->z( num )->setText( wert->getText() ); wert->release(); return 1; } bool InitDatei::setWert( int num, const char *wert ) { if( num >= feldAnzahl ) return 0; this->wert->z( num )->setText( wert ); return 1; } bool InitDatei::removeWert( Text *name ) { if( !wertExistiert( name->getText() ) ) { name->release(); return 0; } for( int i = 0; i < feldAnzahl; ++i ) { if( this->name->z( i )->istGleich( name->getText() ) ) { this->name->remove( i ); this->wert->remove( i ); --feldAnzahl; name->release(); return 1; } } name->release(); return 0; } bool InitDatei::removeWert( const char *name ) { if( !wertExistiert( name ) ) return 0; for( int i = 0; i < feldAnzahl; ++i ) { if( this->name->z( i )->istGleich( name ) ) { this->name->remove( i ); this->wert->remove( i ); --feldAnzahl; return 1; } } return 0; } bool InitDatei::removeWert( int num ) { if( num >= feldAnzahl ) return 0; this->name->remove( num ); this->wert->remove( num ); --feldAnzahl; return 1; } void InitDatei::removeAlle() { for( ; feldAnzahl > 0; --feldAnzahl ) { this->name->remove( 0 ); this->wert->remove( 0 ); } } bool InitDatei::speichern() { Datei *dat = new Datei(); dat->setDatei( pfad->getText() ); if( !dat->existiert() ) dat->erstellen(); if( !dat->open( Datei::Style::schreiben ) ) { dat->release(); return 0; } for( int i = 0; i < feldAnzahl; ++i ) { Text *zeile = new Text( "" ); zeile->append( name->z( i )->getText() ); zeile->append( "=" ); zeile->append( wert->z( i )->getText() ); zeile->append( "\n" ); dat->schreibe( zeile->getText(), zeile->getLength() ); zeile->release(); } dat->close(); dat->release(); return 1; } // constant int InitDatei::getWertAnzahl() const { return feldAnzahl; } bool InitDatei::wertExistiert( Text *name ) { for( int i = 0; i < feldAnzahl; ++i ) { if( this->name->z( i )->istGleich( name->getText() ) ) { name->release(); return 1; } } name->release(); return 0; } bool InitDatei::wertExistiert( const char *name ) { for( int i = 0; i < feldAnzahl; ++i ) { if( this->name->z( i )->istGleich( name ) ) return 1; } return 0; } int InitDatei::getWertNummer( Text *name ) { for( int i = 0; i < feldAnzahl; ++i ) { if( this->name->z( i )->istGleich( name->getText() ) ) { name->release(); return i; } } name->release(); return -1; } int InitDatei::getWertNummer( const char *name ) { for( int i = 0; i < feldAnzahl; ++i ) { if( this->name->z( i )->istGleich( name ) ) return i; } return -1; } Text *InitDatei::getWert( Text *name ) { for( int i = 0; i < feldAnzahl; ++i ) { if( this->name->z( i )->istGleich( name->getText() ) ) { name->release(); return wert->get( i ); } } name->release(); return 0; } Text *InitDatei::getWert( const char *name ) { for( int i = 0; i < feldAnzahl; ++i ) { if( this->name->z( i )->istGleich( name ) ) return wert->get( i ); } return 0; } Text *InitDatei::getWert( int num ) { if( num >= feldAnzahl ) return 0; return wert->get( num ); } Text *InitDatei::zWert( Text *name ) { for( int i = 0; i < feldAnzahl; ++i ) { if( this->name->z( i )->istGleich( name->getText() ) ) { name->release(); return wert->z( i ); } } name->release(); return 0; } Text *InitDatei::zWert( const char *name ) { for( int i = 0; i < feldAnzahl; ++i ) { if( this->name->z( i )->istGleich( name ) ) return wert->z( i ); } return 0; } Text *InitDatei::zWert( int num ) { if( num >= feldAnzahl ) return 0; return wert->z( num ); } Text *InitDatei::getName( int num ) { if( num >= feldAnzahl ) return 0; return name->get( num ); } Text *InitDatei::zName( int num ) { if( num >= feldAnzahl ) return 0; return name->z( num ); } Text *InitDatei::getPfad() const { return (Text *)pfad->getThis(); } Text *InitDatei::zPfad() const { return pfad; }