slinger
4
All posts from slinger
  slinger in slinger,

Разбор строки на QPILE

На вход подается строка, разделенная символом ",". Считываются все значения между запятыми.

Применяется при работе с файлами. Далее на основе данного кода будет создан стат лист, который пишет сделки в файл.

 

PORTFOLIO_EX разбор строки;
DESCRIPTION разбираем строку;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST FIRMID;

PROGRAM


client_code="SPBFUT" 'имя клиента писать именно так.
firm_id="SPBFUTXXXXX" 'идентификтор фирмы. это счет наверно. 



NEW_GLOBAL("GLOB","")' флаг для выдачи сообщений
NEW_GLOBAL("log_string_num","0")' переменная для добавления новой строчки в таблицу логов

stroka="катер,ваня,бухой,курица"
dlin_strok=len(stroka)' определяем длину строки


temp_poz=0' положение временной позиции. нумерация начинается с 1
poz_map=create_map()' создаем массив позиций найденных запятых
i=1' переменная для индекса мап массива со значениями позиций запятыж

for cursor from 0 to dlin_strok+1' проганяем цикл по количеству символов в строке+1.
poz=find(stroka,temp_poz,",")' ищем позицию первой запятой. при следующей прогонке начинаем искать со следующего символа после найденной запятой.
IF poz!=-1' если запятая найдена, то 
poz_map=set_value(poz_map,"key"&i,poz+1)' при найденной запятой пишем ее в массив. 
temp_poz=poz+1
i=i+1

ELSE IF
poz_map=set_value(poz_map,"key"&i,cursor)' как только запятая не найдена пишем в массив последнее значение
' оно нужно для вычисления длины последнего фрагмента. фрагмент - начиная с последней запятой и до конца строки
END IF

end for

'log(3-GET_VALUE(poz_map,"key0"))
'log("кол-во фрагментов:"&i)' количество фрагментов (переменных между запятыми)

for cursor2 from 0 to i-1
z=GET_VALUE(poz_map,"key"&cursor2)
x=(GET_VALUE(poz_map,"key"&(cursor2+1))-GET_VALUE(poz_map,"key"&cursor2))-1
log("позиция входа:"&z)
log("длина:"&x)
c=SUBSTR(stroka,z,x)
log(c)
end for


FUNC log(log_string)' функция добавления строчки в таблицу логов

log_string_num=log_string_num+1' каждую новую запись пишем в таблиуц в новую строчку
time_value=get_value(GET_DATETIME(), "Datetime")' получаем время
st=CREATE_MAP() 'создаем мап массив
st=SET_VALUE(st,"x", log_string)' записываем в этот массив первую пару значений x=слова
st=SET_VALUE(st,"time", time_value)' записываем вторую пару time=time_value 
ADD_ITEM(log_string_num,st)' пишем весь массив в таблицу

END FUNC


END_PROGRAM

PARAMETER x;
PARAMETER_TITLE x;
PARAMETER_DESCRIPTION x;
PARAMETER_TYPE STRING(20);
END

PARAMETER time;
PARAMETER_TITLE time;
PARAMETER_DESCRIPTION time;
PARAMETER_TYPE STRING(20);
END

END_PORTFOLIO_EX