⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vbs_context.cpp

📁 vb script子集解释器 Makefile.vb用于生成解释器的c代码 可执行程序需要自己写main函数
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		printf("%s\n",s1);}bool Cvbs_context::true_value(const char* s0){	string s(s0);	if (s == "False" ||s == "#0" || s=="#" || s=="" || s == "$0" || s=="$")         {		return false;	}	return true;}int Cvbs_context::int_value(const char* s){	if (s[0]=='#' || s[0]=='$')	{ return atoi(s+1);}	if (strcmp(s,"False")==0) return 0;	if (strcmp(s,"True")==0)  return 1;	return 0;}int Cvbs_context::set_arg_val(const char* fn, int n, const char* value){        string str(fn);        vars_table::iterator i;        toUpperCase(str);	char tmp[32];	sprintf(tmp,"@%u",n);        for (i = var.begin();i != var.end();i++ )        {                if (strstr((*i).first.c_str(),str.c_str())!=0)		{		    if ((*i).first.rfind(tmp)!=string::npos)		    {			(*i).second = value;			break;		    }		}        }        return 0;}int Cvbs_context::save_func(const char* name, const char* body){	set_var((string(name)+"@Body").c_str(),body);}int Cvbs_context::call(const char* name0){	string name(name0);	Cvbs_context func;	toUpperCase(name);	string sTmp;        vars_table::iterator i;	for (i = var.begin();i != var.end();i++ )        {		size_t found,found2;		found = (*i).first.find(name);                if (found!=string::npos)                {		     found = (*i).first.find("@");		     found2 = (*i).first.find("@",found+1);                     if (found2 == string::npos) continue;		     sTmp = (*i).first.substr(found+1,found2-found-1);		                          func.set_var(sTmp.c_str(),(*i).second.c_str());                                    }        }        	func.execute(get_var((name+"@Body").c_str()).c_str(),var);}int Cvbs_context::create_array(const char* name,int num){     int n;     char tmp[32];     string str;	for(n=0;n< num;n++)	{		sprintf(tmp,"%u",n);		str=string(name)+"#"+tmp;		set_var(str.c_str(),"");	}     return n;}int Cvbs_context::set_array_dim(const char* name,int dim){     char tmp[32];     sprintf(tmp,"#%u",dim);     string str;     string arr = name;     toUpperCase(arr);     arr+="#";     str = get_var(arr.c_str());     str+=tmp;     set_var(arr.c_str(),str.c_str());     return 0;}int Cvbs_context::get_array_dim(const char* name,int idx){     string str;     string arr = name;     toUpperCase(arr);     arr+="#";     str = get_var(arr.c_str());     size_t pos=string::npos;     while(idx--) {pos = str.rfind("#",pos); if (idx && pos!=string::npos) pos--;};       size_t next = str.find_first_not_of("0123456789",pos+1);     if (next!=string::npos) next = next - pos - 1;     str=str.substr(pos+1,next);     return atoi(str.c_str());}int  Cvbs_context::set_array_val(const char* name,int idx,const char* val){     char tmp[32];     sprintf(tmp,"#%u",idx);     string arr = name;     toUpperCase(arr);     arr+=tmp;     set_var(arr.c_str(),val);     return 0;}bool Cvbs_context::isSubName(const char* name){	string str(name);	toUpperCase(str);     		vars_table::iterator i;        i = sub_table.find(str);		return i!=sub_table.end();}string Cvbs_context::ubound(const char* name, int dim){     string str;     string arr = name;     toUpperCase(arr);     arr+="#";     str = get_var(arr.c_str());     size_t pos=string::npos;     do {	pos = str.find("#",pos);     }while(--dim);     size_t next = str.find_first_not_of("0123456789",pos+1);     if (next!=string::npos) next = next - pos - 1;     str=str.substr(pos,next);     set_var(".",str.c_str());     return str;}string Cvbs_context::clng(const char* str){        char tmp[32];        sprintf(tmp,"#%d",int_value(str));    	return string(tmp);}string Cvbs_context::date(){	time_t t;	t=time(&t);	struct tm *pt = localtime(&t);	char tmp[16]={0};	sprintf(tmp,"#%04d/%02d/%02d",pt->tm_year+1900,pt->tm_mon+1,pt->tm_mday);	return string(tmp);}string  Cvbs_context::vbtime(){        time_t t;        t=time(&t);        struct tm *pt = localtime(&t);        char tmp[16]={0};        sprintf(tmp,"#%02d:%02d:%02d",pt->tm_hour,pt->tm_min,pt->tm_sec);        return string(tmp);}string Cvbs_context::getString(const char* szR,const char* szField, const char* szNum){	string data;	if ( strlen(szR) > 1) 	{		data = szR;	}	else  data = get_var("DATARECEIVED");	string num =  get_var("DATARECEIVEDNUM");	int n = int_value(num.c_str());	int index = int_value(szNum);	if (index < 0 || index > n) return string("$");	size_t found=0;	int step = strlen(szField) ;	num = szField+1;	num += "=";	for (int i=0;i<index;i++)	{		found=data.find(num,found);		if (found == string::npos)			return string("$");		found+=step;	}		size_t end;	end = data.find(';',found);	if (end == string::npos)		return string("$"); 		num = data.substr(found,end-found);	data="$";	data+=num;	return data;}string Cvbs_context::inStr(const char* szStart,const char* s1,const char* s2, const char* szM){	int n = int_value(szStart);	if (strlen(s1)-1 < 1 || strlen(s2)-1 < 1 || s1[0]!='$' || s2[0]!='$')		return string("#0");		if (n > (strlen(s1)-1 )) n = strlen(s1)-1;			if (int_value(szM) == 0)	{		char* p  = strstr(s1+1+n,s2+1);		n = (p)?p-s1:0;	}	else	{		string S1(s1+1);		string S2(s2+1);		toUpperCase(S1);		toUpperCase(S2);		n = S1.find(S2,n);		n = (n==string::npos)?0:n+1;	}	char tmp[32]={0};			sprintf(tmp,"#%d",n);	return string(tmp);}string Cvbs_context::cstr(const char* str){	if (str[0]=='$') return string(str);	if (str[0]=='#')	{		char tmp[32]={0};		sprintf(tmp,"$%s",str+1);		return string(tmp);	}	string r="$";	r+=str;	return r;}string Cvbs_context::len(const char* str){	int n=0;        if (str[0]=='$' || str[0]=='#') n=strlen(str)-1;	                       char tmp[32]={0};        sprintf(tmp,"#%d",n);              return string(tmp);}string Cvbs_context::rnd(const char* sz){	char tmp[32]={0};	int n = int_value(sz);	double  x;	if (n >0)	{	    x = rand();	    x = x * 1000;	    x = x / RAND_MAX; 	    n = (int)round(x);	    	    m_rnd=n;            sprintf(tmp,"#%d",n);	}	else if (n==0)	{	    sprintf(tmp,"#%d",m_rnd);	}	else if (n < 0)	{	    srand(n);	    x = rand();	    x = x*1000;	    x = x/RAND_MAX;            n = (int)round(x);	    m_rnd=n;	    sprintf(tmp,"#%d",n);	}		return string(tmp);}string Cvbs_context::rnd0(void){	return rnd("#1");}void Cvbs_context::init_rnd(const char* sz){	int n=int_value(sz);	if (1==n) n++;	srand(n);}void Cvbs_context::init_rnd0(void){	srand( (unsigned)time( NULL ) );}string Cvbs_context::vbyear(const char* sz){	string tmp = sz;	size_t pos;	pos = tmp.find_first_of("/");	if (pos!=string::npos)	{		tmp = tmp.substr(0,pos);	}	return clng(tmp.c_str());}string Cvbs_context::vbmonth(const char* sz){        string tmp = sz;	size_t pos;        pos = tmp.find_first_of("/");        if (pos!=string::npos)        {                tmp = tmp.substr(pos+1);        }	pos = tmp.find_first_of("/");        if (pos!=string::npos)        {                tmp = tmp.substr(0,pos);		tmp = string("#")+tmp;        }	        return clng(tmp.c_str());}string Cvbs_context::vbday(const char* sz){        string tmp = sz;	size_t pos;        pos = tmp.find_first_of("/");        if (pos!=string::npos)        {                tmp = tmp.substr(pos+1);        }        pos = tmp.find_first_of("/");        if (pos!=string::npos)        {                tmp = tmp.substr(pos+1);                tmp = string("#")+tmp;        }        return clng(tmp.c_str());}string Cvbs_context::vbweekday(const char* sz){	struct tm n={0};	n.tm_year = int_value(vbyear(sz).c_str())-1900;	n.tm_mon = int_value(vbmonth(sz).c_str())-1;	n.tm_mday = int_value(vbday(sz).c_str());	time_t t = mktime(&n);	char buf[8]={0};	buf[0]='#';	sprintf(buf+1,"%d",n.tm_wday);        string tmp = buf;        return tmp;}string Cvbs_context::vbhour(const char* sz){        string tmp = sz;        size_t pos;	        pos = tmp.find_first_of(":");        if (pos!=string::npos)        {                tmp = tmp.substr(0,pos);        }        return clng(tmp.c_str());}string Cvbs_context::vbminute(const char* sz){        string tmp = sz;        size_t pos;        pos = tmp.find_first_of(":");        if (pos!=string::npos)        {                tmp = tmp.substr(pos+1);        }        pos = tmp.find_first_of(":");        if (pos!=string::npos)        {                tmp = tmp.substr(0,pos);                tmp = string("#")+tmp;        }        return clng(tmp.c_str());}string Cvbs_context::vbsecond(const char* sz){	string tmp = sz;        size_t pos;        pos = tmp.find_first_of(":");        if (pos!=string::npos)        {                tmp = tmp.substr(pos+1);        }        pos = tmp.find_first_of(":");        if (pos!=string::npos)        {                tmp = tmp.substr(pos+1);                tmp = string("#")+tmp;        }        return clng(tmp.c_str());}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -