InitDatei.cpp 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408
  1. #include "InitDatei.h"
  2. #include "Text.h"
  3. #include "Datei.h"
  4. using namespace Framework;
  5. // Inhalt der InitDatei Klasse aus InitDatei.h
  6. // Konstruktor
  7. InitDatei::InitDatei()
  8. : pfad( new Text() ),
  9. feldAnzahl( 0 ),
  10. name( new RCArray< Text >() ),
  11. wert( new RCArray< Text >() ),
  12. ref( 1 )
  13. {
  14. }
  15. InitDatei::InitDatei( Text *pfad )
  16. : pfad( new Text() ),
  17. feldAnzahl( 0 ),
  18. name( new RCArray< Text >() ),
  19. wert( new RCArray< Text >() ),
  20. ref( 1 )
  21. {
  22. setPfad( pfad );
  23. }
  24. InitDatei::InitDatei( const char *pfad )
  25. : pfad( new Text() ),
  26. feldAnzahl( 0 ),
  27. name( new RCArray< Text >() ),
  28. wert( new RCArray< Text >() ),
  29. ref( 1 )
  30. {
  31. setPfad( pfad );
  32. }
  33. // Destruktor
  34. InitDatei::~InitDatei()
  35. {
  36. pfad->release();
  37. name->release();
  38. wert->release();
  39. }
  40. // nicht constant
  41. void InitDatei::setPfad( Text *pfad )
  42. {
  43. this->pfad->setText( pfad );
  44. }
  45. void InitDatei::setPfad( const char *pfad )
  46. {
  47. this->pfad->setText( pfad );
  48. }
  49. bool InitDatei::laden()
  50. {
  51. Datei *dat = new Datei();
  52. dat->setDatei( pfad->getText() );
  53. if( !dat->öffnen( Datei::Style::lesen ) )
  54. {
  55. dat->release();
  56. return 0;
  57. }
  58. löscheAlle();
  59. Text *zeile = dat->leseZeile();
  60. for( int i = 0; zeile; ++i )
  61. {
  62. zeile->löschen( "\r\n" );
  63. zeile->löschen( "\n" );
  64. Text *n = zeile->getTeilText( 0, zeile->positionVon( '=' ) );
  65. Text *w = zeile->getTeilText( zeile->positionVon( '=' ) + 1 );
  66. name->set( n, i );
  67. wert->set( w, i );
  68. zeile->release();
  69. zeile = dat->leseZeile();
  70. feldAnzahl = i + 1;
  71. }
  72. dat->schließen();
  73. dat->release();
  74. return 1;
  75. }
  76. bool InitDatei::addWert( Text *name, Text *wert )
  77. {
  78. if( !wertExistiert( name->getText() ) )
  79. {
  80. this->name->set( new Text( name->getText() ), feldAnzahl );
  81. this->wert->set( new Text( wert->getText() ), feldAnzahl );
  82. ++feldAnzahl;
  83. name->release();
  84. wert->release();
  85. return 1;
  86. }
  87. name->release();
  88. wert->release();
  89. return 0;
  90. }
  91. bool InitDatei::addWert( const char *name, const char *wert )
  92. {
  93. if( !wertExistiert( name ) )
  94. {
  95. this->name->set( new Text( name ), feldAnzahl );
  96. this->wert->set( new Text( wert ), feldAnzahl );
  97. ++feldAnzahl;
  98. return 1;
  99. }
  100. return 0;
  101. }
  102. bool InitDatei::setWert( Text *name, Text *wert )
  103. {
  104. if( !wertExistiert( name->getText() ) )
  105. {
  106. name->release();
  107. wert->release();
  108. return 0;
  109. }
  110. for( int i = 0; i < feldAnzahl; ++i )
  111. {
  112. if( this->name->z( i )->istGleich( name->getText() ) )
  113. {
  114. this->wert->z( i )->setText( wert->getText() );
  115. name->release();
  116. wert->release();
  117. return 1;
  118. }
  119. }
  120. name->release();
  121. wert->release();
  122. return 0;
  123. }
  124. bool InitDatei::setWert( const char *name, const char *wert )
  125. {
  126. if( !wertExistiert( name ) )
  127. return 0;
  128. for( int i = 0; i < feldAnzahl; ++i )
  129. {
  130. if( this->name->z( i )->istGleich( name ) )
  131. {
  132. this->wert->z( i )->setText( wert );
  133. return 1;
  134. }
  135. }
  136. return 0;
  137. }
  138. bool InitDatei::setWert( int num, Text *wert )
  139. {
  140. if( num >= feldAnzahl )
  141. {
  142. wert->release();
  143. return 0;
  144. }
  145. this->wert->z( num )->setText( wert->getText() );
  146. wert->release();
  147. return 1;
  148. }
  149. bool InitDatei::setWert( int num, const char *wert )
  150. {
  151. if( num >= feldAnzahl )
  152. return 0;
  153. this->wert->z( num )->setText( wert );
  154. return 1;
  155. }
  156. bool InitDatei::löscheWert( Text *name )
  157. {
  158. if( !wertExistiert( name->getText() ) )
  159. {
  160. name->release();
  161. return 0;
  162. }
  163. for( int i = 0; i < feldAnzahl; ++i )
  164. {
  165. if( this->name->z( i )->istGleich( name->getText() ) )
  166. {
  167. this->name->lösche( i );
  168. this->wert->lösche( i );
  169. --feldAnzahl;
  170. name->release();
  171. return 1;
  172. }
  173. }
  174. name->release();
  175. return 0;
  176. }
  177. bool InitDatei::löscheWert( const char *name )
  178. {
  179. if( !wertExistiert( name ) )
  180. return 0;
  181. for( int i = 0; i < feldAnzahl; ++i )
  182. {
  183. if( this->name->z( i )->istGleich( name ) )
  184. {
  185. this->name->lösche( i );
  186. this->wert->lösche( i );
  187. --feldAnzahl;
  188. return 1;
  189. }
  190. }
  191. return 0;
  192. }
  193. bool InitDatei::löscheWert( int num )
  194. {
  195. if( num >= feldAnzahl )
  196. return 0;
  197. this->name->lösche( num );
  198. this->wert->lösche( num );
  199. --feldAnzahl;
  200. return 1;
  201. }
  202. void InitDatei::löscheAlle()
  203. {
  204. for( ; feldAnzahl > 0; --feldAnzahl )
  205. {
  206. this->name->lösche( 0 );
  207. this->wert->lösche( 0 );
  208. }
  209. }
  210. bool InitDatei::speichern()
  211. {
  212. Datei *dat = new Datei();
  213. dat->setDatei( pfad->getText() );
  214. if( !dat->existiert() )
  215. dat->erstellen();
  216. if( !dat->öffnen( Datei::Style::schreiben ) )
  217. {
  218. dat->release();
  219. return 0;
  220. }
  221. for( int i = 0; i < feldAnzahl; ++i )
  222. {
  223. Text *zeile = new Text( "" );
  224. zeile->anhängen( name->z( i )->getText() );
  225. zeile->anhängen( "=" );
  226. zeile->anhängen( wert->z( i )->getText() );
  227. zeile->anhängen( "\n" );
  228. dat->schreibe( zeile->getText(), zeile->getLänge() );
  229. zeile->release();
  230. }
  231. dat->schließen();
  232. dat->release();
  233. return 1;
  234. }
  235. // constant
  236. int InitDatei::getWertAnzahl() const
  237. {
  238. return feldAnzahl;
  239. }
  240. bool InitDatei::wertExistiert( Text *name )
  241. {
  242. for( int i = 0; i < feldAnzahl; ++i )
  243. {
  244. if( this->name->z( i )->istGleich( name->getText() ) )
  245. {
  246. name->release();
  247. return 1;
  248. }
  249. }
  250. name->release();
  251. return 0;
  252. }
  253. bool InitDatei::wertExistiert( const char *name )
  254. {
  255. for( int i = 0; i < feldAnzahl; ++i )
  256. {
  257. if( this->name->z( i )->istGleich( name ) )
  258. return 1;
  259. }
  260. return 0;
  261. }
  262. int InitDatei::getWertNummer( Text *name )
  263. {
  264. for( int i = 0; i < feldAnzahl; ++i )
  265. {
  266. if( this->name->z( i )->istGleich( name->getText() ) )
  267. {
  268. name->release();
  269. return i;
  270. }
  271. }
  272. name->release();
  273. return -1;
  274. }
  275. int InitDatei::getWertNummer( const char *name )
  276. {
  277. for( int i = 0; i < feldAnzahl; ++i )
  278. {
  279. if( this->name->z( i )->istGleich( name ) )
  280. return i;
  281. }
  282. return -1;
  283. }
  284. Text *InitDatei::getWert( Text *name )
  285. {
  286. for( int i = 0; i < feldAnzahl; ++i )
  287. {
  288. if( this->name->z( i )->istGleich( name->getText() ) )
  289. {
  290. name->release();
  291. return wert->get( i );
  292. }
  293. }
  294. name->release();
  295. return 0;
  296. }
  297. Text *InitDatei::getWert( const char *name )
  298. {
  299. for( int i = 0; i < feldAnzahl; ++i )
  300. {
  301. if( this->name->z( i )->istGleich( name ) )
  302. return wert->get( i );
  303. }
  304. return 0;
  305. }
  306. Text *InitDatei::getWert( int num )
  307. {
  308. if( num >= feldAnzahl )
  309. return 0;
  310. return wert->get( num );
  311. }
  312. Text *InitDatei::zWert( Text *name )
  313. {
  314. for( int i = 0; i < feldAnzahl; ++i )
  315. {
  316. if( this->name->z( i )->istGleich( name->getText() ) )
  317. {
  318. name->release();
  319. return wert->z( i );
  320. }
  321. }
  322. name->release();
  323. return 0;
  324. }
  325. Text *InitDatei::zWert( const char *name )
  326. {
  327. for( int i = 0; i < feldAnzahl; ++i )
  328. {
  329. if( this->name->z( i )->istGleich( name ) )
  330. return wert->z( i );
  331. }
  332. return 0;
  333. }
  334. Text *InitDatei::zWert( int num )
  335. {
  336. if( num >= feldAnzahl )
  337. return 0;
  338. return wert->z( num );
  339. }
  340. Text *InitDatei::getName( int num )
  341. {
  342. if( num >= feldAnzahl )
  343. return 0;
  344. return name->get( num );
  345. }
  346. Text *InitDatei::zName( int num )
  347. {
  348. if( num >= feldAnzahl )
  349. return 0;
  350. return name->z( num );
  351. }
  352. Text *InitDatei::getPfad() const
  353. {
  354. return pfad->getThis();
  355. }
  356. Text *InitDatei::zPfad() const
  357. {
  358. return pfad;
  359. }
  360. // reference Counting
  361. InitDatei *InitDatei::getThis()
  362. {
  363. ++ref;
  364. return this;
  365. }
  366. InitDatei *InitDatei::release()
  367. {
  368. --ref;
  369. if( !ref )
  370. delete this;
  371. return 0;
  372. }