002
08.06.2004, 16:58 Uhr
virtual
Sexiest Bit alive (Operator)
|
C++: |
#include <fstream> #include <map> #include <string> #include <iostream>
typedef std::map<std::string, std::string> string_map; typedef std::map<std::string, string_map> ini_file;
ini_file read_inifile(const char* filename) { std::ifstream in(filename); ini_file file; string_map entries; std::string section_name; std::string line;
while(std::getline(in, line)) { if (line.length()==0) continue; // leerzeile if (line[0]=='#' || line[0]==';') continue; // Skip comments if (line[0]=='[' && line[line.length()-1]==']') // Section start { if (section_name.length()>0) { file.insert(std::make_pair(section_name, entries)); entries.clear(); } section_name = line.substr(1, line.length()-2); }else // ggf. Setting { std::string::size_type pos = line.find_first_of('='); if (std::string::npos == pos) continue; // Kein = Zeichen in Zeile std::string key = line.substr(0, pos); std::string value = line.substr(pos+1); entries.insert(std::make_pair(key, value)); } } if (section_name.length()>0) { file.insert(std::make_pair(section_name, entries)); }
return file; }
int main() { ini_file file = read_inifile("some.ini.file");
for(ini_file::const_iterator s=file.begin(); s!=file.end(); ++s) { std::cout<<"Abschnitt \""<<s->first<<"\":"<<std::endl; for(string_map::const_iterator e=s->second.begin(); e!=s->second.end(); ++e) { std::cout<<"\tEintrag \""<<e->first<<"\" hat den Wert \""<<e->second<<"\"."<<std::endl; } } }
|
Kann man als Grundlage eines schlechten C++ Programms dazu nehmen. Ein gutes würde das alles explizit in Klassen packen und außerdem so sachen wie Whitespaces berücksichtigen. Soll halt nur den Umgang mit Streams zeigen. -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) |