vfp爱协程序2021.4.20

法润惠民

<p class="ql-block">*历年爱协收入2021.4.20</p><p class="ql-block"> CD "D:\0爱心协会\爱心vfp\0"</p><p class="ql-block"> CLOSE DATABASES </p><p class="ql-block"> SET SAFETY OFF</p><p class="ql-block"> SET TALK OFF</p><p class="ql-block"> SET TALK ON</p><p class="ql-block"> SET CENTURY on</p><p class="ql-block"> SET DATE to ymd</p><p class="ql-block"> SET HOURS TO 24</p><p class="ql-block"> CLOSE TABLES all</p><p class="ql-block"> CLEAR</p><p class="ql-block">*1.建表</p><p class="ql-block">CREATE TABLE D:\0爱心协会\爱心vfp\0\历年爱协收入(总序 int,年序 int,年份 int,月序 int,月份 c(10),数据 c(150),捐款人 c(30),捐款额 n(10,2),捐款时间 time,捐款内容 c(50),转账人 c(50),文本型 c(50),日期型 c(50))</p><p class="ql-block">*2.导入csv文件</p><p class="ql-block"> from D:\0爱心协会\协会财务收支\历年爱协收入.csv type csv fields 总序,年序,年份,月序,月份,数据,捐款人,捐款额,捐款时间,捐款内容,转账人,文本型,日期型</p><p class="ql-block">*3.变量</p><p class="ql-block"> SELECT sum(捐款额),count(捐款人),Min(捐款时间),Max(捐款时间) from 历年爱协收入 into array hj1 &amp;&amp;统计</p><p class="ql-block"> SELECT dist 捐款人 from 历年爱协收入 into array hj2 &amp;&amp;唯一</p><p class="ql-block">*4.汇总</p><p class="ql-block"> SELECT 捐款人,sum(捐款额) 捐款额,count(捐款人) 捐款次数,Min(捐款时间) 捐款时间起,Max(捐款时间) 捐款时间止 from 历年爱协收入 into dbf 0 group by 捐款人 orde by 捐款人 desc</p><p class="ql-block"> SELECT recn() 序号,*,space(100) 合并 from 0 into dbf 1 </p><p class="ql-block"> *替换</p><p class="ql-block"> REPLACE all 合并 with ALLTRIM(捐款人)+" "+ALLTRIM(STR(捐款额,10,2))+"("+ALLTRIM(STR(捐款次数))+"次捐 自"+ALLTRIM(ttoc(捐款时间起))+" 至 "+ALLTRIM(ttoc(捐款时间止))+")"</p><p class="ql-block"> *插入记录 合计</p><p class="ql-block"> GO top</p><p class="ql-block"> INSERT blank before</p><p class="ql-block"> REPLACE 捐款人 with "合计",捐款额 with hj1(1),捐款次数 with hj1(2),捐款时间起 with hj1(3),捐款时间止 with hj1(4),合并 with "爱协收入合计"+ALLTRIM(STR(hj1(1),10,2))+"("+ALLTRIM(STR(hj1(2)))+"次捐 "+ALLTRIM(STR(ALEN(hj2,1)))+"人捐 "+" 自"+ALLTRIM(ttoc(hj1(3)))+" 至"+ALLTRIM(ttoc(hj1(4)))+")"</p><p class="ql-block">*5.导出</p><p class="ql-block"> *导出电子表</p><p class="ql-block"> wjm=ALLTRIM(STR(year(hj1(4))))+"-"+iif(LEN(ALLTRIM(STR(month(hj1(4)))))=2,ALLTRIM(STR(month(hj1(4)))),"0"+ALLTRIM(STR(month(hj1(4)))))+"-"+iif(LEN(ALLTRIM(STR(day(hj1(4)))))=2,ALLTRIM(STR(day(hj1(4)))),"0"+ALLTRIM(STR(day(hj1(4)))))</p><p class="ql-block"> COPY TO D:\0爱心协会\协会财务收支\0历年收支\&amp;wjm.历年爱协收入.xls TYPE XL5</p><p class="ql-block"> *导出文本文件</p><p class="ql-block"> kk=""</p><p class="ql-block"> kk1=""</p><p class="ql-block"> GO top</p><p class="ql-block"> DO while .not. EOF()</p><p class="ql-block"> kk1=ALLTRIM(合并)+CHR(13)+CHR(10)</p><p class="ql-block"> SKIP</p><p class="ql-block"> kk=kk+kk1</p><p class="ql-block"> STRTOFILE(kk,"D:\0爱心协会\协会财务收支\0历年收支\&amp;wjm.历年爱协收入.txt")</p><p class="ql-block"> ENDDO</p> <p class="ql-block">*四、全部个人数据 </p><p class="ql-block">*1.变量</p><p class="ql-block"> SELECT dist 捐款人 from 历年爱协收入 into dbf 0 &amp;&amp;唯一</p><p class="ql-block"> SELECT * from 0 into array hj1</p><p class="ql-block"> ?ALEN(hj1,1) </p><p class="ql-block">*FOR k=1 to 5 </p><p class="ql-block">FOR k=1 to ALEN(hj1,1)</p><p class="ql-block"> *1.变量 </p><p class="ql-block"> *个人合计变量hj2</p><p class="ql-block"> SELECT 捐款人,sum(捐款额) 捐款额,count(捐款人) 捐款次数,Min(捐款时间) 捐款时间起,Max(捐款时间) 捐款时间止 from 历年爱协收入 into array hj2 where 捐款人=hj1(k) group by 捐款人 </p><p class="ql-block"> *2.汇总 </p><p class="ql-block"> *全部个人捐款</p><p class="ql-block"> SELECT 捐款时间,捐款人,捐款额,数据,年份 from 历年爱协收入 into dbf 0 where 捐款人=hj1(k) orde by 捐款时间 desc &amp;&amp;变量取数,按捐款人</p><p class="ql-block"> SELECT recn() 序号,*,space(100) 合并 from 0 into dbf 1 &amp;&amp;序号 增加字段</p><p class="ql-block"> REPLACE all 合并 with 数据 &amp;&amp;替换</p><p class="ql-block"> </p><p class="ql-block"> *插入记录 年份合计</p><p class="ql-block"> *年份变量 (年份统计)</p><p class="ql-block"> SELECT 年份,sum(捐款额) 捐款额,count(捐款人) 捐款次数,Min(捐款时间) 捐款时间起,Max(捐款时间) 捐款时间止 from 0 into array hj3 group by 年份 order by 年份</p><p class="ql-block"> *定义变量</p><p class="ql-block"> dime ax[alen(hj3,1)] &amp;&amp;合并变量</p><p class="ql-block"> FOR kk=1 to ALEN(hj3,1)</p><p class="ql-block"> ax(kk)=ALLTRIM(STR(hj3(kk,1)))+"年"+ALLTRIM(hj1(k,1))+" 捐款"+ALLTRIM(STR(hj3(kk,2),10,2))+" 捐次"+ALLTRIM(STR(hj3(kk,3)))+"(自"+ALLTRIM(ttoc(hj3(kk,4)))+" 至"+ALLTRIM(ttoc(hj3(kk,5)))+")"</p><p class="ql-block"> *插入记录,分年</p><p class="ql-block"> GO top</p><p class="ql-block"> INSERT blank before</p><p class="ql-block"> REPLACE 序号 with kk,捐款人 with ALLTRIM(STR(hj3(kk,1)))+"年"+ALLTRIM(hj1(k,1))+"捐",捐款额 with hj3(kk,2),合并 with ax(kk)</p><p class="ql-block"> ENDFOR </p><p class="ql-block"> </p><p class="ql-block"> *插入记录 合计 </p><p class="ql-block"> GO top</p><p class="ql-block"> INSERT blank before</p><p class="ql-block"> REPLACE 捐款人 with "合计",捐款额 with hj2(2),合并 with ALLTRIM(hj1(k,1))+" 历年捐款合计"+ALLTRIM(STR(hj2(2),10,2))+"("+ALLTRIM(STR(hj2(3)))+"次捐 "+"自"+ALLTRIM(ttoc(hj2(4)))+" 至"+ALLTRIM(ttoc(hj2(5)))+")" </p><p class="ql-block">*3.导出</p><p class="ql-block"> wjm=STRTRAN(ALLTRIM(hj1(k,1)), " ", "")</p><p class="ql-block"> *STRTRAN(" abcd ef g h ijk lmn ", " ", "")</p><p class="ql-block"> *导出电子表 </p><p class="ql-block"> COPY TO D:\0爱心协会\协会财务收支\0历年收支\&amp;wjm._历年爱协捐款.xls TYPE XL5</p><p class="ql-block"> *导出文本文件</p><p class="ql-block"> kk=""</p><p class="ql-block"> kk1=""</p><p class="ql-block"> GO top</p><p class="ql-block"> DO while .not. EOF()</p><p class="ql-block"> kk1=ALLTRIM(合并)+CHR(13)+CHR(10)</p><p class="ql-block"> SKIP</p><p class="ql-block"> kk=kk+kk1</p><p class="ql-block"> STRTOFILE(kk,"D:\0爱心协会\协会财务收支\0历年收支\&amp;wjm._历年爱协捐款.txt")</p><p class="ql-block"> ENDDO </p><p class="ql-block">ENDFOR </p> <p class="ql-block">vfp如何去除所有空格(包括前、中、后)</p><p class="ql-block">? STRTRAN(" abcd ef g h ijk lmn ", " ", "")</p> <p class="ql-block">*(二)三小兰捐款</p><p class="ql-block">*1.变量 </p><p class="ql-block"> *个人合计变量hj2</p><p class="ql-block"> xm="王小兰"</p><p class="ql-block"> SELECT 捐款人,sum(捐款额) 捐款额,count(捐款人) 捐款次数,Min(捐款时间) 捐款时间起,Max(捐款时间) 捐款时间止 from 历年爱协收入 into array hj2 where 捐款人=xm group by 捐款人 </p><p class="ql-block">*2.汇总 </p><p class="ql-block"> *个人捐款</p><p class="ql-block"> SELECT 捐款时间,捐款人,捐款额,数据,年份 from 历年爱协收入 into dbf 0 where 捐款人=xm &amp;&amp;变量取数,按捐款人</p><p class="ql-block"> SELECT recn() 序号,*,space(100) 合并 from 0 into dbf 1 &amp;&amp;序号 增加字段</p><p class="ql-block"> REPLACE all 合并 with 数据 &amp;&amp;替换 </p><p class="ql-block"> *插入记录 年份合计</p><p class="ql-block"> *年份变量 (年份统计)</p><p class="ql-block"> SELECT 年份,sum(捐款额) 捐款额,count(捐款人) 捐款次数,Min(捐款时间) 捐款时间起,Max(捐款时间) 捐款时间止 from 0 into array hj3 group by 年份 order by 年份</p><p class="ql-block"> *定义变量</p><p class="ql-block"> dime ax[alen(hj3,1)] &amp;&amp;合并变量</p><p class="ql-block"> FOR k=1 to ALEN(hj3,1)</p><p class="ql-block"> ax(k)=xm+ALLTRIM(STR(hj3(k,1)))+"年 捐款"+ALLTRIM(STR(hj3(k,2),10,2))+" 捐次"+ALLTRIM(STR(hj3(k,3)))+"(自"+ALLTRIM(ttoc(hj3(k,4)))+" 至"+ALLTRIM(ttoc(hj3(k,5)))+")"</p><p class="ql-block"> ?ax(k)</p><p class="ql-block"> *插入记录,分年</p><p class="ql-block"> GO top</p><p class="ql-block"> INSERT blank before</p><p class="ql-block"> REPLACE 序号 with k,捐款人 with xm+ALLTRIM(STR(hj3(k,1)))+"年捐",捐款额 with hj3(k,2),合并 with ax(k)</p><p class="ql-block"> ENDFOR </p><p class="ql-block"> *插入记录 合计 </p><p class="ql-block"> GO top</p><p class="ql-block"> INSERT blank before</p><p class="ql-block"> REPLACE 捐款人 with "合计",捐款额 with hj2(2),合并 with xm+"捐款合计"+ALLTRIM(STR(hj2(2),10,2))+"("+ALLTRIM(STR(hj2(3)))+"次捐 "+" 自"+ALLTRIM(ttoc(hj2(4)))+" 至"+ALLTRIM(ttoc(hj2(5)))+")"</p><p class="ql-block">*3.导出</p><p class="ql-block"> *导出电子表 </p><p class="ql-block"> COPY TO D:\0爱心协会\协会财务收支\0历年收支\&amp;xm._历年爱协捐款.xls TYPE XL5</p><p class="ql-block"> *导出文本文件</p><p class="ql-block"> kk=""</p><p class="ql-block"> kk1=""</p><p class="ql-block"> GO top</p><p class="ql-block"> DO while .not. EOF()</p><p class="ql-block"> kk1=ALLTRIM(合并)+CHR(13)+CHR(10)</p><p class="ql-block"> SKIP</p><p class="ql-block"> kk=kk+kk1</p><p class="ql-block"> STRTOFILE(kk,"D:\0爱心协会\协会财务收支\0历年收支\&amp;xm._历年爱协捐款.txt")</p><p class="ql-block"> ENDDO</p> <p class="ql-block">闪闪的红星</p> <p class="ql-block">中国工农红军四号旗一面27.98</p><p class="ql-block">红军斗笠五个109.92</p><p class="ql-block">作战消烟烟饼20个28.8</p><p class="ql-block">28.8+109.92+27.98=166.7元2021.4.20</p> <p class="ql-block">*历年爱协收入2021.4.20</p><p class="ql-block"> CD "D:\0爱心协会\爱心vfp\0"</p><p class="ql-block"> CLOSE DATABASES </p><p class="ql-block"> SET SAFETY OFF</p><p class="ql-block"> SET TALK OFF</p><p class="ql-block"> SET TALK ON</p><p class="ql-block"> SET CENTURY on</p><p class="ql-block"> SET DATE to ymd</p><p class="ql-block"> SET HOURS TO 24</p><p class="ql-block"> CLOSE TABLES all</p><p class="ql-block"> CLEAR</p><p class="ql-block"> DELETE FILE D:\0爱心协会\协会财务收支\0历年收支\*.* &amp;&amp;删除文件</p><p class="ql-block">*一、原始数据 </p><p class="ql-block">*1.建表</p><p class="ql-block">CREATE TABLE D:\0爱心协会\爱心vfp\0\历年爱协收入(总序 int,年序 int,年份 int,月序 int,月份 c(10),数据 c(150),捐款人 c(30),捐款额 n(10,2),捐款时间 time,捐款内容 c(50),转账人 c(50),文本型 c(50),日期型 c(50))</p><p class="ql-block">*2.导入csv文件</p><p class="ql-block"> from D:\0爱心协会\协会财务收支\历年爱协收入.csv type csv fields 总序,年序,年份,月序,月份,数据,捐款人,捐款额,捐款时间,捐款内容,转账人,文本型,日期型</p><p class="ql-block">*二、整体数据</p><p class="ql-block">*1.变量</p><p class="ql-block"> SELECT sum(捐款额),count(捐款人),Min(捐款时间),Max(捐款时间) from 历年爱协收入 into array hj1 &amp;&amp;统计</p><p class="ql-block"> SELECT dist 捐款人 from 历年爱协收入 into array hj2 &amp;&amp;唯一 </p><p class="ql-block">*2.汇总</p><p class="ql-block"> SELECT 捐款人,sum(捐款额) 捐款额,count(捐款人) 捐款次数,Min(捐款时间) 捐款时间起,Max(捐款时间) 捐款时间止 from 历年爱协收入 into dbf 0 group by 捐款人 orde by 捐款人 desc</p><p class="ql-block"> SELECT recn() 序号,*,space(100) 合并 from 0 into dbf 1 </p><p class="ql-block"> *替换</p><p class="ql-block"> REPLACE all 合并 with ALLTRIM(捐款人)+" "+ALLTRIM(STR(捐款额,10,2))+"("+ALLTRIM(STR(捐款次数))+"次捐 自"+ALLTRIM(ttoc(捐款时间起))+" 至 "+ALLTRIM(ttoc(捐款时间止))+")"</p><p class="ql-block"> *插入记录 合计</p><p class="ql-block"> GO top</p><p class="ql-block"> INSERT blank before</p><p class="ql-block"> REPLACE 捐款人 with "合计",捐款额 with hj1(1),捐款次数 with hj1(2),捐款时间起 with hj1(3),捐款时间止 with hj1(4),合并 with "爱协收入合计"+ALLTRIM(STR(hj1(1),10,2))+"("+ALLTRIM(STR(hj1(2)))+"次捐 "+ALLTRIM(STR(ALEN(hj2,1)))+"人捐 "+" 自"+ALLTRIM(ttoc(hj1(3)))+" 至"+ALLTRIM(ttoc(hj1(4)))+")"</p><p class="ql-block">*3.导出</p><p class="ql-block"> *导出电子表</p><p class="ql-block"> wjm=ALLTRIM(STR(year(hj1(4))))+"-"+iif(LEN(ALLTRIM(STR(month(hj1(4)))))=2,ALLTRIM(STR(month(hj1(4)))),"0"+ALLTRIM(STR(month(hj1(4)))))+"-"+iif(LEN(ALLTRIM(STR(day(hj1(4)))))=2,ALLTRIM(STR(day(hj1(4)))),"0"+ALLTRIM(STR(day(hj1(4)))))</p><p class="ql-block"> COPY TO D:\0爱心协会\协会财务收支\0历年收支\&amp;wjm.历年爱协收入.xls TYPE XL5</p><p class="ql-block"> *导出文本文件</p><p class="ql-block"> kk=""</p><p class="ql-block"> kk1=""</p><p class="ql-block"> GO top</p><p class="ql-block"> DO while .not. EOF()</p><p class="ql-block"> kk1=ALLTRIM(合并)+CHR(13)+CHR(10)</p><p class="ql-block"> SKIP</p><p class="ql-block"> kk=kk+kk1</p><p class="ql-block"> STRTOFILE(kk,"D:\0爱心协会\协会财务收支\0历年收支\&amp;wjm.历年爱协收入.txt")</p><p class="ql-block"> ENDDO</p> <p class="ql-block">*二、分年度生成捐款人文件</p><p class="ql-block">*1.唯一捐款人</p><p class="ql-block">SELECT dist 捐款人 from 历年爱协收入 into array jkr where 年份=nf&amp;&amp;捐款人 </p><p class="ql-block">*2.双循环:先年份后捐款人</p><p class="ql-block">*FOR k=1 to ALEN(nf,1) &amp;&amp;年份循环 </p><p class="ql-block"> FOR k=1 to ALEN(jkr,1)&amp;&amp;捐款人循环</p><p class="ql-block"> *1.按捐款人生成dbf</p><p class="ql-block"> SELECT *,space(100) 合并 from 历年爱协收入 into dbf 0 where 捐款人=jkr(k) and 年份=nf </p><p class="ql-block"> *2.计算合计变量</p><p class="ql-block"> SELECT 捐款人,sum(捐款额) 捐款额,count(捐款人) 捐款次数,Min(捐款时间) 捐款时间起,Max(捐款时间) 捐款时间止 from 0 into array hj group by 捐款人</p><p class="ql-block"> *2.计算分月变量</p><p class="ql-block"> SELECT 月份,sum(捐款额) 捐款额,count(捐款人) 捐款次数,Min(捐款时间) 捐款时间起,Max(捐款时间) 捐款时间止 from 0 into array fy group by 月份 order by 月份 </p><p class="ql-block"> *4.生成序号dbf</p><p class="ql-block"> SELECT recn() 序号,* from 0 into dbf 1 order by 捐款时间 desc</p><p class="ql-block"> REPLACE all 合并 with 数据</p><p class="ql-block"> *5.插入分月数据</p><p class="ql-block"> IF RECCOUNT()&lt;&gt;0 &amp;&amp;记录为零 变量为空</p><p class="ql-block"> *定义变量</p><p class="ql-block"> dime ax[alen(fy,1)] &amp;&amp;合并变量</p><p class="ql-block"> FOR ky=1 to ALEN(fy,1)</p><p class="ql-block"> ax(ky)=ALLTRIM(STR(nf))+"年"+ALLTRIM(fy(ky,1))+"月 "+ALLTRIM(jkr(k))+"捐款"+ALLTRIM(STR(fy(ky,2),10,2))+" 捐次"+ALLTRIM(STR(fy(ky,3)))+"(自"+ALLTRIM(ttoc(fy(ky,4)))+" 至"+ALLTRIM(ttoc(fy(ky,5)))+")"</p><p class="ql-block"> GO top</p><p class="ql-block"> INSERT blank before</p><p class="ql-block"> REPLACE 序号 with ky,捐款人 with jkr(k)+ALLTRIM(fy(ky,1))+"月捐",捐款额 with fy(ky,2),合并 with ax(ky)</p><p class="ql-block"> ENDFOR</p><p class="ql-block"> ENDIF</p><p class="ql-block"> *6.插入合计变量</p><p class="ql-block"> GO top</p><p class="ql-block"> INSERT blank before</p><p class="ql-block"> REPLACE 捐款人 with "合计",捐款额 with hj(2),合并 with ALLTRIM(jkr(k))+ALLTRIM(STR(nf))+"年捐款合计"+ALLTRIM(STR(hj(2),10,2))+"("+ALLTRIM(STR(hj(3)))+"次捐 "+"自"+ALLTRIM(ttoc(hj(4)))+" 至"+ALLTRIM(ttoc(hj(5)))+")" </p><p class="ql-block"> *7.导出电子表</p><p class="ql-block"> nf1=ALLTRIM(STR(nf))&amp;&amp;数字转字符</p><p class="ql-block"> xm=ALLTRIM(jkr(k))</p><p class="ql-block"> COPY TO D:\0爱心协会\协会财务收支\0历年收支\&amp;nf1.年收入\&amp;xm._&amp;nf1.年爱协捐款.xls TYPE XL5</p><p class="ql-block"> *导出文本文件</p><p class="ql-block"> kk=""</p><p class="ql-block"> kk1=""</p><p class="ql-block"> GO top</p><p class="ql-block"> DO while .not. EOF()</p><p class="ql-block"> kk1=ALLTRIM(合并)+CHR(13)+CHR(10)</p><p class="ql-block"> SKIP</p><p class="ql-block"> kk=kk+kk1</p><p class="ql-block"> STRTOFILE(kk,"D:\0爱心协会\协会财务收支\0历年收支\&amp;nf1.年收入\&amp;xm._&amp;nf1.年爱协捐款.txt")</p><p class="ql-block"> ENDDO</p><p class="ql-block"> ENDFOR</p>