C++, jak naj

Potrzebujesz pomocy z C, C++, perl, python, itp.
zbik
Posty: 7
Rejestracja: 19 września 2007, 22:13

C++, jak najłatwiej odczytać plik konfiguracyjny?

Post autor: zbik »

Chciałbym napisać program który czyta taki normalny, linuksowy plik konfiguracyjny:

Kod: Zaznacz cały

# jakiś komentarz
zmienna1 = 7
zmienna2 = /var/lib/cośtam/
Czy jest jakaś gotowa funkcja/biblioteka, jakiś łatwy sposób żebym mógł odczytać taki plik *.conf i mieć w programie ustawione zmienne z tego pliku, czy muszę sam pisać funkcje która będzie czytać linijka po linijce, ignorować komentarze i wczytywać jakoś te zmienne?
Takie pliki konfiguracyjne mają ujednoliconą składnię i wiele programów ich używa, wydaje mi się że powinny być jakieś gotowe narzędzia ułatwiające używanie tych plików w programach.
Kaka'
Senior Member
Posty: 3018
Rejestracja: 30 lipca 2006, 13:17
Lokalizacja: Kartuzy

Post autor: Kaka' »

Ostatnio sam zainteresowałem się odczytywaniem linijek z pliku. Jak na razie korzystam z fstream (poczytaj na cplusplus.com), choć pewnie jest prostszy sposób...


Pozdrawiam.
Immortal
Posty: 31
Rejestracja: 11 grudnia 2007, 12:15
Lokalizacja: Kraków

Post autor: Immortal »

Napisać takie odczytywanie to nie jest specjalny problem. Dobrze jest użyć jakiegoś strumiania. Może być jak kolega Kaka' napisał fstream/istream. Jeśli będziesz miał plik zapisany tak jak napisałeś czyli:

Kod: Zaznacz cały

zmienna1 = coś_tam
to masz problem z głowy. Jeśli zaś

Kod: Zaznacz cały

zmienna1=coś_tam
To już musisz dołożyć jeszcze jedną pentelkę ;) Jeśli chcesz czytać od słowa do słowa to używasz zwykłego operatora >>. On czyta do białego znaku. Jeśli zaś chcesz czytać po znaku to możesz użyć funkcji get() (poczytaj np o typie std::istream). O ile pamiętam jest tam jeszcze funkcja getline() która w połączeniu ze std::string pozwoli Ci to napisać bardzo szybko i sprawnie ;)
db
Beginner
Posty: 185
Rejestracja: 25 czerwca 2006, 15:23

Post autor: db »

Kaka' pisze:Ostatnio sam zainteresowałem się odczytywaniem linijek z pliku. Jak na razie korzystam z fstream (poczytaj na cplusplus.com), choć pewnie jest prostszy sposób...
Co ma do tego fstream?

http://www.adp-gmbh.ch/cpp/config_file.html -- całkiem przyjemny przykład takiej klasy. Google-code, koders.com mają multum innych przykładów.
Awatar użytkownika
grzesiek
Junior Member
Posty: 932
Rejestracja: 06 stycznia 2008, 10:41
Lokalizacja: Białystok

Post autor: grzesiek »

Kiedyś pamiętam pisałem coś takiego, wtedy szukałem czegoś takiego w GLib, jest tam jakiś perser ale jego działanie jest troszkie nakierowane np na gtk.rc, najlepiej samemu to napisac, być może teraz jest to juz bardziej rozwiniete.

tu masz coś takiego

http://library.gnome.org/devel/glib/uns ... arser.html
wojtekz_
Beginner
Posty: 337
Rejestracja: 13 marca 2007, 16:50
Lokalizacja: Warszawa

Post autor: wojtekz_ »

Podejrzewam, że co drugi program w Debianie ma taką "bibliotekę". Jest to tak trywialne, że chyba nie warto specjalnie szukać, tylko sobie samemu napisać. Powinno zająć 15 minut ;-)

Pozdrawiam
ODPOWIEDZ