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

📄 subs.cpp

📁 读取oracle的blob数据. 数据库连接以ODBC连接.
💻 CPP
字号:
#include "stdafx.h"
#include <stdlib.h>
#include <io.h>
#include <string.h>
#include <math.h>

unsigned char rootdir[256];
int SYH = '\"'; 
int DYH = '\''; 


class obj_init
{
public:
	obj_init();
};

obj_init::obj_init()
{
	strcpy((char*)rootdir, "C:\\");
}

obj_init objinit;


int ltrim(char *vp)
{
	if (!vp) return 0;

	char *p = vp;

	while(*p == ' ') p++;

	strcpy(vp, p);

	return strlen(vp);
}

int trim(char *vp)
{
	if (!vp) return 0;

	int l;
	unsigned char *p = (unsigned char *)vp;

	l = strlen(vp);

	while(l)
	{
		if (p[l-1] >' ')
		{
			break;
		}
		l--;
	}
	p[l]=0;
	return l;
}

int alltrim(char *vp)
{
	if (!vp) return 0;
	unsigned char *p = (unsigned char *)vp;

	while(*p == ' ') p++;
	strcpy(vp,(char*)p);

	int l = strlen(vp);

	while(l)
	{
		if ((unsigned char)vp[l-1] >' ')
		{
			break;
		}
		l--;
	}
	vp[l]=0;
	return strlen(vp);
}

//消去一个浮点数小数部分后缀的'0'
int trim0(char *vp)
{
	if (!vp) return 0;

	int l;
	unsigned char *p = (unsigned char *)vp;

	char *pp = strchr(vp,'.');

	l = strlen(vp);

	if (!pp) return l;


	while(l)
	{
		if (p[l-1] >' ' && p[l-1] != '0')
		{
			break;
		}
		l--;
	}
	if (l) if (p[l-1]=='.') l--;

	p[l]=0;
	return l;
}


//消去由逗号分隔的多个浮点数小数部分后缀的'0' (100.00, 234.1200,...)
int trim0s(char *vp)
{
	if (!vp) return 0;

	int i;
	int l;
	char *p = vp;
	char *tok;

	i   = 0;
	tok = strchr(p, ',');

	while(p)
	{
		if (tok)
		{
			tok[0]=0;
		}

		l=trim0( p);

		if (l)
		{
			memcpy(&vp[i], p, l); 
			i+=l;
			memcpy(&vp[i], ",", 1); 
			i+=1;
		}

		if (!tok)
		{
			break;
		}

		p=tok+1;
			
		if (p==NULL) break;
		if (*p==0) break;

		tok = strchr(p, ',');
	}

	vp[i]=0;
	return i;
}

int alltrimt(char *vp)
{
	if (!vp) return 0;
	unsigned char *p = (unsigned char *)vp;

	while(*p == ' ' || *p=='\t') p++;
	strcpy(vp,(char*)p);

	int l = strlen(vp);

	while(l)
	{
		if ((unsigned char)vp[l-1] >' ')
		{
			break;
		}
		l--;
	}
	vp[l]=0;
	return strlen(vp);
}

void replace_with(char *pstr, char *obj, char *repl, char *with)
{
	char *str = new char[60000];

	int rl = strlen(repl);
	int wl = strlen(with);

	int  i, j, k;

	memset(str, 0, 60000);
	strcpy(str, pstr);

	int n=strlen(str);

	i=0;
	k=0;
	while(i<n)
	{
		for (j=0; j<rl; j++)
		{
			if (str[j+i] != repl[j]) break;
		}
		if (j != rl)
		{
			obj[k] = str[i];
			k++;
			i++;
			continue;
		}
		for (j=0; j<wl; j++)
		{
			obj[k] = with[j];
			k++;
		}
		i += rl;

	}
	obj[k]=0;

	delete str;
 
}

hyper date2Seconds(int y,int m,int d,int h,int f,int s)
{
	int i;
	int feb;
	int days;

	days=0;

	if (y<1) y=1;
	if (y>2500) y=2500;

	for (i=1; i<y; i++)			//从公元第一年计算
	{
		feb = 28;
		if (i/4*4 == i)
		{
			feb = 29;
			if (i/100*100 == i)
			{
				feb = 28;				
				if (i/400*400==i) feb=29;
			}
		}
		days = days + (31+feb+31+30+31+30+31+31+30+31+30+31);
	}

	if (m>1) days += 31;
	if (m>2)
	{
		i  = y;
		feb = 28;
		if (i/4*4 == i)
		{
			feb = 29;
			if (i/100*100 == i)
			{
				feb = 28;				
				if (i/400*400==i) feb=29;
			}
		}		
		days+=feb;
	}
	if (m>3) days+=31;
	if (m>4) days+=30;
	if (m>5) days+=31;
	if (m>6) days+=30;
	if (m>7) days+=31;
	if (m>8) days+=31;
	if (m>9) days+=30;
	if (m>10) days+=31;
	if (m>11) days+=30;

	days += d;
	hyper seconds = (hyper)days * (hyper)(24*3600) + h*3600+f*60+s;
	return seconds;
}

