标题:取掉多余字符
只看楼主
tjdeming
Rank: 2
等 级:论坛游民
帖 子:351
专家分:49
注 册:2013-3-4
结帖率:87.72%
已结贴  问题点数:20 回复次数:8 
取掉多余字符
有一个表,
1.rar (527 Bytes)
要求:姓名字段的值与XM字段一样没有多余空格.我用了VFP6.0的以下三种命令都不成功,不清楚姓名字段中含了什么字符.

Replace ALL 姓名 With Chrtran(姓名," ","")  
Replace ALL 姓名 With Alltrim(姓名)        
REPLACE  ALL 姓名 WITH STRTRAN(姓名,CHR(9),[])
请求:用命令解决此问题.(禁用REPL ALL 姓名 WITH XM,也不用手工删除重输入.)
)
谢谢!
搜索更多相关主题的帖子: 手工 姓名 
2013-07-27 21:08
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:20 
UPDATE TABNAME SET 姓名=CHRTRANC(ALLTRIM(姓名),[ ],[])
这是一个全角空格字符,2个字节长度,
测试方法
A=[华 军]
B=[华军]
C=CHRTRANC(A,B,[])
?ASC(C)
返回值为41377

还有一种方法,在不知道是何种字符的情况下,替换方法为
?CHRTRANC(A,CHRTRANC(A,B,[]),[])
UPDATE TABNAME SET 姓名=CHRTRANC(ALLTRIM(姓名),CHRTRANC(ALLTRIM(姓名),ALLTRIM(XM),[])

坚守VFP最后的阵地
2013-07-27 21:40
tjdeming
Rank: 2
等 级:论坛游民
帖 子:351
专家分:49
注 册:2013-3-4
得分:0 
回复 2楼 sdta
谢谢,已成功解决.
我在程序中写下列几条命令,以求得姓名字段得到最后是纯姓名
  Replace All 姓名 With Chrtran(姓名," ","")  &&&&&取掉姓名中的空格 替换单个字符
  repl all 姓名 WITH CHRTRANC(ALLTRIM(姓名),[ ],[])  &&&取消全角字符
  Replace All 姓名 With Alltrim(姓名)         &&&去前后空格  
  REPLACE ALL 姓名 WITH STRTRAN(姓名,CHR(9),[])  &&&&替换字符串 CHR(9)是水平定位符号
请审核一下,几条在一起有没有重复或无效命令.


2013-07-27 22:13
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
以下是引用tjdeming在2013-7-27 22:13:21的发言:

谢谢,已成功解决.
我在程序中写下列几条命令,以求得姓名字段得到最后是纯姓名
  Replace All 姓名 With Chrtran(姓名," ","")  &&&&&取掉姓名中的空格 替换单个字符
  repl all 姓名 WITH CHRTRANC(ALLTRIM(姓名),[ ],[])  &&&取消全角字符
  Replace All 姓名 With Alltrim(姓名)         &&&去前后空格  
  REPLACE ALL 姓名 WITH STRTRAN(姓名,CHR(9),[])  &&&&替换字符串 CHR(9)是水平定位符号
请审核一下,几条在一起有没有重复或无效命令.
前面的贴子,不知道楼主是否认真看过,在不知道是什么字符的情况下,最后一种方法是最简单、最有效的方法,不比你写那么多命令行简单吗?有效吗?
编程学的是一种编程方法,关键之处在于思路,没有一个有效的思路,最后编写的代码,将是一团糟。
与其瞎猜,不如寻找一种行之有效的方法,解决编程过程需要解决的问题。

[ 本帖最后由 sdta 于 2013-7-27 22:23 编辑 ]

坚守VFP最后的阵地
2013-07-27 22:19
tjdeming
Rank: 2
等 级:论坛游民
帖 子:351
专家分:49
注 册:2013-3-4
得分:0 
回复 4楼 sdta
用后一种方法,替换结果:不是我所要达到的目的. 我的目的是在姓名字段中取消多余字符,再与XM 字段相比 查找出XM与姓名不同记录.
2013-07-27 23:28
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
以下是引用tjdeming在2013-7-27 23:28:18的发言:

用后一种方法,替换结果:不是我所要达到的目的. 我的目的是在姓名字段中取消多余字符,再与XM 字段相比 查找出XM与姓名不同记录.
你知道姓名字段中都有什么多余的字符?
你前面的方法是解决不了问题的。
解决问题的方法:
用代码方法查找出姓名字段中,都有那些多余的字符,将这些多余的字符生成一个字符串,再用前面最后一种方法解决。
然后再比较同一条记录的姓名与XM的不同。

[ 本帖最后由 sdta 于 2013-7-27 23:47 编辑 ]

坚守VFP最后的阵地
2013-07-27 23:38
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
以下是引用tjdeming在2013-7-27 22:13:21的发言:

谢谢,已成功解决.
我在程序中写下列几条命令,以求得姓名字段得到最后是纯姓名
  Replace All 姓名 With Chrtran(姓名," ","")  &&&&&取掉姓名中的空格 替换单个字符
  repl all 姓名 WITH CHRTRANC(ALLTRIM(姓名),[ ],[])  &&&取消全角字符
  Replace All 姓名 With Alltrim(姓名)         &&&去前后空格  
  REPLACE ALL 姓名 WITH STRTRAN(姓名,CHR(9),[])  &&&&替换字符串 CHR(9)是水平定位符号
请审核一下,几条在一起有没有重复或无效命令.
如果姓名字段的记录中有:,.123等等字符,你这些代码是解决不了问题的。

坚守VFP最后的阵地
2013-07-27 23:49
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
得分:0 
以下是引用tjdeming在2013-7-27 23:28:18的发言:

用后一种方法,替换结果:不是我所要达到的目的. 我的目的是在姓名字段中取消多余字符,再与XM 字段相比 查找出XM与姓名不同记录.
UPDATE TABNAME SET 姓名=CHRTRANC(ALLTRIM(姓名),CHRTRANC(ALLTRIM(姓名),ALLTRIM(XM),[]),[])
2013-07-28 07:10
tjdeming
Rank: 2
等 级:论坛游民
帖 子:351
专家分:49
注 册:2013-3-4
得分:0 
回复 8楼 tlliqi
不用替换的方法,是为了统计输入者的正确率.
2013-07-28 19:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-418075-1-1.html




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

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