| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1627 人关注过本帖, 1 人收藏
标题:请教只将符合条件的写入到指定文件
取消只看楼主 加入收藏
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
结帖率:73.44%
收藏(1)
已结贴  问题点数:20 回复次数:12 
请教只将符合条件的写入到指定文件
先生好,要将1——12这12个数分成三组,第一组3个数,第二组4个数,第三组5个数,且要求每组的和分别是26,这问题编程后运行下来着实让我吓一跳,因运行后将结果写入到指定文件时,会使指定文件的大小超过2G且还未算完,但这写入指定文件的记录中有许多是有重复数值的,我的要求是这三组共12个值分别是1——12这12个数的不重不漏,所以请教修改代码,谢谢,代码如下(表文件和PRG文件均在附件中):
请教先生.rar (1.63 KB)

CLEAR
CLOSE  all
SET SAFETY OFF
 CREATE TABLE 横向搜索表(列1 N(20))
     FOR X = 2 TO  12  
    ALTER table 横向搜索表 ADD ('列'+TRANSFORM(X)) N(20)
    ENDFOR
*----------------------   
USE 原表
HS=RECCOUNT()
Dimension YB(HS)
select * from 原表 into array YB
*------------------------------------
USE 横向搜索表
  FOR H1=1 TO  hs
      b=Yb(h1)         
    FOR H2=1 TO hs
        c=Yb(h2)
        FOR H3=1 TO hs
            e=Yb(h3)        
           FOR H4=1 TO  hs
              f=Yb(h4)         
             FOR H5=1 TO  HS
                 g=Yb(h5)         
                FOR H6=1 TO hs
                   i=Yb(h6)
                  FOR H7=1 TO hs
                      j=Yb(h7)        
                    FOR H8=1 TO  hs  
                        k=Yb(h8)              
                      FOR H9=1 TO  HS
                          l=Yb(h9)
         *---------     
           a = 26-b-c                          
           d = 26-e-f-g
           h = 26-i-j-k-l                  
         *-----------                 
               IF  1<=a AND a<=12  AND  1<=d AND d<=12    AND 1<=h AND h<=12   
                     &&--在这里想加进代码,使得a、b、......、k、l这12个字母取得的值正好是1——12这12个数的不重复不遗漏的情形。                     
                                        APPEND BLANK                                    
                                        REPLACE  列1 WITH  a
                                        REPLACE  列2 WITH  b
                                        REPLACE  列3 WITH  c  
                                        REPLACE  列4 WITH  d
                                        REPLACE  列5 WITH  e
                                        REPLACE  列6 WITH  f
                                        REPLACE  列7 WITH  g
                                        REPLACE  列8 WITH  h
                                        REPLACE  列9 WITH  i
                                        REPLACE  列10 WITH  j
                                        REPLACE  列11 WITH  k
                                        REPLACE  列12 WITH  l
                      ELSE     
                     LOOP      
                ENDIF  
   *^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   
          ENDFOR
         ENDFOR   
        ENDFOR        
       ENDFOR
      ENDFOR
     ENDFOR
    ENDFOR
   ENDFOR
 ENDFOR
* ##################################################################
 MESSAGEBOX('本 次 运 行 结 束 !!',64,'信息提示')
 DELETE FILE *.BAK
QUIT

搜索更多相关主题的帖子: 记录 
2015-05-24 08:17
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
回复 3楼 tlliqi
运行未完成被写入的文件已达到2G就提示文件过大而自动停止运行了
2015-05-24 08:55
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
以下是引用吹水佬在2015-5-24 15:42:27的发言:

分表保存
哦,先生可否帮我插入代码,边搜索边检验,只把不重复不遗漏的记录写入到新表中,谢谢先生
2015-05-24 16:10
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
以下是引用吹水佬在2015-5-24 17:08:24的发言:

