数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
楼主: 白新岭

[原创]请教vfbpgyfk先生一个编程问题

  [复制链接]
发表于 2021-10-25 22:19 | 显示全部楼层
SELECT 1
USE G:\三角递增法\四生素数表中.DBF ALIAS 四中表
SELECT 2
USE G:\三角递增法\各段四生素数个数细分.DBF ALIAS 四生个数表细分
SELECT 3
USE G:\三角递增法\偶数表新.DBF ALIAS 偶数表新
kssj=SECONDS()
bwjm="偶数唯一表"
For i=65 to 66
      @ 5,12 say i
      wd=bwjm+ALLTRIM(STR(i-1))
      USE IN 3
      USE G:\三角递增法\偶数表新.DBF ALIAS 偶数表新
       SELECT 3
     
       DELETE ALL
       PACK
       FOR j=1 TO INT(i/2)
        @ 15,22 say j
        SELECT  2     
        GO j
        zgs1=总个数
        fgs1=分个数
        SELECT  2
        GO i-j
        zgs2=总个数
        fgs2=分个数
           SELECT 1
           GO zgs1-fgs1+1
               FOR k1=1  TO  fgs1
               A=四中
               jl1=recno()
                 SELECT  1
                 GO zgs2-fgs2+1
                 For k2=1 to fgs2
                 jl2=recno()
                 B=四中
                 C=A+B
                 SELECT 3
                 APPEND BLANK   
                 REPLACE 偶数 WITH C   
                 SELECT 1
                 GO jl2+1
                 ENDFOR
               SELECT 1
               GO jl1+1
             ENDFOR   
          ENDFOR
       SELECT 3
       USE IN 3&&打开,或关闭,那个工作区(或者,写别名)
      
       select * from 偶数表新.dbf DISTINCT INTO table G:\三角递增法\&wd
      USE IN &wd
      SELECT 3
      USE IN  3
    ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
回复 支持 反对

使用道具 举报

发表于 2021-10-26 11:01 | 显示全部楼层
SELECT 1
USE G:\三角递增法\偶数唯一表1.DBF ALIAS 偶唯一表1
SELECT 2
USE G:\三角递增法\无偶数表1.DBF ALIAS 无偶数1
kssj=SECONDS()
For i=1 to 1190476
      @ 5,12 say i
      n=i
      s=0
      IF MOD(n,5)=1
      s=s+30
      ENDIF
      IF MOD(n,5)=2
      s=s+90
      ENDIF
      IF MOD(n,5)=3
      s=s+120
      ENDIF
      IF MOD(n,5)=4
      s=s+180
      ENDIF
      IF MOD(n,5)=0
      s=s+210
      ENDIF
     && wou=INT((n-1)/5)*210+IIF(MOD(n,5)=1,30,0)+IIF(MOD(n,5)=2,90,0)+IIF(MOD(n,5)=3,120,0)+IIF(MOD(n.5)=4,180,0)+IIF(MOD(n,5)=0,210,0)
     wou=INT((n-1)/5)*210+s
    SELECT  1
    A=偶数
         IF A=wou
         SELECT 1
         skip
         LOOP
         ELSE
         SELECT 2
         APPEND BLANK
         REPLACE 无偶 WITH wou
         ENDIF
         
   

ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是在四生素数中项和形成表中,查找那些无解偶数的程序。
回复 支持 反对

使用道具 举报

