//分割符
IF TypeOf(#RecSeparator)= TypeOf(#RecSeparator_S) THEN // 判断变量类型是否是字符串
VariantGet(SRC := #RecSeparator,
DST => #RecSeparator_S);//Variant 读出到字符串
ELSE
VariantGet(SRC := #RecSeparator,
DST => #RecSeparator_a);//Variant 读出到字符
#RecSeparator_S := CHAR_TO_STRING(#RecSeparator_a);//字符转字符串
END_IF;
//结束符
IF TypeOf(#EndSeparator) = TypeOf(#EndSeparator_S) THEN// 判断变量类型是否是字符串
VariantGet(SRC := #EndSeparator,
DST => #EndSeparator_S);//Variant 读出到字符串
ELSE
VariantGet(SRC := #EndSeparator,
DST => #EndSeparator_a);//Variant 读出到字符
#EndSeparator_S := CHAR_TO_STRING(#EndSeparator_a);//字符转字符串
END_IF;
//要转换的字符串
IF TypeOf(#DestStruct) = TypeOf(#DestStruct_S) THEN// 判断变量类型是否是字符串
VariantGet(SRC := #DestStruct,
DST => #DestStruct_S);//Variant 读出到字符串
ELSE
Chars_TO_Strg(Chars := #DestStruct,
pChars := 0,
Cnt := #Cnt,
Strg => #DestStruct_S);//Variant 读出字符转到字符串
END_IF;
//读出数据上限
#I_MAX:=UPPER_BOUND(ARR := #SrcArray, DIM := 1);
//循环把字符串分割到数组里的字符串
FOR #I := 0 TO #I_MAX DO
//读出第一个分割位置
#SEG_WZ := FIND(IN1 := #DestStruct_S, IN2 := #RecSeparator_S);
//第一个分割字符串写入第一个数组
#SrcArray[#I] := LEFT(IN := #DestStruct_S, L := #SEG_WZ - 1);
//删除第一个字符串与分割符
#DestStruct_S := DELETE(IN := #DestStruct_S, L := #SEG_WZ, P := 1);
//判断字符串里有没有分割符
IF #SEG_WZ = 0 THEN
//读出结束字符位置
#END_WZ := FIND(IN1 := #DestStruct_S, IN2 := #EndSeparator_S);
//写最后一个字符串到数组里
#SrcArray[#I] := LEFT(IN := #DestStruct_S, L := #END_WZ - 1);
//删除最一个字符串与结束字符
#DestStruct_S := DELETE(IN := #DestStruct_S, L := #END_WZ, P := 1);
END_IF;
//判断有没有分割字符与结束字符 如果没有结束循环
IF #SEG_WZ = 0 AND #END_WZ = 0 THEN
EXIT;
END_IF;
//记录分割数量
#Count := #I + 1;
END_FOR;
IF TypeOf(#RecSeparator)<> TypeOf(#RecSeparator_S) AND TypeOf(#RecSeparator)<>TypeOf(#RecSeparator_a) THEN
#SPLIT := 1;//分割字符数据类型无效
ELSIF TypeOf(#EndSeparator) <> TypeOf(#EndSeparator_S) AND TypeOf(#EndSeparator) <>TypeOf(#EndSeparator_a) THEN
#SPLIT := 2;//结束字符数据类型无效
ELSIF TypeOf(#DestStruct)<>TypeOf(#DestStruct_S) AND TypeOf(#DestStruct)<>TypeOf(#EndSeparator_a) THEN
#SPLIT := 3;//要侵害字符串数据类型无效
ELSIF #RecSeparator_S=' ' THEN
#SPLIT := 4;//分割字符不能为空
ELSIF #EndSeparator_S=' ' THEN
#SPLIT := 5;//结束字符不能为空
ELSIF #I_MAX<1 THEN
#SPLIT := 6;//待读取数组 SrcArray 过小
ELSE
#SPLIT := 0;
END_IF;
参数
声明
数据类型
存储区
说明
RecSeparator
Input
Variant
I、Q、M、D、L
分隔符(CHAR OR STRING)
EndSeparator
Input
Variant
I、Q、M、D、L
定义完整字符串末尾的分隔符。(CHAR OR STRING)
SrcArray
InOut
Array of STRING
I、Q、M、D、L
已转换字符串的结构
DestStruct
Input
Variant
I、Q、M、D、L
指向待读取数组的指针。(Array of CHAR OR STRING)
Cnt
Input
UInt
I、Q、M、D、L
DestStruct:数类型是字符数组;多少字符转字符串;0:是全部
Ret_Val
Return
Int
I、Q、M、D、L
指令执行结果/错误代码(请参见“Ret_Val 参数”表格)
Count
Output
UDInt
I、Q、M、D、L
找到的字符串数量。
下表列出了“SPLIT”指令的参数
参数 RET_VAL
错误代码*
(W#16#...)
说明
0000
无错误。
0001
分割字符数据类型无效
0002
分割字符数据类型无效
0003
源字符串无效。
0004
分割字符不能为空
0005
结束字符不能为空
0006
数组 SrcArray 过小
SPLIT.txt
SPLIT参数说明.docx
SPLIT.txt 改一下SCL