再问个菜问题,如何分割字符串

gthboy 2009-01-22 08:15:38
比如有个长字符串,'64,546876,574674456,456,237,24333'按“,”分割成64、546876、574674456、456、237、24333这样几个短字符串,分隔符的位置和个数都不固定,如何分割?我看了PB的函数,想不到办法,请各位帮忙,谢谢!
...全文
206 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
gthboy 2009-01-22
  • 打赏
  • 举报
回复
谢谢了,只能慢慢习惯PB的编程风格了,哎!
liubocy 2009-01-22
  • 打赏
  • 举报
回复
string ls_str[], ls_tmp
long ll_len, i

ls_tmp = '64,546876,574674456,456,237,24333' + ','
do while pos( ls_tmp, ',' ) > 0
i ++
ls_str[i] = left( ls_tmp, pos( ls_tmp, ',' ) - 1 )
ls_tmp = mid( ls_tmp, pos( ls_tmp, ',' ) + 1 )
loop

//会把64、546876、574674456、456、237、24333这6个字符串存进数组ls_str[]

for i = 1 to upperbound(ls_str)
messagebox( '', ls_str[i] )
next
dawugui 2009-01-22
  • 打赏
  • 举报
回复
如果是PB,使用pos , left , mid 加数组来实现.

string sz[]
string s = '64,546876,574674456,456,237,24333'
int i = 0
DO WHILE pos(s , ',') > 0
i = i + 1
sz[i] = left(s , pos(s , ',') - 1)
s = mid(s , pos(s , ',') + 1 , len(s))
LOOP
i = i + 1
sz[i] = s
dawugui 2009-01-22
  • 打赏
  • 举报
回复
如果是SQL SERVER,使用字符串分解函数.
/*
功能:实现split功能的函数
*/

create function dbo.fn_split
(
@inputstr varchar(8000),
@seprator varchar(10)
)
returns @temp table (a varchar(200))
as

begin
declare @i int

set @inputstr = rtrim(ltrim(@inputstr))
set @i = charindex(@seprator, @inputstr)

while @i >= 1
begin
insert @temp values(left(@inputstr, @i - 1))

set @inputstr = substring(@inputstr, @i + 1, len(@inputstr) - @i)
set @i = charindex(@seprator, @inputstr)
end

if @inputstr <> '\'
insert @temp values(@inputstr)

return
end
go

--调用

declare @s varchar(1000)

set @s='64,546876,574674456,456,237,24333'

select * from dbo.fn_split(@s,',')

drop function dbo.fn_split

/*
a
----
64
546876
574674456
456
237
24333

(所影响的行数为 6 行)

*/

1,080

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