发表于 2021-10-26 15:05 | 显示全部楼层
SELECT 1
USE G:\三角递增法\偶数唯一表175.DBF ALIAS 偶唯一表175
SELECT 2
USE G:\三角递增法\无偶数表175.DBF ALIAS 无偶数175
kssj=SECONDS()
For i=103571429 to 104761904
      @ 5,12 say i
      n=i
      s=0
      IF MOD(n,5)=1
      s=s+30
      ENDIF
      IF MOD(n,5)=2
      s=s+90
      ENDIF
      IF MOD(n,5)=3
      s=s+120
      ENDIF
      IF MOD(n,5)=4
      s=s+180
      ENDIF
      IF MOD(n,5)=0
      s=s+210
      ENDIF
     && wou=INT((n-1)/5)*210+IIF(MOD(n,5)=1,30,0)+IIF(MOD(n,5)=2,90,0)+IIF(MOD(n,5)=3,120,0)+IIF(MOD(n.5)=4,180,0)+IIF(MOD(n,5)=0,210,0)
     wou=INT((n-1)/5)*210+s
    SELECT  1
    A=偶数
         IF A=wou
         SELECT 1
         skip
         LOOP
         ELSE
         SELECT 2
         APPEND BLANK
         REPLACE 无偶 WITH wou
         ENDIF
         
   

ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是第175个表的处理
回复 支持 反对

使用道具 举报

发表于 2021-10-26 16:11 | 显示全部楼层
无偶175        前连接        无偶176        后连接        无偶177
4351947720        1        4377160800        0        4402154640
4354379160        1        4388752380        0        4408097370
                43.75亿-44亿               
                前重叠区域       
通过,此种计算,获得了第176区间段两个反例。       
回复 支持 反对

使用道具 举报

发表于 2021-10-27 06:35 | 显示全部楼层
SELECT 1
USE G:\三角递增法\四生素数表中.DBF ALIAS 四中表
SELECT 2
USE G:\三角递增法\各段四生素数个数安整周期.DBF ALIAS 四生个数表细分周期
SELECT 3
USE G:\三角递增法\偶数表新.DBF ALIAS 偶数表新
kssj=SECONDS()
bwjm="偶数周期表"
For i=101 to 150
      @ 5,12 say i
      wd=bwjm+ALLTRIM(STR(i-1))
      USE IN 3
      USE G:\三角递增法\偶数表新.DBF ALIAS 偶数表新
       SELECT 3
     
       DELETE ALL
       PACK
       FOR j=1 TO INT(i/2)
        @ 15,22 say j
        SELECT  2     
        GO j
        zgs1=总个数
        fgs1=分个数
        SELECT  2
        GO i-j
        zgs2=总个数
        fgs2=分个数
           SELECT 1
           GO zgs1-fgs1+1
               FOR k1=1  TO  fgs1
               A=四中
               jl1=recno()
                 SELECT  1
                 GO zgs2-fgs2+1
                 For k2=1 to fgs2
                 jl2=recno()
                 B=四中
                 C=A+B
                 SELECT 3
                 APPEND BLANK   
                 REPLACE 偶数 WITH C   
                 SELECT 1
                 GO jl2+1
                 ENDFOR
               SELECT 1
               GO jl1+1
             ENDFOR   
          ENDFOR
       SELECT 3
       USE IN 3&&打开,或关闭,那个工作区(或者,写别名)
      
       select * from 偶数表新.dbf DISTINCT INTO table G:\三角递增法\&wd
      USE IN &wd
      SELECT 3
      USE IN  3
    ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
回复 支持 反对

使用道具 举报

发表于 2021-10-27 16:00 | 显示全部楼层
文件名可以用变量代替么
一直都只学习过单表的简单命令,近期需要从许多个DBF库中按条件抽取一些数据,比如A01.DBF、A02.DBF、A03.DBF、A04.DBF,这样比较规则的文件序列,这块前面的A0可以用变量替代么?


追问:
上面那个我基本能解决了,
temp2='F2012'
FOR i=1 to 12
  IF i<10
  WD=temp2-alltrim(str(0))-alltrim(str(i))
  else
  WD=temp2-alltrim(str(i))
  endif
  ?WD
endfor

现在是想问这个变量WD能直接作为路径么,比如我在G盘下有个F201201到F201212一共12个文档,我要依次打开,能否这样用:
temp2='F2012'
FOR i=1 to 12
  IF i<10
  WD=temp2-alltrim(str(0))-alltrim(str(i))
  else
  WD=temp2-alltrim(str(i))
  endif
  USE G:\WD.DBF
endfor

