Mi sto facendo una mia lib comene x tutti i miei programmi, che sia il + possibili portabile.
Sto facendo la generica classe CParse per caricare files di conf.
Questa sara la base x CCOnfigParse.
codice:
// Parse.hpp
#ifndef PARSE_HPP_
#define PARSE_HPP_
#include "Define.hpp"
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <cstring>
using namespace std;
N_BEG
/**
Name:CParse \n
Author:Kleidemos \n
Description:Parserizza una configurazione generica \n
Indicata come base per sviluppi \n
*/
class CParse
{
friend CParse& operator+=(CParse &p, string _add);
public:
CParse() { _buf = " "; };
CParse(string buf){ _buf = buf; };
CParse(char * buf){ _buf = buf; };
~CParse();
/// Read a generic config
void Read(istream &is = cin, string * buf_r = "");
/// Write a generic config
void Write(ostream &os = cout, string buf = " ");
/// Add a text
inline void Add(string add) { _buf += add; };
/// Find a info
string Find(string info);
private:
string _buf;
};
N_END
#endif
Questo è la sua dichiarazione.
Ho implementato +=, Write, Add.
Ma nn so come implementare Find.
Questo metodo dovrebbe cercarmi nel buffer caricato con Read(ancora da sistemare) un determinato valore(tipo file ini opt=valore).
Ma nn so come implementarla
Al momento ho implementato solo un metodo per sapere se è un files di config o no.
codice:
/**
Name:Find\n
ReturnL'informazione trovata\n
Argoments:L' informazione da cercare\n
Description:Find a info\n
*/
string CParse::Find(string info)
{
const string CONFIG_MARK = "[CONFIG]";
if(_buf.substr(0, CONFIG_MARK.size()) == CONFIG_MARK){
/// TODO
string::size_type val;
val = _buf.find(info, 0 );
if(val != string::npos){// trovata
string ret;
}else{// non trovata
return "Error!\n";
}
}else{
return "Error!\n";
}
}