Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Проблема записи в переменные AFL из VBS скрипта Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
HiTrader



Зарегистрирован: 29.11.2009
Сообщения: 9

СообщениеДобавлено: Пн Ноя 30, 2009 2:04 pm Ответить с цитатой Вернуться к началу

Добрый день!
При разработке скрипта для чтения csv файла и записи соответствующих данных из него в переменные амиброкера столкнулся с рядом проблем.
Приведу код:
Код:
//Col_Date=0;
EnableScript("vbscript");

<%
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H0001

Dim adoCSVConnection, adoCSVRecordSet, strPathToTextfile
Dim strCSVFile, k
dim Vbs_col_date(40)

' Specify path to CSV file.
strPathToTextFile = "c:\Test\"

' Specify CSV fileName.
strCSVFile = "test.csv"

' Open connection to the CSV file.
Set adoCSVConnection = CreateObject("ADODB.Connection")
Set adoCSVRecordSet = CreateObject("ADODB.Recordset")

' Open CSV file with header line.
adoCSVConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=" & strPathtoTextFile & ";" & _
    "Extended Properties=""text;HDR=YES;FMT=Delimited"""

adoCSVRecordset.Open "SELECT * FROM " & strCSVFile & " WHERE [Date]=""Mon Nov 23""", adoCSVConnection, adOpenStatic, adLockOptimistic, adCmdText
k=0
' Read the CSV file.
do while NOT adoCSVRecordset.EOF
    ' Display all fields byName.

Vbs_col_date(k)=adoCSVRecordset.Fields(1).Value
'MsgBox Vbs_col_date(k)
k=k+1
    adoCSVRecordset.MoveNext

Loop

' Clean up.
adoCSVRecordset.Close
adoCSVConnection.Close


AFL("Col_Date")=Vbs_col_date
%>

//Plot(Col_Date,"Date1",colorBlack);


Текст csv файла:
Код:
Date;Time
Mon Nov 23;11:30 AM
Mon Nov 23;12:30 AM


Файл читается нормально, если раскомментить MsgBox Vbs_col_date(k), то это будет видно.
Проблема в том, что не получается переменной Col_Date Амиброкера присвоить массив переменных Vbs_col_date из VBS-скрипта (AFL("Col_Date")=Vbs_col_date). Амиброкер выдает ошибку "Type mismatch. Assignment failed".
Не могу избавиться от несоответствия типов, как мне устранить ошибку? Далее хочу вывести значение переменной Col_Date на экран при помощи Plot.

Также заметил, что скрипт выполняется каждый раз при перемещении линейки или ползунка на чарте, при этом заметны подтормаживания Амиброкера и увеличение нагрузки на процессор. Я так понимаю, что при обновлении данных, чарта, скрипт заново выполняется. Как я могу избавиться от этого? Мне нужно, чтобы скрипт выполнился только один раз, например, при загрузке Амиброкера или в определенное время. Как думаю, я могу достичь этого путем вставки условия в самом начале скрипта. Если условие не удовлетворяет определенным критериям, то дальнейшее выполнение скрипта останавливается или пропускается. Верно думаю или возможны другие варианты? Какие? Как реализовать выход из скрипта или пропуск его какой-то части? Есть ли в Ами что-то наподобие оператора goto?

Благодарю за внимание и прошу форумчан помочь мне в решении вопросов.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Ноя 30, 2009 2:24 pm Ответить с цитатой Вернуться к началу

Честно говоря я не достаточно владею ВБА чтобы понять что делает скрипт.
Может разделить ВБА и AFL.
Вба запускать руками когда надо. Благо можно добавить прямо в меню и даже кнопку на панел вывести.
Или то, что делает ВБА реализовать в АФЛ. Вроде АФЛ даже побыстрее работает.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
HiTrader



Зарегистрирован: 29.11.2009
Сообщения: 9

СообщениеДобавлено: Пн Ноя 30, 2009 2:34 pm Ответить с цитатой Вернуться к началу

Добрый день! Это не ВБА (Visual Basic for Aplications), а ВБС (Visual Basic Script), но это не суть. В VBS скрипте я читаю данные csv файла в переменные VBS, далее мне нужно значения переменных VBS присвоить массиву AFL. У меня ошибка в присвоении переменных VBS массиву AFL. Отдельно скрипт VBS работает нормально, внутри AFL он также работает нормально, раскомментив MsgBox это можно увидеть. Не получается именно присвоение
Код:
AFL("Col_Date")=Vbs_col_date