继续追问:现在是WD这个文档下的某些条件的数据需要拷贝出来,也是要分别拷贝出12个小库,我又加了一个变量FL,但是在SELECT命令中的INTO TABLE时跳出来错误“不能识别的谓语命令”
temp1='O3'
temp2='F2012'
FOR i=1 to 12
  FL=temp1+'-'-alltrim(str(i))
    IF i<10
     WD=temp2-alltrim(str(0))-alltrim(str(i))
    else
     WD=temp2-alltrim(str(i))
    endif
  USE G:\&WD..DBF
  SELECT *;
  FROM &WD.;
  WHERE 'O3'$&WD..分类
  INTO TABLE G:\&FL..DBF
  USE
  USE
endfor

呃,结贴,我以上我自己忘记打分号了
回复 支持 反对

使用道具 举报

发表于 2021-10-27 16:01 | 显示全部楼层
qz="AO"
FOR i=1 TO 4
?qz+ALLTRIM(STR(i))
endf
回复 支持 反对

使用道具 举报

发表于 2021-10-27 16:06 | 显示全部楼层
STR(I)是不是应该改为STR(I,1)?否则,该函数默认是10位宽度输出,拼接起来会变成“A0         1”酱紫。
ALLTRIM已经是去除了空格吧?
可以直接使用Transform函数
?Transform(i)
呃,试验过,以上确实会出现4楼兄弟说的情况
是这样的:如果数值位数是固定的,比如本案例固定1位,就在STR()函数中指定,也少套一个函数,减少代码复杂度;如果数值位数不固定,比如A01-A099,甚至更多,用2楼的方法就很好,省得STR()函数中再套IIF()函数去判断了。
再给看看新问题,路径能不能做变量?
红色代码改成:USE G:\&WD..DBF IN 0。注意:&WD后面有两个圆点。第一个圆点表示宏代换变量名的结束,第二个圆点才是主干名和后缀名的分隔符。加“IN 0”子句是为了把各个表文件分别打开在不同的数据区中,不加的话,所有表文件在同一个区打开,结果就是只有最后一个表文件打开了,其它都没打开。你还可以把整个文件路径都写在一个变量中,然后用名表达式打开,名表达式比宏代换速度快得多。比如:文件=[c:\rr\foxpro\t1.dbf],再用USE (文件)命令就可以打开了。名表达式用的地方很多,比如:REPLACE命令中的字段名部分就可以用名表达式,但SQL命令好象不能用(比如UPDATE-SQL)。我猜测SQL可能是从其它数据库系统移植过来的,而名表达式是VFP自己的东西,所以不配套。
回复 支持 反对

使用道具 举报

发表于 2021-10-27 21:40 | 显示全部楼层
UsE TDatabaseName!]Table | SQLViewName  2
使用 t 数据库名称表 sql 视图名称
[IN nWorkArea | cTableAlias]
在工作区 c 的桌面别名
[ONLINE)[ADMINN][AGAINJ[NOREQUERY
在线广告反对不公平的行为
[nDataSessionNumberl1[NODATA]
N 数据会话号码1无数据
[INDEX IndexFileList |?
索引文件列表
[ORDER [nIndexNumber |
序号
订单[ n 索引号]
N 阶索引号
iDXFileName[TAG] TagName [OF
文件名[标签]标签名[的
CDxFileNName
Cdx 文件名
ASCENDINGIDESCENDDING1T
上升下降
[ALIAS cTableAlias[EXCLUSIVE]
别名 c 表别名[独占]
SHAREDI
分享
INOUPDATE)
出库日期
[CONNSTRING
连接线
cConnectionString i
连接字符串
(cStatementHandleMemvar)
C 语句处理 memvar
用在线翻译获得的信息,强拉硬拽
回复 支持 反对

使用道具 举报

发表于 2021-10-27 22:09 | 显示全部楼层
use in 3
admin
管理员
alias 别名
connstring  连接线
exdusive  突出的
index  索引
nodata  无数据
norequery  无节制的
noupdate 新的
online  在线
order  秩序
shared 共享的
用的在线翻译
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2025-5-19 10:43 , Processed in 0.096418 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表