{"id":204,"date":"2012-10-30T11:29:26","date_gmt":"2012-10-30T09:29:26","guid":{"rendered":"http:\/\/webowiec.net\/blog\/?p=204"},"modified":"2012-10-30T11:30:58","modified_gmt":"2012-10-30T09:30:58","slug":"c-config-file-wczytywanie-zmiennych-z-pliku-tekstowego","status":"publish","type":"post","link":"https:\/\/webowiec.net\/blog\/c-config-file-wczytywanie-zmiennych-z-pliku-tekstowego\/","title":{"rendered":"[c++] config file &#8211; wczytywanie zmiennych z pliku tekstowego"},"content":{"rendered":"<p>Problem: <strong>jak wczyta\u0107 zmienne do c++ znajduj\u0105ce si\u0119 w pliku tekstowym a nast\u0119pnie u\u017cywa\u0107 ich w programie?<\/strong><\/p>\n<p>Rozwi\u0105zanie:<strong> utworzy\u0107 klas\u0119, kt\u00f3ra wczyta plik tekstowy, przydzieli ka\u017cd\u0105 przetworzon\u0105 wcze\u015bniej lini\u0119 do dynamicznej tablicy, kt\u00f3rej kluczem b\u0119dzie nazwa zmiennej.<\/strong><\/p>\n<p>Wykorzystanie:<br \/>\nzawarto\u015b\u0107 pliku &#8220;<strong>plik_konfiguracyjny.txt<\/strong>&#8221;<br \/>\n[html]opcja1 wartosc1<br \/>\nopcja2 wartosc2[\/html]<br \/>\n<!--more--><br \/>\ndeklaracja klasy:<br \/>\n[php]<br \/>\nusing namespace std;<br \/>\n#include <string><br \/>\n#include &#8220;config.php&#8221;<br \/>\n[\/php]<\/p>\n<p>inicjacja klasy:<br \/>\n[php]config *opcje;opcje=new config(&#8220;plik_konfiguracyjny.txt&#8221;);<br \/>\n\/\/ lub<br \/>\nconfig opcje(&#8220;plik_konfiguracyjny.txt&#8221;);[\/php]<\/p>\n<p>odwo\u0142anie do konkretnej zmiennej:<br \/>\n[php]opcje->v(&#8220;opcja1&#8221;);<br \/>\n\/\/ lub<br \/>\nopcje[&#8220;opcja1&#8221;];[\/php]<\/p>\n<h2>Kod klasy config.cpp<\/h2>\n<p>[php]<br \/>\nclass config {<br \/>\npublic:<br \/>\n\tstruct rec {<br \/>\n\t\tpublic:<br \/>\n\t\t\tstring name;<br \/>\n\t\t\tstring v;<br \/>\n\t};<\/p>\n<p>\tstring operator[] (const string);<\/p>\n<p>private:<br \/>\n\tstring cfg_src;<br \/>\n\trec *conf;<br \/>\n\tunsigned int conf_ile;<\/p>\n<p>public:<br \/>\n\tconfig(string);<br \/>\n\t~config();<br \/>\n\tstring v(string\t);<br \/>\n\tvoid add_tmp_config(string, string);<br \/>\n};<\/p>\n<p>config::config(string _src=&#8221;config.txt&#8221;){ \/\/constructor<br \/>\n\t\tthis->cfg_src = _src;<br \/>\n\t\tfstream cfg_file;<br \/>\n\t\tstring _opcja,_val;<\/p>\n<p>\t\t\t\/*\tczy mozna otworzyc plik\t*\/<br \/>\n\t\tcfg_file.open(this->cfg_src.c_str(), std::ios::in);<br \/>\n        if ( ! cfg_file.is_open() ) return;<br \/>\n        if(cfg_file.bad() || !cfg_file.good() ) return;<\/p>\n<p>\t\t\t\/*\tile linijek\t*\/<br \/>\n        int licznik=0;<br \/>\n\t\tstring dane;  \/\/smieci<br \/>\n             while (!cfg_file.eof()) {<br \/>\n                 ++licznik;<br \/>\n                 getline(cfg_file,dane);<br \/>\n             } &#8211;licznik;<br \/>\n         cfg_file.close();<br \/>\n\t\t\t\/*\tzapisz wszystkie linie do tablicy\t*\/<br \/>\n\t\tif (licznik>0)<br \/>\n\t\t\tthis->conf = new rec[licznik];<br \/>\n\t\tthis->conf_ile = licznik;<\/p>\n<p>\tif (licznik>0) {\t \/\/ sa rekordy<br \/>\n\t\tcfg_file.open(this->cfg_src.c_str(), std::ios::in);<\/p>\n<p>\t\tfor (unsigned int i=0;i<this->conf_ile;i++) {\/\/foreach file<br \/>\n\t\t\tif (cfg_file.eof()) return;<br \/>\n\t\t\t\tcfg_file >> _opcja; <\/p>\n<p>\t\t\t\/\/ _val moze byc puste &#8211; nie raportuj o koncu pliku<br \/>\n\t\t\tcfg_file >> _val;<\/p>\n<p>\t\t\tthis->conf[i].name = _opcja;<br \/>\n\t\t\tthis->conf[i].v = _val;<br \/>\n\t\t} \/\/foreach file<br \/>\n\t} \/\/ sa rekordy<br \/>\n} \/\/constructor<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>string config::operator[] (const string _key) {<br \/>\n\treturn this->v(_key);<br \/>\n}<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>void config::add_tmp_config(string _key, string _v){<br \/>\n\tif (_key.length()==0) return;<br \/>\n\tif (_v.length()==0) return;<\/p>\n<p>\trec *tmp_conf;<br \/>\n\ttmp_conf = new rec[(this->conf_ile+1)];<\/p>\n<p>\tfor (unsigned int i=0;i<this->conf_ile;i++) {\/\/foreach file<br \/>\n\t\t\ttmp_conf[i].name = this->conf[i].name;<br \/>\n\t\t\ttmp_conf[i].v = this->conf[i].v;<br \/>\n\t\t} \/\/foreach file<\/p>\n<p>\ttmp_conf[this->conf_ile].name = _key;<br \/>\n\ttmp_conf[this->conf_ile].v = _v;<\/p>\n<p>\tdelete[] this->conf;<\/p>\n<p>\tthis->conf = tmp_conf;<br \/>\n\t++this->conf_ile;<br \/>\n}<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>string config::v(string _key) {<br \/>\n\tfor (unsigned int i=0;i<this->conf_ile;i++) { \/\/foreach file<br \/>\n\t\tif (this->conf[i].name == _key) {<br \/>\n\t\t\treturn this->conf[i].v;<br \/>\n\t\t}<br \/>\n\t} \/\/foreach file<br \/>\n\treturn &#8220;&#8221;;<br \/>\n}<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>config::~config(){<br \/>\n\tdelete[] this->conf;<br \/>\n}<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n[\/php]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Problem: jak wczyta\u0107 zmienne do c++ znajduj\u0105ce si\u0119 w pliku tekstowym a nast\u0119pnie u\u017cywa\u0107 ich w programie? Rozwi\u0105zanie: utworzy\u0107 klas\u0119, kt\u00f3ra wczyta plik tekstowy, przydzieli ka\u017cd\u0105 przetworzon\u0105 wcze\u015bniej lini\u0119 do dynamicznej tablicy, kt\u00f3rej kluczem b\u0119dzie nazwa zmiennej. Wykorzystanie: zawarto\u015b\u0107 pliku &hellip; <a href=\"https:\/\/webowiec.net\/blog\/c-config-file-wczytywanie-zmiennych-z-pliku-tekstowego\/\" class=\"btn btn-sm btn-primary\"><i class=\"glyphicon glyphicon-link\"><\/i> Czytaj ca\u0142o\u015b\u0107<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[420,4,5,3,421,24,6],"tags":[692,433,429,426,425,422,430,432,436,435,428,15,11,16,431,427,434,17,693,423,55,56,10,53,424,9,8,7],"class_list":["post-204","post","type-post","status-publish","format-standard","hentry","category-c","category-how-to","category-poradniki","category-porady-dla-webmasterow","category-programowanie","category-technologieinformatyka","category-tourtale","tag-c","tag-c-configopcja","tag-c-obsluga-plikow-tekstowych","tag-c-plik-konfiguracyjny","tag-config-file-cpp","tag-cpp","tag-cpp-jak-wczytac-opcje-z-zewnatrz","tag-cpp-operator-tablicy-wykorzystanie","tag-cpp-php-operator","tag-cpp-tabela-jak-w-php","tag-cpp-wczytywanie-ustawien-z-pliku","tag-jak-zalorzyc-bloga","tag-jak-zrobic-strone-www","tag-jak-zrobic-swoja-strone-www","tag-kurs-cpp-pliki","tag-obsluga-plikow-cpp","tag-php-cpp-plik-konfiguracyjny","tag-porady-dla-webmasterow-2","tag-programowanie","tag-programowanie-w-cpp","tag-robienie-www","tag-strona-internetowa","tag-strony-internetowe","tag-strony-www","tag-tuortal-cpp","tag-tworzenie-stron-www","tag-webmaster","tag-webowiec"],"_links":{"self":[{"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/posts\/204","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/comments?post=204"}],"version-history":[{"count":8,"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/posts\/204\/revisions"}],"predecessor-version":[{"id":240,"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/posts\/204\/revisions\/240"}],"wp:attachment":[{"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/media?parent=204"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/categories?post=204"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/tags?post=204"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}