📄 subs.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 + -