注册 登录
编程论坛 VFP论坛

请教一个字符处理的问题

fanjinyu9108 发布于 2025-04-26 14:24, 509 次点击
我的字符串是这样的:(压力:2.5; 材料:铸铁; 管径:250),我需要截取成数组,数组的内容是 2.5  铸铁  250,请问应该怎么弄?其中分号和冒号是固定的
12 回复
#2
cssnet2025-04-26 15:19
dime A1[3]
C1 = "压力:2.5; 材料:铸铁; 管径:250" + ";"
for i=1 to 3
   A1[i] = STREXTRACT(c1, ":", ";", i)
endfor i

想要这样子?

#3
fanjinyu91082025-04-26 17:35
但是如果不知道有几个分号呢?

#4
cssnet2025-04-26 17:49
C1 = "压力:2.5; 材料:铸铁; 管径:250" + ";"
n = OCCURS(";", C1)
dime A1[n]
for i=1 to n
   A1[i] = STREXTRACT(c1, ":", ";", i)
endfor i

我只是随手写个示例。其实,这种问题,你去问DeepSeek可能更快一些!
#5
schtg2025-04-26 18:29
回复 楼主 fanjinyu9108
是这个意思吗?
只有本站会员才能查看附件,请 登录

程序代码:
clear

cstr = "压力:2.5;材料:铸铁;管径:250"
szzs =  alines(arr,cstr,";")
for szs = 1 to szzs
    szz = arr(m.szs)
    arr(m.szs) = substr(alltrim(szz),atc(":",szz) + 2,len(alltrim(szz)) - atc(":",szz))
    ? arr(m.szs)
endfor
#6
fanjinyu91082025-04-28 12:22
好的,非常感谢
#7
fanjinyu91082025-04-28 16:16
实在抱歉,现在问题变成这样了:一串字符,如下 “压力:2.5; 材料:铸铁; 管径:250”,我想经过处理变成2个字符串: "压力, 材料, 管径"   "2.5,铸铁,250",请问用vfp怎么实现?
#8
wengjl2025-04-28 16:27
CLEAR
C1 = ";"+"压力:2.5; 材料:铸铁; 管径:250" + ";"
cstr=""
cvle=""
for i=1 to 3
   cstr=cstr + STREXTRACT(c1,";",":",i) +","
endfor i
for i=1 to 3
   cvle=cvle + STREXTRACT(c1,":",";",i) +","
endfor i
? cstr +cvle
这样行不?
#9
fanjinyu91082025-04-28 19:09
我要的不是cstr +cvle,而是cstr和cvle分别显示,您的方法后面分别显示时后面多了一个逗号
#10
schtg2025-04-28 19:17
回复 7楼 fanjinyu9108
将第5楼的代码简单处理一下,即可得到结果。
只有本站会员才能查看附件,请 登录

程序代码:
clear

cstr = "压力:2.5;材料:铸铁;管径:250"
szzs =  alines(arr,cstr,";")
cstr1 = ""
cstr2 = ""
for szs = 1 to szzs
    szz = arr(m.szs)
    cstr1 = cstr1 + substr(alltrim(szz),1,atc(":",szz) - 1) + iif(szs = szzs,"",",")
    cstr2 = cstr2 + substr(alltrim(szz),atc(":",szz) + 2,len(alltrim(szz)) - atc(":",szz)) + iif(szs = szzs,"",",")
endfor
? cstr1
? cstr2

#11
fanjinyu91082025-04-28 20:38
这个完全符合,非常感谢,看来这些函数我还要认真学习一下


#12
wengjl2025-04-30 07:53
以下是引用schtg在2025-4-28 19:17:40的发言:

将第5楼的代码简单处理一下,即可得到结果。

clear

cstr = "压力:2.5;材料:铸铁;管径:250"
szzs =  alines(arr,cstr,";")
cstr1 = ""
cstr2 = ""
for szs = 1 to szzs
    szz = arr(m.szs)
    cstr1 = cstr1 + substr(alltrim(szz),1,atc(":",szz) - 1) + iif(szs = szzs,"",",")
    cstr2 = cstr2 + substr(alltrim(szz),atc(":",szz) + 2,len(alltrim(szz)) - atc(":",szz)) + iif(szs = szzs,"",",")
endfor
? cstr1
? cstr2

学到了一个小技巧,就是我标红的那一句,谢谢!
#13
csyx2025-05-01 13:24
还可以更精简一丁点儿
程序代码:
cc = '压力:2.5; 材料:铸铁; 管径:250'
Store '' to c1, c2
For ii = 1 to ALines(acc, cc, '')
    cc = Strtran(acc[ii], '', ':')
    c1 = c1 + ',' + GetWordNum(cc, 1, ':')
    c2 = c2 + ',' + GetWordNum(cc, 2, ':')
EndFor
c1 = Ltrim(c1, ',')
c2 = Ltrim(c2, ',')
? c1
? c2
1