Не найдя что то типа explode в codesys наваял следующее. Т.к. не очень с указателями дружен, не хочу допустить ошибок, особенно с памятью. Вроде бы работает. Подскажите что может пойти не так:
PHP код:
VAR_INPUT
_str:STRING(1024);
arr_max_elem_lenth:BYTE;
END_VAR
VAR
el_cnt,char_cnt:INT;
pt_source,pt_dest:POINTER TO BYTE;
elem_len: INT;
END_VAR
PHP код:
pt_source:=ADR(_str);
el_cnt:=1;
pt_dest:= ADR(temp[el_cnt]);
elem_len:=0;
char_cnt:=0;
IF _str<>'' THEN
WHILE (pt_source^<>0) AND (el_cnt<30) DO (*до конца строки и не превышая массива*)
IF (pt_source^=124) THEN(*если найден разделитель*)
pt_dest^:=0;(*терминация строки элемента массива*)
el_cnt:=el_cnt+1;pt_dest:= ADR(temp[el_cnt]);(*ставим указатель на следующий элемент*)
char_cnt:=0;
ELSE(*иначе побайтно копируем*)
IF (char_cnt<arr_max_elem_lenth) AND (el_cnt>1) THEN(*чтобы не переполнить результирующий элемент*)
pt_dest^:=pt_source^;(*копируем символ*)
pt_dest:=pt_dest+1;
char_cnt:=char_cnt+1;
END_IF;
END_IF;
pt_source:=pt_source+1;(*Следующий байт*)
END_WHILE;
END_IF;