Blame | Last modification | View Log | Download
/*
* Trida RNDFParser poskytuje metody ke zpracovani textoveho souboru ve
* formatu RNDF definovaneho v soutezi Rotobour 2007
*
* @author: Vasco
* @date: Sat, 21 Jul 2007 15:56:28 +0200
* @version: 0.0.0
*
*/
#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <cctype>
#ifdef DBG
// vypisuje ladici hlaseni
#include "rndf_dbg.cpp"
#endif
class RNDFParser {
private:
std::string rndfname;
protected:
/* funkce vezme retezec a rozlozi jej na slova, vraci vector<std::string> */
std::vector<std::string> toWord(const std::string& veta);
public:
RNDFParser(std::string name) { rndfname = name; } // konstruktor, ulozi jmeno souboru
std::string rndfName() { return rndfname; } // vrati jmeno zpracovavaneho souboru
std::map<double, double> parseSegment(int numSegment); // rozparsuje zadany segment cesty
};
/**
* @param veta retezec, ktery chceme rozlozit na slova
*
* Metoda vezme vstupni retezec a rozlozi jej na slova. Slovo zacina a konci libovolnym poctem
* bilych znaku, veta konci s koncem retezce. Vysledna slova jsou ukladana do vector<string>,
* ktery je nasledne vracen volajicimu.
*/
std::vector<std::string> RNDFParser::toWord(const std::string& veta) {
// definice vlastnich typu
typedef std::string::size_type vel_vety; // velikost retezce
// mistni promnene
std::vector<std::string> slova; // sem se budou ukladat slova
vel_vety i = 0; // velikost zadane vety
#ifdef DBG
// pro kontrolu vypiseme vetu
echoDbg(veta);
#endif
// dokud nedojdeme na konec retezce
while(i != veta.size()) {
// jsou na zacatku mezery? preskoc je
while(i != veta.size() && std::isspace(veta[i]))
i++;
// uloz pozici zacatku slova
vel_vety j = i; // pomocny ukazatel v retezci
// slovo, dokud nenarazime na dalsi mezeru
while(j != veta.size() && !(std::isspace(veta[j])))
j++;
// pokud se ve vete vyskytovaly slova
if(i != j) {
// vloz slovo do vectoru
slova.push_back(veta.substr(i, j - i));
// opet ulozime pozici a jdem na dalsi slovo
i = j;
}
} //end while
return slova;
}
/* funkce main je jen pro testovaci ucely, prelozi se pouze s definovanym makrem 'DBG' */
#ifdef DBG
int main(void) {
std::cout << "PARSER:\tvypisuji RNDF soubor:" << std::endl;
RNDFParser parser("RNDF_stromovka.txt");
std::cout << "PARSER:\tJmeno souboru je " << parser.rndfName() << std::endl;
return 0;
}
#endif