void ctod(char *date, int &y,int &m,int &d,int &h,int &f,int &s, int &w)
{
	int i,k;
	int dash;
	int nr, ns;
	int iy=2, im=2, id=2, nb;
	char value[2048];
	char *vp;
	
	dash = 1;
	nr = ns = 0;
	y=m=d=h=f=s=0;

	 
	strcpy(value, date);
	
	//将时与天分开:
	vp = strchr(value, ':');
	if (vp)
	{
		char *vpp = vp-1;
		if ((BYTE)*vpp >='0' && (BYTE)*vpp <='9') vpp--;
		if ((BYTE)*vpp >='0' && (BYTE)*vpp <='2') vpp--;
		memcpy(&value[1024], vpp+1, 32);
		if ((BYTE)*vpp >='0' && (BYTE)*vpp <='9' )
		{
			vpp++;
			*vpp=' ';
		}
		vpp++;
		value[1024+31]=0;
		memcpy(vpp, &value[1024], 32);
	}

	vp = value;
 

	while(*vp)
	{
		if (*vp==DYH || *vp==SYH || *vp<'0' || *vp>'9')
		{
			vp++; continue;
		}

		k = atol(vp);  nb=0;
		if (vp[0]>='0' && vp[0]<='9')
		{
			nb++;
			if (vp[1]>='0' && vp[1]<='9')
			{
				nb++;
				if (vp[2]>='0' && vp[2]<='9')
				{
					nb++;
					if (vp[3]>='0' && vp[3]<='9')
					{
						nb++;
					}
				}
			}
		}

		while(*vp)
		{
			if (!strchr(":/,\\ -", *vp))
			{
				vp++;
				if (*vp) continue;
			}

			if (*vp==':')	//
			{
				dash=0;
				if (ns==0) h=k;
				else if (ns==1) f=k;
				else s=k;
				ns++;
			}
			else if (*vp=='/' || *vp=='-' || *vp=='\\')
			{
				dash=1;
				if (nr==0) {y=k; iy=nb;}
				else if (nr==1) {m=k; im=nb;}
				else {d=k;id=nb;}
				nr++;
			}
			else	//时间或日期的最后的部分
			{
				if (dash==0)
				{
					if (ns==0) h=k;
					else if (ns==1) f=k;
					else s=k;
					ns++;
				}
				else
				{
					if (nr==0) {y=k; iy=nb;}
					else if (nr==1) {m=k; im=nb;}
					else {d=k; id=nb;}
					nr++;
				}

			}
			break;
			
		}//找到数的结尾(while)

	}//求出时间和日期

	if (d>31 || id>2 )
	{
		k = y;
		y = d;
		d = m;
		m = k;

		k  = iy;
		iy = id;
		id = im;
		im = k;

	}
	
	if (y<100)
	{
		if (iy<=2)	y+=1900;
	}

	//if (y<=1900) y=1900;


	if (m>12) m=12;
	if (m<1)  m=1;
	if (d>31) d=31;
	if (d<1)  d=1;
	if (y<0)  y=1;

	int feb;

	i   = y;
	feb = 28;
	if (i/4*4 == i)
	{
		feb = 29;
		if (i/100*100 == i)
		{
			feb = 28;				
			if (i/400*400==i) feb=29;
		}
	}		
	//check day

	if (m==2)  if (d>feb) d=feb;
	if (m==4)  if (d>30)  d=30;
	if (m==6)  if (d>30)  d=30;
	if (m==9)  if (d>30)  d=30;
	if (m==11) if (d>30)  d=30;
	



	if (h<0) h=0;
	if (h>=24) h=0;
	if (f<0) f=0;
	if (f>59) f=0;
	if (s<0) s=0;
	if (s>59) s=0;

	hyper seconds = date2Seconds(y, m, d, h, f,s);

	int days=(int)(seconds / (hyper)(24*3600));

	w = (days % 7);	

}

⌨️ 快捷键说明

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