All pastes #231816 Raw Edit

parsing

public cpp v1 · immutable
·published 2006-11-01 01:41 UTC
rendered paste body
/* Line IRC's parsing in cpp */#ifndef _C_PARSER_#define _C_PARSER_#include <iostream>#include <string>using namespace std;class c_parser{  private:	string		m_nick;	string		m_ident;	string		m_hostname;	string		m_type;	string		m_where; //pv (nick) or channel	string		m_msg;	string		m_pong;	string		m_parserError;  public:	c_parser();	~c_parser();	bool			parse(string buffer);	string		getnick();	string		getident();	string		gethostname();	string		gettype();	string		getwhere();	string		getmsg();	string		getpong();	string		getParserError();};#endif/* constructor (erasing) */c_parser::c_parser(){  m_nick.clear();  m_ident.clear();  m_hostname.clear();  m_type.clear();  m_where.clear();  m_msg.clear();  m_pong.clear();  m_parserError.clear();}/* destructor (erasing) */c_parser::~c_parser(){  m_nick.clear();  m_ident.clear();  m_hostname.clear();  m_type.clear();  m_where.clear();  m_msg.clear();  m_pong.clear();  m_parserError.clear();}/* line's parsing */bool c_parser::parse(string buffer){  int a;  /* erasing */  m_parserError.clear();  m_nick.clear();  m_ident.clear();  m_hostname.clear();  m_type.clear();  m_where.clear();  m_msg.clear();  m_pong.clear();  /* if PING */  if(buffer[0] != ':') {	 if(!buffer.compare(0, 6, "PING :")) {		buffer.erase(0,6);		m_pong = buffer;		cout << "+PONG :"<<m_pong<<"+"<<endl;		buffer.clear();		return true;		}	else return false;	}  /* m_nick search */  for(a = 0; buffer[a] != '!' && buffer[a] != '\0'; a++);  if(buffer[a] == '\0') {	m_parserError = "buffer's end was found before m_nick.";	return false;	}  else m_nick = buffer.substr(1, a-1);  buffer.erase(0,a+1); //erasing already read  /* m_ident search */  for(a = 0; buffer[a] != '@' && buffer[a] != '\0'; a++);  if(buffer[a] == '\0') {	m_parserError = "buffer's end was found before m_ident.";	return false;	}  else m_ident = buffer.substr(0, a);  buffer.erase(0,a+1); //erasing already read  /* m_hostname search */  for(a = 0; buffer[a] != ' ' && buffer[a] != '\0'; a++);  if(buffer[a] == '\0') {	m_parserError = "buffer's end was found before m_hostname.";	return false;	}  else m_hostname = buffer.substr(0, a);  buffer.erase(0,a+1); //erasing already read  /* m_type search */  for(a = 0; buffer[a] != ' ' && buffer[a] != '\0'; a++);  if(buffer[a] == '\0') {	m_parserError = "buffer's end was found before m_type.";	return false;	}  else m_type = buffer.substr(0, a);  buffer.erase(0,a+1); //erasing already read  /* m_where search */  for(a = 0; buffer[a] != ' ' && buffer[a] != '\0'; a++);  if(buffer[a] == '\0') {	m_parserError = "buffer's end was found before m_where.";	return false;	}  else m_where = buffer.substr(0, a);  buffer.erase(0,a+2); //erasing already read  /* m_msg search */  m_msg = buffer;  buffer.clear(); //erasing all (the rest) of bufferreturn true;}string c_parser::getnick(){  return m_nick;}string c_parser::getident(){  return m_ident;}string c_parser::gethostname(){  return m_hostname;}string c_parser::gettype(){  return m_type;}string c_parser::getwhere(){  return m_where;}string c_parser::getmsg(){  return m_msg;}string c_parser::getpong(){  return m_pong;}string c_parser::getParserError(){  return m_parserError;}int  main(){  c_parser Parsing;  string line1 = ":Co2SoFt!guest@3569536830.fr PRIVMSG #under :&op geeks nerds";  string line2 = "PING :irc.voila.fr";  string line3 = ":Co2SoFt!guest@3569536830.fr PRIVMSG #under :&op geeks nerds";  if(!Parsing.parse(line1)) cout<< "ERROR, invalid line: " <<Parsing.getParserError()<< endl;  else {	cout<< "first line :" << endl;	cout<< "m_nick : +" <<Parsing.getnick()<<"+"<< endl;	cout<< "m_ident : +" <<Parsing.getident()<<"+"<< endl;	cout<< "m_hostname : +" <<Parsing.gethostname()<<"+"<< endl;	cout<< "m_type : +" <<Parsing.gettype()<<"+"<< endl;	cout<< "m_where : +" <<Parsing.getwhere()<<"+"<< endl;	cout<< "m_msg : +" <<Parsing.getmsg()<<"+"<< endl;	}  cout<< endl;  if(!Parsing.parse(line2)) cout<< "ERROR, invalid line: " <<Parsing.getParserError()<< endl;  cout<< endl;  if(!Parsing.parse(line3)) cout<< "ERROR, invalid line: " <<Parsing.getParserError()<< endl;  else {	cout<< "third line : " << endl;	cout<< "m_nick : +" <<Parsing.getnick()<<"+"<< endl;	cout<< "m_ident : +" <<Parsing.getident()<<"+"<< endl;	cout<< "m_hostname : +" <<Parsing.gethostname()<<"+"<< endl;	cout<< "m_type : +" <<Parsing.gettype()<<"+"<< endl;	cout<< "m_where : +" <<Parsing.getwhere()<<"+"<< endl;	cout<< "m_msg : +" <<Parsing.getmsg()<<"+"<< endl;	cout <<endl;	if(Parsing.getnick() == "MProg") cout << "MProg have a valid access !" << endl;	}return 0;}