014
14.08.2005, 15:58 Uhr
Skippy
|
So habe mal versucht die Funktion nachzubauen
hier das ergebnis(funktioniert schonmal bestens)
zusätzlich werden in der funktion zeilen übersprungen die leer sind , per "#" auskommentiert wurden oder in denen der 2 wert fehlt
meine fragen dazu:
-kann man da sicherheitsmäßig noch etwas optimieren -gibt es noch etwas was für die aufgabe der funktion sinnvoll wäre zu implementieren? -und kann man geschwindigkeitsmäßig noch etwas optimieren (berücksichtigt soll dabei auch das aufrufen der einzelnen elemente werden)
danke schonmal
kurz und bündig der header language.h
C++: |
#ifndef __LANGUAGE_H__ #define __LANGUAGE_H__
#include <map> #include <iostream> #include <string> #include <cctype> #include <fstream> #include <sstream>
using namespace std; // Use the standard namespace
// Map von Language Strings typedef std::map<std::string,std::string> language_str;
void readinlanguage(char *LanguageFile); #endif
|
und hier die language.cpp
C++: |
void readinlanguage(char *LanguageFile) { char LangFile[255]; language_str lang_str; // Configuration
sprintf(LangFile, "language/%s.txt", LanguageFile);
std::ifstream inFile; inFile.open(LangFile); if (!inFile) { cout << "Datei " << LangFile << " kann nicht geoeffnet werden!" << endl; exit(1); }
do { // Komplette Zeile aus der Datei string line; // Zu extrahierende 'Felder' aus der Dateizeile string LangName, LangValue; // Konvertierungsstream std::istringstream is;
// Zeile einlesen getline(inFile,line);
// Bei erreichen des Dateiendes den Rest ueberspringen if (inFile.eof()) continue;//letzte zeile Überspringen Blödsinn muss entfernt werden // Eingelesene Zeile dem Konvertierungsstream zuweisen is.str(line); // Nun Name und Value aus der Zeile extrahieren getline(is,LangName,'='); // = getline(is,LangValue,';'); // ;
if(LangName == "") continue; if(LangValue == "") continue; if(LangName[0] == '#') continue;
lang_str.insert(std::map<std::string,std::string>::value_type(LangName, LangValue));
} while (!inFile.eof());
// Datei wieder schliessen inFile.close();
// Ausgabe des inhalts zu DEBUG zwecken for(language_str::const_iterator i=lang_str.begin(); i!=lang_str.end(); ++i) { std::cerr<<i->first<<" => \""<<i->second<<"\""<<std::endl;}
}
|
|