InitDatei.cpp 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. #include "InitDatei.h"
  2. #include "Datei.h"
  3. #include "Text.h"
  4. using namespace Framework;
  5. // Inhalt der InitDatei Klasse aus InitDatei.h
  6. // Konstruktor
  7. InitDatei::InitDatei()
  8. : ReferenceCounter(),
  9. pfad(new Text()),
  10. name(new RCArray<Text>()),
  11. wert(new RCArray<Text>())
  12. {}
  13. InitDatei::InitDatei(Text* pfad)
  14. : ReferenceCounter(),
  15. pfad(new Text()),
  16. name(new RCArray<Text>()),
  17. wert(new RCArray<Text>())
  18. {
  19. setPfad(pfad);
  20. }
  21. InitDatei::InitDatei(const char* pfad)
  22. : ReferenceCounter(),
  23. pfad(new Text()),
  24. name(new RCArray<Text>()),
  25. wert(new RCArray<Text>())
  26. {
  27. setPfad(pfad);
  28. }
  29. // Destruktor
  30. InitDatei::~InitDatei()
  31. {
  32. pfad->release();
  33. name->release();
  34. wert->release();
  35. }
  36. // nicht constant
  37. void InitDatei::setPfad(Text* pfad)
  38. {
  39. this->pfad->setText(*pfad);
  40. pfad->release();
  41. }
  42. void InitDatei::setPfad(const char* pfad)
  43. {
  44. this->pfad->setText(pfad);
  45. }
  46. bool InitDatei::laden()
  47. {
  48. Datei* dat = new Datei();
  49. dat->setDatei(pfad->getText());
  50. if (!dat->open(Datei::Style::lesen))
  51. {
  52. dat->release();
  53. return 0;
  54. }
  55. removeAlle();
  56. Text* zeile = dat->leseZeile();
  57. while (zeile)
  58. {
  59. zeile->remove("\r\n");
  60. zeile->remove("\n");
  61. Text* n = zeile->getTeilText(0, zeile->positionVon('='));
  62. Text* w = zeile->getTeilText(zeile->positionVon('=') + 1);
  63. name->add(n);
  64. wert->add(w);
  65. zeile->release();
  66. zeile = dat->leseZeile();
  67. }
  68. dat->close();
  69. dat->release();
  70. return 1;
  71. }
  72. bool InitDatei::addWert(Text* name, Text* wert)
  73. {
  74. if (!wertExistiert(name->getText()))
  75. {
  76. this->name->add(new Text(name->getText()));
  77. this->wert->add(new Text(wert->getText()));
  78. name->release();
  79. wert->release();
  80. return 1;
  81. }
  82. name->release();
  83. wert->release();
  84. return 0;
  85. }
  86. bool InitDatei::addWert(const char* name, const char* wert)
  87. {
  88. return addWert(new Text(name), new Text(wert));
  89. }
  90. bool InitDatei::setWert(Text* name, Text* wert)
  91. {
  92. if (!wertExistiert(name->getText()))
  93. {
  94. name->release();
  95. wert->release();
  96. return 0;
  97. }
  98. auto n = this->name->begin();
  99. for (auto v = this->wert->begin(); v; v++, n++)
  100. {
  101. if (n->istGleich(name->getText()))
  102. {
  103. v->setText(wert->getText());
  104. name->release();
  105. wert->release();
  106. return 1;
  107. }
  108. }
  109. name->release();
  110. wert->release();
  111. return 0;
  112. }
  113. bool InitDatei::setWert(const char* name, const char* wert)
  114. {
  115. return setWert(new Text(name), new Text(wert));
  116. }
  117. bool InitDatei::setWert(int num, Text* wert)
  118. {
  119. bool result = setWert(num, wert->getText());
  120. wert->release();
  121. return result;
  122. }
  123. bool InitDatei::setWert(int num, const char* wert)
  124. {
  125. if (num >= name->getEintragAnzahl()) return 0;
  126. this->wert->z(num)->setText(wert);
  127. return 1;
  128. }
  129. bool InitDatei::removeWert(Text* name)
  130. {
  131. bool result = removeWert(name->getText());
  132. name->release();
  133. return result;
  134. }
  135. bool InitDatei::removeWert(const char* name)
  136. {
  137. if (!wertExistiert(name)) return 0;
  138. for (int i = 0; i < wert->getEintragAnzahl(); ++i)
  139. {
  140. if (this->name->z(i)->istGleich(name))
  141. {
  142. this->name->remove(i);
  143. this->wert->remove(i);
  144. return 1;
  145. }
  146. }
  147. return 0;
  148. }
  149. bool InitDatei::removeWert(int num)
  150. {
  151. if (num >= wert->getEintragAnzahl()) return 0;
  152. this->name->remove(num);
  153. this->wert->remove(num);
  154. return 1;
  155. }
  156. void InitDatei::removeAlle()
  157. {
  158. while (wert->getEintragAnzahl() > 0)
  159. {
  160. this->name->remove(0);
  161. this->wert->remove(0);
  162. }
  163. }
  164. bool InitDatei::speichern()
  165. {
  166. Datei* dat = new Datei();
  167. dat->setDatei(pfad->getText());
  168. if (!dat->existiert()) dat->erstellen();
  169. if (!dat->open(Datei::Style::schreiben))
  170. {
  171. dat->release();
  172. return 0;
  173. }
  174. auto n = name->begin();
  175. for (auto v = wert->begin(); v; v++, n++)
  176. {
  177. Text* zeile = new Text("");
  178. zeile->append(n->getText());
  179. zeile->append("=");
  180. zeile->append(v->getText());
  181. zeile->append("\n");
  182. dat->schreibe(zeile->getText(), zeile->getLength());
  183. zeile->release();
  184. }
  185. dat->close();
  186. dat->release();
  187. return 1;
  188. }
  189. // constant
  190. int InitDatei::getWertAnzahl() const
  191. {
  192. return name->getEintragAnzahl();
  193. }
  194. bool InitDatei::wertExistiert(Text* name)
  195. {
  196. bool result = wertExistiert(name->getText());
  197. name->release();
  198. return result;
  199. }
  200. bool InitDatei::wertExistiert(const char* name)
  201. {
  202. for (Text* n : *this->name)
  203. {
  204. if (n->istGleich(name)) return 1;
  205. }
  206. return 0;
  207. }
  208. int InitDatei::getWertNummer(Text* name)
  209. {
  210. int result = getWertNummer(name->getText());
  211. name->release();
  212. return result;
  213. }
  214. int InitDatei::getWertNummer(const char* name)
  215. {
  216. int i = 0;
  217. for (Text* n : *this->name)
  218. {
  219. if (n->istGleich(name)) return i;
  220. }
  221. return -1;
  222. }
  223. Text* InitDatei::getWert(Text* name)
  224. {
  225. Text* result = getWert(name->getText());
  226. name->release();
  227. return result;
  228. }
  229. Text* InitDatei::getWert(const char* name)
  230. {
  231. auto v = wert->begin();
  232. for (auto n = this->name->begin(); n; n++, v++)
  233. {
  234. if (n->istGleich(name)) return dynamic_cast<Text*>(v->getThis());
  235. }
  236. return 0;
  237. }
  238. Text* InitDatei::getWert(int num)
  239. {
  240. if (num >= name->getEintragAnzahl()) return 0;
  241. return wert->get(num);
  242. }
  243. Text* InitDatei::zWert(Text* name)
  244. {
  245. Text* result = zWert(name->getText());
  246. name->release();
  247. return result;
  248. }
  249. Text* InitDatei::zWert(const char* name)
  250. {
  251. auto v = wert->begin();
  252. for (auto n = this->name->begin(); n; n++, v++)
  253. {
  254. if (n->istGleich(name)) return v;
  255. }
  256. return 0;
  257. }
  258. Text* InitDatei::zWert(int num)
  259. {
  260. if (num >= wert->getEintragAnzahl()) return 0;
  261. return wert->z(num);
  262. }
  263. Text* InitDatei::getName(int num)
  264. {
  265. if (num >= name->getEintragAnzahl()) return 0;
  266. return name->get(num);
  267. }
  268. Text* InitDatei::zName(int num)
  269. {
  270. if (num >= name->getEintragAnzahl()) return 0;
  271. return name->z(num);
  272. }
  273. Text* InitDatei::getPfad() const
  274. {
  275. return dynamic_cast<Text*>(pfad->getThis());
  276. }
  277. Text* InitDatei::zPfad() const
  278. {
  279. return pfad;
  280. }