function RES=String2Array(ARG)
% function RES=String2Array(ARG)
% Обробляє рядок, у якому записано значення елементів вектора у вигляді,
% зручному для MATLAB.
% Наприклад, "1 2 3 5:7 8:0.5:10 -7"
% Аргументи:
%   ARG - початковий рядок
% Результат:
%   RES - кінцевий масив (вектор-рядок)
% Обмеження:
%   1) функція працює лише з першим рядком ARG
%   2) в групах не повинно бути пробілів ("3 : 5" - НЕПРАВИЛЬНО, правильно - "3:5")
% 

% беремо перший рядок з ARG
ARG=ARG(1,:);
% додаємо в кінець рядка символ-ознаку кінця
ARG=[ARG '>'];
% визначаємо розмір рядка
[m,n]=size(ARG);

% створюємо пустий масив-результат
RES=zeros(0,0);

% пропускаємо початкові пробіли
index=1;
while ((index<=n) & (ARG(index)==' ')) index=index+1; end
% якщо дійшли до кінця масиву - виходимо із результатом 0
if (index==n)
    RES=0; return;
else
    ARG=ARG(index:n);
    n=n-index+1;
end

% обробляємо рядок
STARTINDEX=1; pointNumber=0;
for index=1:n
    switch ARG(index)
        % якщо зустріли пробіл чи кінець рядка - виконуємо поточні обчислення
        case {'>',' '}
            ENDINDEX=index-1;
            if (pointNumber==0) RES=[RES str2num(ARG(STARTINDEX:ENDINDEX))];
            elseif (pointNumber==1) RES=[RES T1:str2num(ARG(STARTINDEX:ENDINDEX))];
            elseif (pointNumber==2) RES=[RES T1:T2:str2num(ARG(STARTINDEX:ENDINDEX))];
            end
            STARTINDEX=index+1; pointNumber=0;
        % якщо зустріли двокрапку - необхідно обрахувати поточне число
        case ':'
            ENDINDEX=index-1;
            if (pointNumber==0)
                pointNumber=1;
                T1=str2num(ARG(STARTINDEX:ENDINDEX));
            elseif (pointNumber==1)
                pointNumber=2;
                T2=str2num(ARG(STARTINDEX:ENDINDEX));
            end
            STARTINDEX=index+1;
        % якщо зустріли довільний символ - переходимо до наступного
        otherwise index=index+1;
    end
end

% очищуємо локальні змінні
clear m n index STARTINDEX ENDINDEX pointNumber T1 T2;