Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Wczytywanie konfiguracji z pliku

Ostatnio zmodyfikowano 2014-01-30 12:53
Autor Wiadomość
--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:
C/C++
#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:
C/C++
# 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.
P-103412
Monika90
» 2014-01-28 15:44:25
Co rozumiesz przez "niedziałanie"?
Zmeń
return 0;
 na
return "";
, albo
return "not-found";
P-103414
--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):
C/C++
#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.
P-103417
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
P-103421
--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ć.
P-103424
Monika90
» 2014-01-28 16:08:10
name.compare zwraca zero gdy stringi są równe, użyj operatora ==
P-103426
--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.
P-103427
--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.
P-103477
« 1 » 2
  Strona 1 z 2 Następna strona