请问这个函数如何写
string ls_databuffe
入参
ls_databuffer="12^3|邓廷兰|女|30岁|^00^"
我想做一个函数
输入以上参数后 返回一个数组
a[1]=3
a[2]=邓廷兰
a[3]=女
a[4]=30岁
当然入参是不固定的
也有可能有多个“|”
如 ls_databuffer="12^3|邓廷兰|女|30岁|党员|中国|^00^"等
请问这个函数如何写?
[解决办法]
大至就是这样了:
复制下面的文本到一个 .txt 文件再将其更名为 of_getsarray.srf ,再导入至某PBL 成全局函数即可。
$PBExportHeader$of_getsarray.srf
global type of_getsarray from function_object
end type
forward prototypes
global function integer of_getsarray (string ls_databuffer, ref string ls_data[])
end prototypes
global function integer of_getsarray (string ls_databuffer, ref string ls_data[]);
//====================================================================
// 参数:
// value stringls_databuffer
// referencestringls_data[]
//--------------------------------
// 返回: integer, 即 ls_data[] 数组元数
//--------------------------------
// 2013年09月12日 描述: 解析 ls_databuffer="12^3
[解决办法]
邓廷兰
[解决办法]
女
[解决办法]
30岁
[解决办法]
党员
[解决办法]
中国
[解决办法]
^00^"
//到 ls_data[] 数组 成 ls_data[1]='3', ls_data[2]='邓廷兰', ls_data[3] = '女', ls_data[4] = '30岁', ls_data[5] = '党员' ......
//
//--------------------------------
// 修改历史:
//
//====================================================================
integer li_Ret = 0
int li_b, li_e
string ls_tmp
if isnull(ls_databuffer) then ls_databuffer = ''
ls_tmp = trim(ls_databuffer)
li_b = pos(ls_tmp, '^')
if li_b <= 0 then goto lb_Ret
ls_tmp = mid(ls_tmp, li_b + 1)
li_e = pos(ls_tmp, '^')
if li_e <= 0 then
li_e = len(ls_tmp)//当不存在第二个结束字符 ^ 时,则将结束位数放在最后一位(也就是扫描整个字符串),也可以返回0 直接写成 goto lb_Ret 即可
else
ls_tmp = mid(ls_tmp, 1, li_e - 1)
end if
li_b = pos(ls_tmp, '
[解决办法]
')
do while li_b > 0
ls_data[upperbound(ls_data) + 1] = left(ls_tmp, li_b - 1)
ls_tmp = mid(ls_tmp, li_b + 1)
li_b = pos(ls_tmp, '
[解决办法]
')
loop
if trim(ls_tmp) <> '
[解决办法]
' and trim(ls_tmp) <> '' then ls_data[upperbound(ls_data) + 1] = ls_tmp
li_Ret = upperbound(ls_data)
lb_Ret:
return li_Ret
end function