是不是12列都相同的记录才算“有重复”? 看不出有重复。
先生,像:12、11、3;6、7、9、4;1、2、5、8、10这样就算不重复不遗漏。而像:12、11、3;6、7、9、4;1、2、4、9、10这样因9用了二次就算重复或者说5没用到就算遗漏了,谢谢先生
2015-05-24 17:38
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
回复 9楼 fdxxhjc
先生也就是说重复的不能出现一次及以上
2015-05-24 17:45
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
回复 11楼 吹水佬
先生我的思路是:有a+b+c=26、d+e+f+g=26、h+i+j+k+l=26,用解方程组的方法可得:a = 26-b-c ; d = 26-e-f-g ; h = 26-i-j-k-l   。当其余9个字母循环一次且控制a、d、g三个字母大于等于1而又小于等于12时,必定能得到前面提到的三组值的和分别为26,但这其中必有许多的情况是有重复的,当能将已算得的且有重复的去掉后再写入到新表,问题就解决了,谢谢先生  
2015-05-25 07:53
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
以下是引用fdxxhjc在2015-5-25 07:53:59的发言:

先生我的思路是:有a+b+c=26、d+e+f+g=26、h+i+j+k+l=26,用解方程组的方法可得:a = 26-b-c ; d = 26-e-f-g ; h = 26-i-j-k-l   。当其余9个字母循环一次且控制a、d、g三个字母大于等于1而又小于等于12时,必定能得到前面提到的三组值的和分别为26,但这其中必有许多的情况是有重复的,当能将已算得的且有重复的去掉后再写入到新表,问题就解决了,谢谢先生  
我这里所说的思路前面几步在我的代码中已能达到,只有将无重复的写入到新表没能做到,请先生指点,谢谢
2015-05-25 07:56
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
回复 11楼 吹水佬
先生您好,我对代码作了修改,现在的关键是卡在比较这12个数中有否重复的了,请您帮我修改的位置在代码的注释中,谢谢
CLEAR
CLOSE  all
SET SAFETY OFF
 CREATE TABLE 横向搜索表(A1 N(20))
     FOR X = 2 TO  12  
    ALTER table 横向搜索表 ADD ('A'+TRANSFORM(X)) N(20)
    ENDFOR
*----------------------   
USE 原表
HS=RECCOUNT()
Dimension YB(HS)
select * from 原表 into array YB
*------------------------------------
USE 横向搜索表
  FOR H1=1 TO  hs
      列2=Yb(h1)         
    FOR H2=1 TO hs
        列3=Yb(h2)
        FOR H3=1 TO hs
            列5=Yb(h3)        
           FOR H4=1 TO  hs
              列6=Yb(h4)         
             FOR H5=1 TO  HS
                 列7=Yb(h5)         
                FOR H6=1 TO hs
                   列9=Yb(h6)
                  FOR H7=1 TO hs
                      列10=Yb(h7)        
                    FOR H8=1 TO  hs  
                        列11=Yb(h8)              
                      FOR H9=1 TO  HS
                          列12=Yb(h9)
         *---------     
           列1 = 26-列2-列3                        
           列4 = 26-列5-列6-列7
           列8 = 26-列9-列10-列11-列12                  
         *-----------                 
               IF  0>= 列1 OR  列1>=13  OR  0>=列4 OR 列4>=13  OR 0>=列8 OR 列8>=13   
                  LOOP      
               ENDIF  
             *888888888888888888888888888888888888888-----------------以下“ 888888888”之间的几行代码是检验列1——列12的12个数中有否重复,若有重复则返回,若无重复则写入到“横向搜索表”
               IF 列i==列j   &&  本身除外!               
                  LOOP
                  ELSE
               ENDIF                                    
             *888888888888888888888888888888888888888
                                                      
                                        APPEND BLANK                                    
                                        REPLACE  A1 WITH  列1
                                        REPLACE  A2 WITH  列2
                                        REPLACE  A3 WITH  列3  
                                        REPLACE  A4 WITH  列4
                                        REPLACE  A5 WITH  列5
                                        REPLACE  A6 WITH  列6
                                        REPLACE  A7 WITH  列7
                                        REPLACE  A8 WITH  列8
                                        REPLACE  A9 WITH  列9
                                        REPLACE  A10 WITH  列10
                                        REPLACE  A11 WITH  列11
                                        REPLACE  A12 WITH  列12                    
   *^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   
          ENDFOR
         ENDFOR   
        ENDFOR        
       ENDFOR
      ENDFOR
     ENDFOR
    ENDFOR
   ENDFOR
 ENDFOR
* ##################################################################
 MESSAGEBOX('本 次 运 行 结 束 !!',64,'信息提示')
 DELETE FILE *.BAK
QUIT
2015-05-25 09:58
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
以下是引用吹水佬在2015-5-25 11:18:18的发言:

将 列1....列12 放到数组,排序一下,重复的就排在一起。
先生我想用边运行边检验,“检验不符时跳过,检验符合时写入”这样的模式,谢先生指点
2015-05-25 11:42
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
以下是引用吹水佬在2015-5-25 11:55:27的发言:

 
就是这段代码
dime a列[12]
for i = 1 to 12
    a列 = eval("列"+tran(i))
endfor
asort(a列)
for i = 1 to 11
    if a列 == a列
        exit
    endif
endfor
rele a列
if i < 12
   ** 有重复
endif
先生我将您给的代码插入我原来的代码行(两行“88888888888888”之间部分),运行后还有重复的记录,是否是我插入的位置不对(插入后的代码下附:)
CLEAR
CLOSE  all
SET SAFETY OFF
 CREATE TABLE 横向搜索表(A1 N(20))
     FOR X = 2 TO  12  
    ALTER table 横向搜索表 ADD ('A'+TRANSFORM(X)) N(20)
    ENDFOR
*----------------------   
USE 原表
HS=RECCOUNT()
Dimension YB(HS)
select * from 原表 into array YB
*------------------------------------
USE 横向搜索表
  FOR H1=1 TO  hs
      列2=Yb(h1)         
    FOR H2=1 TO hs
        列3=Yb(h2)
        FOR H3=1 TO hs
            列5=Yb(h3)        
           FOR H4=1 TO  hs
              列6=Yb(h4)         
             FOR H5=1 TO  HS
                 列7=Yb(h5)         
                FOR H6=1 TO hs
                   列9=Yb(h6)
                  FOR H7=1 TO hs
                      列10=Yb(h7)        
                    FOR H8=1 TO  hs  
                        列11=Yb(h8)              
                      FOR H9=1 TO  HS
                          列12=Yb(h9)
         *---------     
           列1 = 26-列2-列3                        
           列4 = 26-列5-列6-列7
           列8 = 26-列9-列10-列11-列12                  
         *-----------                 
               IF  0>= 列1 OR  列1>=13  OR  0>=列4 OR 列4>=13  OR 0>=列8 OR 列8>=13   
                  LOOP      
               ENDIF  
*888888888888888888888888888888888888888-----------------以下“ 888888888”之间的几行代码是检验列1——列12的12个数中有否重复,若有重复则返回,若无重复则写入到“横向搜索表”
      dime a列[12]
        for i = 1 to 12
              a列[i] = eval("列"+tran(i))
        endfor
        asort(a列)
  for i = 1 to 11
    if a列[i] == a列[i+1]
        exit
    endif
  endfor
  rele a列
 if i < 12
   ** 有重复
 endif                             
*888888888888888888888888888888888888888
                                                      
                                        APPEND BLANK                                    
                                        REPLACE  A1 WITH  列1
                                        REPLACE  A2 WITH  列2
                                        REPLACE  A3 WITH  列3  
                                        REPLACE  A4 WITH  列4
                                        REPLACE  A5 WITH  列5
                                        REPLACE  A6 WITH  列6
                                        REPLACE  A7 WITH  列7
                                        REPLACE  A8 WITH  列8
                                        REPLACE  A9 WITH  列9
                                        REPLACE  A10 WITH  列10
                                        REPLACE  A11 WITH  列11
                                        REPLACE  A12 WITH  列12                    
   *^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   
          ENDFOR
         ENDFOR   
        ENDFOR        
       ENDFOR
      ENDFOR
     ENDFOR
    ENDFOR
   ENDFOR
 ENDFOR
* ##################################################################
 MESSAGEBOX('本 次 运 行 结 束 !!',64,'信息提示')
 DELETE FILE *.BAK
QUIT
2015-05-25 13:59
快速回复:请教只将符合条件的写入到指定文件
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020906 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved