--Smigol-- Temat założony przez niniejszego użytkownika |
[C++] Wczytywanie konfiguracji z pliku » 2014-01-28 15:33:38 Witam. Postanowiłem że napiszę sobie małą funkcję przyjmującą ścieżkę do bliku i nazwę opcji, a w rezultacie podającą wartość opcji. Kod wygląda tak: #include <iostream> #include <string> #include <cstdlib> #include <fstream> #include <algorithm>
std::string iniRead( std::string config_path, std::string option_name ) { std::fstream file; std::string line; std::string name; std::string option_value; int posEqual; file.open( config_path.c_str(), std::ios::in ); if( file.good() == true ) { std::cout << "Config loaded from " << config_path << std::endl; while( std::getline( file, line ) ) { if( !line.length() ) continue; if( line[ 0 ] == '#' ) continue; posEqual = line.find( '=' ); name = line.substr( 0, posEqual ); option_value = line.substr( posEqual + 1 ); if( name.compare( option_name ) ) { return option_value; } else { return 0; } } } else { std::cout << "Error reading the config file. Check path and permissions." << std::endl; return 0; } }
int main() { std::cout << iniRead( "C:\\Users\\Igor\\Desktop\\ts3server.conf", "ts3_start" ); return 0; }
a plik ts3server.conf tak: # Comment ts3_start = start ts3_stop = stop
Jestem początkującym jeśli chodzi o C++ i nie mogę znaleźć błędu który powoduje nie działanie programu, proszę o pomoc. Pozdrawiam, Smigol. |
|
Monika90 |
» 2014-01-28 15:44:25 Co rozumiesz przez "niedziałanie"? Zmeń return 0; na return ""; , albo return "not-found"; |
|
--Smigol-- Temat założony przez niniejszego użytkownika |
» 2014-01-28 15:55:03 Kod wygląda na tę chwilę następująco (zmienione returny): #include <iostream> #include <string> #include <cstdlib> #include <fstream> #include <algorithm>
std::string iniRead( std::string config_path, std::string option_name ) { std::fstream file; std::string line; std::string name; std::string option_value; int posEqual; file.open( config_path.c_str(), std::ios::in ); if( file.good() == true ) { std::cout << "Config loaded from " << config_path << std::endl; while( std::getline( file, line ) ) { if( !line.length() ) continue; if( line[ 0 ] == '#' ) continue; posEqual = line.find( '=' ); name = line.substr( 0, posEqual ); option_value = line.substr( posEqual + 1 ); if( name.compare( option_name ) ) { return option_value; } else { return "not-found"; } } } else { std::cout << "Error reading the config file. Check path and permissions." << std::endl; return "not-found"; } }
int main() { std::cout << iniRead( "C:\\Users\\Igor\\Desktop\\ts3server.conf", "ts3_start" ); return 0; }
Nie działa, czyli pomimo podania jak wyżej w konsoli pokazuje: Config loaded from C:\Users\Igor\Desktop\ts3server.conf not-found Process returned 0 (0x0) execution time : 0.017 s Press any key to continue.
A powinno wyświetlić "start" zamiast "not-found", jako że plik ts3server.conf wygląda następująco: # Comment ts3_start=start ts3_stop=stop
Pozdrawiam. |
|
alixir |
» 2014-01-28 16:01:36 Obstawiam złą nazwę pliku. Czy jesteś pewny że plik zwie się ts3server.conf a nie ts3server.conf.txt |
|
--Smigol-- Temat założony przez niniejszego użytkownika |
» 2014-01-28 16:06:23 Czytałeś w ogóle kod? Zauważ że wiadomość "Config loaded from C:\Users\Igor\Desktop\ts3server.conf" pokazuje się tylko jeśli plik został poprawnie otwarty, inaczej pokaże błąd, więc plik musi się poprawnie otwierać.
|
|
Monika90 |
» 2014-01-28 16:08:10 name.compare zwraca zero gdy stringi są równe, użyj operatora == |
|
--Smigol-- Temat założony przez niniejszego użytkownika |
» 2014-01-28 16:13:41 Heh, fakt, mój błąd. Dziękuję za pomoc. |
|
--Smigol-- Temat założony przez niniejszego użytkownika |
» 2014-01-28 23:00:09 A jednak gdzieś siedzi błąd - program wczytuje tylko pierwszą linijkę pliku. Jeśli każę mu szukać ts3_stop zamiast ts3_start, wywala not-found. Proszę o pomoc, pozdrawiam. |
|
« 1 » 2 |