注册 登录
编程论坛 VFP论坛

判断一个字符串是否在一组字符串中,得如何写代码

自强不西 发布于 2020-12-01 14:29, 4779 次点击
各位老师,近期领导安排了一个字符串的大批量数据判断,如果按alltrim(字符串字段)==标准字符串字段,则程序码太多,有没有办法简化。具体事例如下:
判断字段,是否等于"E2219","A2065","E0249","E5241","A2284",我的程序码为
where alltrim(字符串字段)=="E2219" or alltrim(字符串字段)=="A2065" or alltrim(字符串字段)=="E0249" or alltrim(字符串字段)=="E5241" or alltrim(字符串字段)=="A2284"
这段代码,有没有办法简化,请各位老师指教!
21 回复
#2
sdta2020-12-01 14:45
不同的数据,判断方法不一样。上传相关数据!
#3
schtg2020-12-01 14:55
请试一试
inlist(alltrim(字符串字段),"E2219","A2065","E0249","E5241","A2284")
#4
自强不西2020-12-01 15:14
回复 2楼 sdta
只有本站会员才能查看附件,请 登录
#5
sdta2020-12-01 15:41
表中数据格式与一楼的问题好像不是一会事,请楼主说明到底是什么情况。
#6
吹水佬2020-12-01 16:35
s = "E2219,A2065,E0249,E5241,A2284"
SELECT * FROM gys WHERE AT(ALLTRIM(gysbh),s)>0
#7
schtg2020-12-01 17:34
回复 4楼 自强不西
是这个意思吗?理解对否?
只有本站会员才能查看附件,请 登录

#8
自强不西2020-12-02 08:51
以下是引用吹水佬在2020-12-1 16:35:38的发言:

s = "E2219,A2065,E0249,E5241,A2284"
SELECT * FROM gys WHERE AT(ALLTRIM(gysbh),s)>0


版主您好!我试了下运行的程序,基本上能解决我的问题,因赋值s的字段过长,系统又出现了“命令中含有不能识别的短语或关键字”,麻烦给看看咋回事。具体s的赋值如下:

s = "W0027、A0141、A0525、A0680、A1254、A1063、A0100、A1197、A1218、A1282、A0038、W0061、A1857、A1978、A1287、M0295、W0308、A0496、A1307、A1201、A7583、A1530、A6360、A0378、Y0423、A0396、Y0188、Y0354、W0102、A0288、W0162、A0197、A0516、A0407、A0948、W0287、A0984、W0110、A6148、A1383、Y0394、A7554、A0066、A1022、M0001、A7648、A2079、A2077、W0093、A1239、A6024、A6172、A6137、A7129、A1842、A6086、A2047、A2134、A0538、A6323、A1232、W0478、A7507、A9937、A9933、Y0401、W0041、S0160、S0312、A2064、A9936、A1178、A9532、A7508、S0695、W0016、A7558、A7674、N0599、A1572、A7556、W0456、A1573、A6132、A7108、A0305、W0148、A7526、A7509、N0453、A7572、A1137、A2273、Y0423、W0128、W0047、W0105、A0613、W0122、A0592、A0139、W0146、H1895、W0112、A1552、W0114、M0312、W0163、W0283、W0056、W0116、A1738、W0066、A1637、A1109、A0520、A0224、A1027、A0985、A1385、A1580、A1728、A1357、A6014、W0064、W0145、A7583、A1183、A0328、A6006、A6095、A1083、A1026、A1680、A1102、W0092、A0101、W0086、W0100、A1594、A5007、A0138、W0095、A1986、A1238、W0077、W0044、A1350"
#9
吹水佬2020-12-02 09:38
回复 8楼 自强不西
TEXT TO s TEXTMERGE NOSHOW PRETEXT 15
    W0027、A0141、A0525、A0680、A1254、A1063、A0100、A1197、A1218、A1282、A0038、W0061、
    A1857、A1978、A1287、M0295、W0308、A0496、A1307、A1201、A7583、A1530、A6360、A0378、
    Y0423、A0396、Y0188、Y0354、W0102、A0288、W0162、A0197、A0516、A0407、A0948、W0287、
    A0984、W0110、A6148、A1383、Y0394、A7554、A0066、A1022、M0001、A7648、A2079、A2077、
    W0093、A1239、A6024、A6172、A6137、A7129、A1842、A6086、A2047、A2134、A0538、A6323、
    A1232、W0478、A7507、A9937、A9933、Y0401、W0041、S0160、S0312、A2064、A9936、A1178、
    A9532、A7508、S0695、W0016、A7558、A7674、N0599、A1572、A7556、W0456、A1573、A6132、
    A7108、A0305、W0148、A7526、A7509、N0453、A7572、A1137、A2273、Y0423、W0128、W0047、
    W0105、A0613、W0122、A0592、A0139、W0146、H1895、W0112、A1552、W0114、M0312、W0163、
    W0283、W0056、W0116、A1738、W0066、A1637、A1109、A0520、A0224、A1027、A0985、A1385、
    A1580、A1728、A1357、A6014、W0064、W0145、A7583、A1183、A0328、A6006、A6095、A1083、
    A1026、A1680、A1102、W0092、A0101、W0086、W0100、A1594、A5007、A0138、W0095、A1986、
    A1238、W0077、W0044、A1350