Посмотрите пожалуйста скрипт ВБС, он не сложный с англ.комментами, думаете в AFL можно также легко создать объекты ADODB и работать с ними?
А вообще задача - прочитать csv файл и записать каждое значение, разделенное запятыми, в переменные AFL, которые дальше необходимо вывести при помощи команды Plot.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Ноя 30, 2009 2:56 pm Ответить с цитатой Вернуться к началу

Цитата:

думаете в AFL можно также легко создать объекты ADODB и работать с ними?

COM? запросто.
Не поленись. Напиши по русски что надо. Может и подскажу что.
Вполне возможно, что АФЛ не поддерживает тип используемый в ВБС. Кроме того ранбше были такие косяки, что приходилось сначала инициализировать массив в АФЛ и только потом скрипт и передача массива из скрипта. (в начале закомментировано //Col_Date=0Wink

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
HiTrader



Зарегистрирован: 29.11.2009
Сообщения: 9

СообщениеДобавлено: Пн Ноя 30, 2009 3:04 pm Ответить с цитатой Вернуться к началу

000 писал(а):
COM? запросто.
Не поленись. Напиши по русски что надо. Может и подскажу что.
Вполне возможно, что АФЛ не поддерживает тип используемый в ВБС. Кроме того ранбше были такие косяки, что приходилось сначала инициализировать массив в АФЛ и только потом скрипт и передача массива из скрипта. (в начале закомментировано //Col_Date=0Wink


Стоит задача - прочитать csv файл и записать каждое значение, разделенное точкой с запятой, в переменные AFL, которые дальше необходимо вывести при помощи команды Plot. Парсинг csv файла я делаю в ВБС скрипте методами ADO.

В начале закомментировано //Col_Date=0;
потому что я перепробывал различные варианты (и с начальной инициализацией массива в АФЛ), AFL все время ругается.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Ноя 30, 2009 3:29 pm Ответить с цитатой Вернуться к началу

Ага. Вроде понял. Тогда предлагаю так. Запускашь свой скрипт. Он парсит что надо и сразу через com делает ипорт данных в базу ами из CSV (пример посмотри в этом форуме http://amisite.ru/phpBB2/viewforum.php?f=19 правда там на жабе). Это не трудно. Только мне не нравится формат даты. Боюсь, что такой (Mon Nov 23) Ами не поймет. Возможно придется переделывать в скрипте.
И дальше работаешь с этими данными непосредственно в Ами.
Надеюсь данных не больше 4х полей...

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
HiTrader



Зарегистрирован: 29.11.2009
Сообщения: 9

СообщениеДобавлено: Пн Ноя 30, 2009 3:46 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Ага. Вроде понял. Тогда предлагаю так. Запускашь свой скрипт. Он парсит что надо и сразу через com делает ипорт данных в базу ами из CSV (пример посмотри в этом форуме http://amisite.ru/phpBB2/viewforum.php?f=19 правда там на жабе). Это не трудно. Только мне не нравится формат даты. Боюсь, что такой (Mon Nov 23) Ами не поймет. Возможно придется переделывать в скрипте.
И дальше работаешь с этими данными непосредственно в Ами.
Надеюсь данных не больше 4х полей...

Идею закачки данных из csv файла в БД Ами непосредственно в ВБС скрипте понял. Но, думаю, что формат БД у Ами особый, мой же csv файл имеет следующие поля:
Код:
Date;Time;Time Zone;Currency;Description;Importance;Actual;Forecast;Previous
Mon Nov 23;11:30 AM;GMT+03:00;EUR;EUR German Purchasing Manager Index Services (NOV A);Medium;51.5;51.2;50.7
Mon Nov 23;12:00 PM;GMT+03:00;EUR;EUR Euro-Zone Purchasing Manager Index Manufacturing (NOV A);Medium;51.0;51.2;50.7
Mon Nov 23;4:30 PM;GMT+03:00;CAD;CAD Retail Sales (MoM) (SEP);High;1.0%;0.6%;1.0%(R+)
Mon Nov 23;6:00 PM;GMT+03:00;USD;USD Existing Home Sales (OCT);Medium;6.10M;5.70M;5.54M (R-)
Tue Nov 24;2:00 AM;GMT+03:00;AUD;AUD Conference Board Leading Index (SEP);Medium;0.3%;;1.5% (R-)
Tue Nov 24;8:00 AM;GMT+03:00;JPY;JPY Bank of Japan Monthly Report;Medium;;;
Tue Nov 24;10:00 AM;GMT+03:00;CHF;CHF UBS Consumption Indicator (OCT);Medium;.867;;0.671 (R+)


Формат даты переделаю в нужный, не вопрос.
Посмотреть профиль Отправить личное сообщение
HiTrader



Зарегистрирован: 29.11.2009
Сообщения: 9

СообщениеДобавлено: Пн Ноя 30, 2009 3:47 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Ага. Вроде понял. Тогда предлагаю так. Запускашь свой скрипт. Он парсит что надо и сразу через com делает ипорт данных в базу ами из CSV (пример посмотри в этом форуме http://amisite.ru/phpBB2/viewforum.php?f=19 правда там на жабе). Это не трудно. Только мне не нравится формат даты. Боюсь, что такой (Mon Nov 23) Ами не поймет. Возможно придется переделывать в скрипте.
И дальше работаешь с этими данными непосредственно в Ами.
Надеюсь данных не больше 4х полей...

Идею закачки данных из csv файла в БД Ами непосредственно в ВБС скрипте понял. Но, думаю, что формат БД у Ами особый, мой же csv файл имеет следующие поля:
Код:
Date;Time;Time Zone;Currency;Description;Importance;Actual;Forecast;Previous
Mon Nov 23;11:30 AM;GMT+03:00;EUR;EUR German Purchasing Manager Index Services (NOV A);Medium;51.5;51.2;50.7
Mon Nov 23;12:00 PM;GMT+03:00;EUR;EUR Euro-Zone Purchasing Manager Index Manufacturing (NOV A);Medium;51.0;51.2;50.7
Mon Nov 23;4:30 PM;GMT+03:00;CAD;CAD Retail Sales (MoM) (SEP);High;1.0%;0.6%;1.0%(R+)
Mon Nov 23;6:00 PM;GMT+03:00;USD;USD Existing Home Sales (OCT);Medium;6.10M;5.70M;5.54M (R-)
Tue Nov 24;2:00 AM;GMT+03:00;AUD;AUD Conference Board Leading Index (SEP);Medium;0.3%;;1.5% (R-)
Tue Nov 24;8:00 AM;GMT+03:00;JPY;JPY Bank of Japan Monthly Report;Medium;;;
Tue Nov 24;10:00 AM;GMT+03:00;CHF;CHF UBS Consumption Indicator (OCT);Medium;.867;;0.671 (R+)


Формат даты переделаю в нужный, не вопрос.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Ноя 30, 2009 5:25 pm Ответить с цитатой Вернуться к началу

Упс. А вот текстовые данные засунуть в массив AFL не получится никак...

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
HiTrader



Зарегистрирован: 29.11.2009
Сообщения: 9

СообщениеДобавлено: Пн Ноя 30, 2009 5:59 pm Ответить с цитатой Вернуться к началу

Ладно, попробую средствами АФЛ через АДОДБ отпарсить файл. О результатах сообщу. Ответьте плиз на вторую часть вопроса.
Цитата:
Также заметил, что скрипт выполняется каждый раз при перемещении линейки или ползунка на чарте, при этом заметны подтормаживания Амиброкера и увеличение нагрузки на процессор. Я так понимаю, что при обновлении данных, чарта, скрипт заново выполняется. Как я могу избавиться от этого? Мне нужно, чтобы скрипт выполнился только один раз, например, при загрузке Амиброкера или в определенное время. Как думаю, я могу достичь этого путем вставки условия в самом начале скрипта. Если условие не удовлетворяет определенным критериям, то дальнейшее выполнение скрипта останавливается или пропускается. Верно думаю или возможны другие варианты? Какие? Как реализовать выход из скрипта или пропуск его какой-то части? Есть ли в Ами что-то наподобие оператора goto?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Ноя 30, 2009 6:04 pm Ответить с цитатой Вернуться к началу

Некоторый контроль за выполнением АФЛ дает выполнение его в Автоматическом анализаторе (АА).

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Ноя 30, 2009 6:06 pm Ответить с цитатой Вернуться к началу

Встречал в сети идею борабатывать фундаментальные данные с помощью ODBC плагина. Т.е. держать данные в БД и читать оттуда в Ами.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
HiTrader



Зарегистрирован: 29.11.2009
Сообщения: 9

СообщениеДобавлено: Пн Ноя 30, 2009 7:20 pm Ответить с цитатой Вернуться к началу

Как реализовать в Ами пропуск какой-то части кода? Есть ли в Ами что-то наподобие оператора goto?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Ноя 30, 2009 9:42 pm Ответить с цитатой Вернуться к началу

Нет. goto нету. Вообще вроде программеры говорят, что это нехороший оператор и лучше его не использовать даже если есть. Типа дурной тон.. Smile
Некое подобие в ами Управляющее слово break

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen