| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2592 人关注过本帖, 1 人收藏
标题:请教数据替换
取消只看楼主 加入收藏
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
结帖率:73.44%
收藏(1)
已结贴  问题点数:20 回复次数:3 
请教数据替换
现有表1(500行,6列),其中的每个数据值都与表2(24行,3列)的第一列中的某个数据值相等.
现要求表1的第一行的6个值分别与表2的第一列的值相比较,若表1的第一行的第一个值与表2的第一列的某个值相同,则将表2中该值所在行的列2、列3的值写入到结果表中的第一、二列;当表1的第一行的第二个值与表2的第一列的某个值相同,则将表2中该值所在行的列2、列3的值写入到结果表中的第三、四列,依此类推,当表1的第一行的第六个值与表2的第一列的某个值相同,则将表2中该值所在行的列2、列3的值写入到结果表中的第十一、十二列。再依次作表1第二行的比较,直至表1比较完为止。
为说明问题,举例如下
表1的第一行的第一个数为2305,这2305在表2的第一列中的第1行,而表2中2305后面的二个数为1、48,则就把1、48写入到结果表的第一行的第1、2列,表1的第一行的第二个数为1201,这1201在表2的第一列中的第24行,而表2中1201后面的二个数为24、25,则就把24、25写入到结果表的第一行的第3、4列。。。。,表1的第一行的第六个数为1345,这1345在表2的第一列中的第16行,而表2中1345后面的二个数为16、33,则就把16、33写入到结果表的第一行的第11、12列;依此类推,谢谢(表1、表2和替换后的结果表的第一行样式贴上,但贴上后有点变形了,表及程序文件在压缩包中
替换请教.rar (4.23 KB)

                  表1                    表2                                                        结果表                                            
列1    列2    列3    列4    列5    列6    列1    列2    列3    列1    列2    列3    列4    列5    列6    列7    列8    列9    列10    列11    列12
2305    1201    1225    2041    1565    1345    2305    1    48    1    48    24    25    21    28    4    45    11    38    16    33
部分代码如下:
CLEAR
CLOSE  all
SET SAFETY OFF
set talk off
*------------------
SELECT 1
USE 表1
HS1=RECCOUNT()
LS1=FCOUNT()
DIMENSION b1(hs1,ls1)
select * from 表1 into array b1
USE 表2
HS2=RECCOUNT()
LS2=FCOUNT()
DIMENSION b2(hs2,ls2)
select * from 表2 into array b2
*-------------------
USE 结果表
PACK
ZAP
APPEND BLANK
  FOR i=1 TO 23
  *--以下需用替换的代码,但组织不好,请先生指点,谢谢
  
        REPLACE  ('列'+ALLTRIM(STR(i))) WITH  b2(i,1)
        REPLACE  ('列'+ALLTRIM(STR(i+1))) WITH  b2(i,2)
 APPEND BLANK        
  endfor
*-------------------
?'      本次运行结束'
2016-04-09 10:03
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
CREATE CURSOR 结果表 (列1 I, 列2 I, 列3 I, 列4 I, 列5 I, 列6 I,;
                      列01 I, 列02 I, 列03 I, 列04 I, 列05 I, 列06 I,;
                      列07 I, 列08 I, 列09 I, 列10 I, 列11 I, 列12 I)
APPEND FROM 表1.dbf
USE 表2 IN 0
SELECT 表2
INDEX on 列1 TAG 列1
SELECT 结果表
FOR i = 1 TO 6
    cmd = [SET RELATION TO ] + FIELD(i, "结果表") + [ INTO "表2"]
    *SELECT 结果表
    EXECSCRIPT(cmd)
    REPLACE ("列"+PADL(2*i-1,2,"0")) WITH 表2.列2,;
            ("列"+PADL(2*i,  2,"0")) WITH 表2.列3 ALL IN "结果表"
ENDFOR
GO TOP
BROWSE &&FIELDS 列01,列02,列03,列04,列05,列06,列07,列08,列09,列10,列11,列12

先生您好,此段代码可以替换了,但我想将替换后的结果显示作如下改变:原表1中的第一行第一个值2305对应在表2中的值是1、48,且在结果表中这1和48显示为横排,原表1中的第一行第二个值2213对应在表2中的值是2、47,且在结果表中这2和47显示也是横排,即:显示结果为1、48、2、47。。。。
现在要求将原表1中的第一行第一个值2305对应在表2中的值是1、48,且在结果表中这1和48显示为竖排,原表1中的第一行第二个值2213对应在表2中的值是2、47,且在结果表中这2和47显示也是竖排,即:显示结果为
1     2
48    47  。。。。
谢谢先生
2016-04-10 12:05
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
回复 8楼 fdxxhjc
代码作了些修改,但结果不对
CREATE CURSOR 结果表 (列1 I, 列2 I, 列3 I, 列4 I, 列5 I, 列6 I,;
                      列01 I, 列02 I, 列03 I, 列04 I, 列05 I, 列06 I)
APPEND FROM 表1.dbf
USE 表2 IN 0
SELECT 表2
INDEX on 列1 TAG 列1
SELECT 结果表
FOR i = 1 TO 6
    cmd = [SET RELATION TO ] + FIELD(i, "结果表") + [ INTO "表2"]
      EXECSCRIPT(cmd)   
    REPLACE ("列"+PADL(i,2,"0")) WITH 表2.列2  ALL IN "结果表"
     cmd = [SET RELATION TO ] + FIELD(i, "结果表") + [ INTO "表2"]   
     EXECSCRIPT(cmd)
    REPLACE ("列"+PADL(i,2,"0")) WITH 表2.列3  ALL IN "结果表"   
ENDFOR

COPY TO 结果表2
GO TOP
BROWSE &&FIELDS 列01,列02,列03,列04,列05,列06,列07,列08,列09,列10,列11,列12

2016-04-10 12:08
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
回复 10楼 吹水佬
先生是这样的,您真神,谢谢!
2016-04-10 16:51
快速回复:请教数据替换
数据加载中...
 
   



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

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