| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 766 人关注过本帖
标题:姓名按要求过滤问题
只看楼主 加入收藏
dbf永动机
Rank: 2
等 级:论坛游民
威 望:1
帖 子:77
专家分:21
注 册:2022-8-30
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:16 
姓名按要求过滤问题
现有一个dbf文件名为xingming
其中有两列xm1,xm2
张三丰    张三
李四     王五
小丽     小莉
张子默   张了黑
高强     高强
。。。   。。。

需要达到的效果的是找到两列完全不同的姓名行,只要两列有一个字等于(也不考虑汉字位置)就过滤掉,只要完全完全不相等信息,比如以上例子返回:
李四   王五


请问如果写一个prg生成一个查询结果表。
搜索更多相关主题的帖子: 两列 要求 返回 例子 姓名 
2023-09-04 13:43
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:702
专家分:2760
注 册:2018-3-13
收藏
得分:2 
myfll 里有个叫 StrApproach 的计算相似度函数,用它来判断就很简单

程序代码:
Set Library To myfll
Create Cursor test (xm1 V(10), xm2 V(10))
Insert into test Values ('张三丰', '张三')
Insert into test Values ('李四', '王五')
Insert into test Values ('小丽', '小莉')
Insert into test Values ('张子默', '张了黑')
Insert into test Values ('高强', '高强')
Select * from test where StrApproach(xm1, xm2) = 0

这家伙很懒,啥也没留下
2023-09-04 14:23
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1710
专家分:3318
注 册:2012-2-29
收藏
得分:3 
回复 楼主 dbf永动机
简单的方法就是进行单个字符判断,请试一试:
程序代码:
create cursor tt (xm1 v(10), xm2 v(10))
insert into tt values ('张三丰', '张三')
insert into tt values ('李四', '王五')
insert into tt values ('小丽', '小莉')
insert into tt values ('张子默', '张了黑')
insert into tt values ('高强', '高强')

select * from tt where !left(alltrim(xm1),2)$alltrim(xm2) and !substr(alltrim(xm1),3,2)$alltrim(xm2) and !substr(alltrim(xm1),5,2)$alltrim(xm2)

若姓名中字符数不太确定的话,可以加上判断最长的姓名字符串。

[此贴子已经被作者于2023-9-4 14:48编辑过]

2023-09-04 14:42
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:5 
笨方法
程序代码:
CLEAR 
create cursor tt (xm1 v(10), xm2 v(10))
insert into tt values ('张三丰', '张三')
insert into tt values ('李四', '王五')
insert into tt values ('小丽', '小莉')
insert into tt values ('张子默', '张了黑')
insert into tt values ('高强', '高强')
SCAN 
    lCnt = 0
    FOR ln = 1 TO LENC(ALLTRIM(xm1))
        IF SUBSTRC(ALLTRIM(xm1), ln, 1) $ xm2
            lCnt = lCnt + 1
            EXIT 
        ENDIF 
    ENDFOR    
    IF lCnt = 0
        ? xm1, xm2
    ENDIF 
ENDSCAN

坚守VFP最后的阵地
2023-09-04 18:25
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:10 
程序代码:
CLEAR 
create cursor tt (xm1 v(10), xm2 v(10))
insert into tt values ('张三丰', '张三')
insert into tt values ('李四', '王五')
insert into tt values ('小丽', '小莉')
insert into tt values ('张子默', '张了黑')
insert into tt values ('高强', '高强')
SELECT * FROM tt WHERE CHRTRANC(xm1,xm2,"")==xm1
2023-09-04 21:52
dbf永动机
Rank: 2
等 级:论坛游民
威 望:1
帖 子:77
专家分:21
注 册:2022-8-30
收藏
得分:0 
回复 5楼 吹水佬
太厉害了,没想到一句查询语句就可以实现,不过不我是特别懂这个语句的意思,像是把字段替换成空什么的,能解释一下吗?
2023-09-05 08:41
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
试试
BROWSE FOR CHRTRANC(xm1,xm2,"")==xm1

坚守VFP最后的阵地
2023-09-05 09:46
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
回复 6楼 dbf永动机
在xm1中找到xm2中相同的字时就清除掉,如果最后结果xm1还是原来的样子就是所求。
2023-09-05 10:28
dbf永动机
Rank: 2
等 级:论坛游民
威 望:1
帖 子:77
专家分:21
注 册:2022-8-30
收藏
得分:0 
回复 7楼 sdta
这个和吹水佬是一个意思,是可以的
2023-09-05 13:43
dbf永动机
Rank: 2
等 级:论坛游民
威 望:1
帖 子:77
专家分:21
注 册:2022-8-30
收藏
得分:0 
回复 8楼 吹水佬
明白了,谢谢
2023-09-05 13:43
快速回复:姓名按要求过滤问题
数据加载中...
 
   



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

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