回 帖 发 新 帖 刷新版面

主题:请教:自动识别数据字符并与另一表对应

请教各位大侠帮忙实现以下功能,非常感谢:
“原表”中的零件分类 为空 而零件号中有分类名称;
希望通过程序自动识别“原表”中的“零件号”为“A类零件”(字典表)及“A类零件”下面的记录(截止到B类零件的记录),在“零件分类”字段中填入“A”(字典表中有对应关系)
“新表”是最终的结果

自动识别数据字符并与另一表对应
===================================
原表:        
零件分类    零件号    数量
    A类零件    
    零件1    1
    零件2    2
    零件3    3
    零件4    4
    零件5    5
    零件6    6
    零件7    7
    零件8    8
    B类零件    
    零件9    9
    零件10    10
    零件11    11
    零件12    12
    零件13    13
    零件14    14
    C类零件    
    零件15    15
    零件16    16
    零件17    17
    零件18    18
    零件19    19
==============================================
新表            
是否汇总    零件分类    零件号    数量
Y           A    A类零件    
            A    零件1    1
            A    零件2    2
            A    零件3    3
            A    零件4    4
            A    零件5    5
            A    零件6    6
            A    零件7    7
            A    零件8    8
Y      B    B类零件    
       B    零件9    9
       B    零件10    10
       B    零件11    11
       B    零件12    12
       B    零件13    13
       B    零件14    14
Y      C    C类零件    
       C    零件15    15
       C    零件16    16
       C    零件17    17
       C    零件18    18
       C    零件19    19
===============================================
字典表    
分类代码    分类名称
A    A类零件
B    B类零件
C    C类零件
D    D类零件

回复列表 (共7个回复)

沙发

USE 原表
COPY TO 新表
USE 新表
分类=left(零件号,1)
FOR i=1 to RECCOUNT()
    GO i
    IF 零件号="B类零件"
        分类="B"
    endif
    IF 零件号="C类零件"
        分类="C"
    endif
    IF 零件号="D类零件"
        分类="D"
    endif
    REPLACE 零件分类 with 分类
NEXT

板凳

非常感谢 我测试了 比较好 可以实现我的目的;
但是没有用到字典库,万一分类一变化,就得修改程序了
继续请教哪位老师指导一下,能用到字典库,能否用简单的SQL语句实现,谢谢了

3 楼

USE 字典表 in 2
USE 旧表
COPY TO 新表
USE 新表 EXCLUSIVE
ALTER TABLE 新表 ADD COLUMN 是否汇总 C(1) NULL
分类=字典表.分类代码
REPLACE 是否汇总 with "Y"
skip in 2
FOR i=1 to RECCOUNT()
    GO i
    IF ALLTRIM(零件号)=ALLTRIM(字典表.分类名称)
        分类=字典表.分类代码
         REPLACE 是否汇总 with "Y"
        IF !EOF(2)
            skip in 2
        ELSE
            USE IN 2
        ENDIF 
    ENDIF 
    REPLACE 零件分类 with 分类
NEXT

4 楼


非常感谢qjbzjp老师的指导
您给我帮大忙了
还想再请您帮忙完善:
如何判别 “新表”中的分类是否都替换成“字典表”中都分类,即检测新表中的分类没有包含字典表中的全部分类(一般情况下字典表中都分类应该每一个都在新表中,就怕新表中的分类名称不规范,这样就替换不了,但是最好能用语句提醒出来:哪个分类没有被替换),谢谢了

5 楼

有两条命令是多余的。

USE 字典表 in 2
USE 旧表
COPY TO 新表
USE 新表 EXCLUSIVE
ALTER TABLE 新表 ADD COLUMN 是否汇总 C(1) NULL
分类=字典表.分类代码
*REPLACE 是否汇总 with "Y"  &&多余
*skip in 2                  &&多余
FOR i=1 to RECCOUNT()
    GO i
    IF ALLTRIM(零件号)=ALLTRIM(字典表.分类名称)
        分类=字典表.分类代码
         REPLACE 是否汇总 with "Y"
        IF !EOF(2)
            skip in 2
        ELSE
            USE IN 2
        ENDIF 
    ENDIF 
    REPLACE 零件分类 with 分类
NEXT

    上述代码也是不完美的,存在很大的缺陷。例如旧表中的零件号不是按“A类零件”、“B类零件”、“C类零件”、“D类零件”的顺序排列,就会出现大问题。不会有不被转换的情况出现,而是出现错误转换。
       
    这些代码只能给楼主提供一点编程思路。

6 楼

修正了代码存在的缺陷,增了检测未置换警示。

SET EXACT ON
USE 字典表 in 2
USE 旧表
COPY TO 新表
USE 新表 EXCLUSIVE
ALTER TABLE 新表 ADD COLUMN 是否汇总 C(1) NULL
FOR i=1 to RECCOUNT()
    GO i
    IF RIGHT(ALLTRIM(新表.零件号),6)=RIGHT(ALLTRIM(字典表.分类名称),6)
        SELECT 字典表
        LOCATE for ALLTRIM(字典表.分类名称)=ALLTRIM(新表.零件号)
        SELECT 新表
        分类=字典表.分类代码
        REPLACE 新表.是否汇总 with "Y",新表.零件分类 with 分类
    ELSE     
        REPLACE 新表.零件分类 with 分类
    ENDIF 
NEXT
FOR i=1 to RECCOUNT(2)
    GO i in 2
    x=ALLTRIM(字典表.分类代码)
    LOCATE for ALLTRIM(新表.零件分类)=x
    IF !FOUND()
        MESSAGEBOX(ALLTRIM(字典表.分类名称)+"未被置换!","警告!")
    ENDIF
NEXT

7 楼


相当感谢 qjbzjp 老师
相当佩服 qjbzjp 老师

我来回复

您尚未登录,请登录后再回复。点此登录或注册