ENDTEXT
? s
#10
sdta2020-12-02 12:02
以下是引用自强不西在2020-12-2 08:51:36的发言:



版主您好!我试了下运行的程序,基本上能解决我的问题,因赋值s的字段过长,系统又出现了“命令中含有不能识别的短语或关键字”,麻烦给看看咋回事。具体s的赋值如下:

s = "W0027、A0141、A0525、A0680、A1254、A1063、A0100、A1197、A1218、A1282、A0038、W0061、A1857、A1978、A1287、M0295、W0308、A0496、A1307、A1201、A7583、A1530、A6360、A0378、Y0423、A0396、Y0188、Y0354、W0102、A0288、W0162、A0197、A0516、A0407、A0948、W0287、A0984、W0110、A6148、A1383、Y0394、A7554、A0066、A1022、M0001、A7648、A2079、A2077、W0093、A1239、A6024、A6172、A6137、A7129、A1842、A6086、A2047、A2134、A0538、A6323、A1232、W0478、A7507、A9937、A9933、Y0401、W0041、S0160、S0312、A2064、A9936、A1178、A9532、A7508、S0695、W0016、A7558、A7674、N0599、A1572、A7556、W0456、A1573、A6132、A7108、A0305、W0148、A7526、A7509、N0453、A7572、A1137、A2273、Y0423、W0128、W0047、W0105、A0613、W0122、A0592、A0139、W0146、H1895、W0112、A1552、W0114、M0312、W0163、W0283、W0056、W0116、A1738、W0066、A1637、A1109、A0520、A0224、A1027、A0985、A1385、A1580、A1728、A1357、A6014、W0064、W0145、A7583、A1183、A0328、A6006、A6095、A1083、A1026、A1680、A1102、W0092、A0101、W0086、W0100、A1594、A5007、A0138、W0095、A1986、A1238、W0077、W0044、A1350"

为什么要这样赋值,如果数据发生了变化,你又如何处理?
#11
wengjl2020-12-02 12:42
按照附件,只要对字段gysbh进行循环就可以了
#12
吹水佬2020-12-02 13:57
也可以将这个字符串的子串放到表里来比对,这样效果会更好。
#13
自强不西2020-12-02 14:00
回复 10楼 sdta
因为这些字符串都是一些供应商的业务代码,属于这些供应商供的货划分为一类。
#14
自强不西2020-12-02 14:01
回复 12楼 吹水佬
好的,谢谢版主!
#15
自强不西2020-12-02 14:01
回复 11楼 wengjl
多谢!
#16
mywisdom882020-12-03 08:40
把上面的字符串,单独存在一个表上,动态拼接;
就是,不知道,inlist()或者 at()中的参数,能不能这么大。。。
#17
radiofan2020-12-03 12:38
以下是引用mywisdom88在2020-12-3 08:40:20的发言:

把上面的字符串,单独存在一个表上,动态拼接;
就是,不知道,inlist()或者 at()中的参数,能不能这么大。。。


aa = FILETOSTR("文件名")
?INLIST(aa,"字符串",aa)
试试看就知道了!
#18
自强不西2020-12-03 21:43
回复 9楼 吹水佬
版主您好!能否介绍下TEXT……ENDTEXT的用法,没看懂这个是啥意思。
#19
吹水佬2020-12-04 10:52
回复 18楼 自强不西
我也是看VFP9的帮助
#20
吹水佬2020-12-04 10:56
这么多相关联的数据放在一个字符串来处理不好,不好维护,运行效率也低,最好放在一个表里。
#21
chxking2020-12-04 11:08
应该将S字串集做成一个表,然后利用Select cnt(*) from S字串表 where 。。。。。
#22
sdta2021-03-14 19:41
供货商 商品代码 放在表的备注字段中备用
1