Автор |
Сообщение |
HiTrader
Зарегистрирован: 29.11.2009
Сообщения: 9
|
Добрый день!
При разработке скрипта для чтения 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
|
Честно говоря я не достаточно владею ВБА чтобы понять что делает скрипт.
Может разделить ВБА и AFL.
Вба запускать руками когда надо. Благо можно добавить прямо в меню и даже кнопку на панел вывести.
Или то, что делает ВБА реализовать в АФЛ. Вроде АФЛ даже побыстрее работает. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
HiTrader
Зарегистрирован: 29.11.2009
Сообщения: 9
|
Добрый день! Это не ВБА (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
|
Цитата: |
думаете в AFL можно также легко создать объекты ADODB и работать с ними?
|
COM? запросто.
Не поленись. Напиши по русски что надо. Может и подскажу что.
Вполне возможно, что АФЛ не поддерживает тип используемый в ВБС. Кроме того ранбше были такие косяки, что приходилось сначала инициализировать массив в АФЛ и только потом скрипт и передача массива из скрипта. (в начале закомментировано //Col_Date=0 |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
HiTrader
Зарегистрирован: 29.11.2009
Сообщения: 9
|
000 писал(а): |
COM? запросто.
Не поленись. Напиши по русски что надо. Может и подскажу что.
Вполне возможно, что АФЛ не поддерживает тип используемый в ВБС. Кроме того ранбше были такие косяки, что приходилось сначала инициализировать массив в АФЛ и только потом скрипт и передача массива из скрипта. (в начале закомментировано //Col_Date=0 |
Стоит задача - прочитать csv файл и записать каждое значение, разделенное точкой с запятой, в переменные AFL, которые дальше необходимо вывести при помощи команды Plot. Парсинг csv файла я делаю в ВБС скрипте методами ADO.
В начале закомментировано //Col_Date=0;
потому что я перепробывал различные варианты (и с начальной инициализацией массива в АФЛ), AFL все время ругается. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ага. Вроде понял. Тогда предлагаю так. Запускашь свой скрипт. Он парсит что надо и сразу через com делает ипорт данных в базу ами из CSV (пример посмотри в этом форуме http://amisite.ru/phpBB2/viewforum.php?f=19 правда там на жабе). Это не трудно. Только мне не нравится формат даты. Боюсь, что такой (Mon Nov 23) Ами не поймет. Возможно придется переделывать в скрипте.
И дальше работаешь с этими данными непосредственно в Ами.
Надеюсь данных не больше 4х полей... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
HiTrader
Зарегистрирован: 29.11.2009
Сообщения: 9
|
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
|
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
|
Упс. А вот текстовые данные засунуть в массив AFL не получится никак... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
HiTrader
Зарегистрирован: 29.11.2009
Сообщения: 9
|
Ладно, попробую средствами АФЛ через АДОДБ отпарсить файл. О результатах сообщу. Ответьте плиз на вторую часть вопроса.
Цитата: |
Также заметил, что скрипт выполняется каждый раз при перемещении линейки или ползунка на чарте, при этом заметны подтормаживания Амиброкера и увеличение нагрузки на процессор. Я так понимаю, что при обновлении данных, чарта, скрипт заново выполняется. Как я могу избавиться от этого? Мне нужно, чтобы скрипт выполнился только один раз, например, при загрузке Амиброкера или в определенное время. Как думаю, я могу достичь этого путем вставки условия в самом начале скрипта. Если условие не удовлетворяет определенным критериям, то дальнейшее выполнение скрипта останавливается или пропускается. Верно думаю или возможны другие варианты? Какие? Как реализовать выход из скрипта или пропуск его какой-то части? Есть ли в Ами что-то наподобие оператора goto? |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Некоторый контроль за выполнением АФЛ дает выполнение его в Автоматическом анализаторе (АА). |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Встречал в сети идею борабатывать фундаментальные данные с помощью ODBC плагина. Т.е. держать данные в БД и читать оттуда в Ами. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
HiTrader
Зарегистрирован: 29.11.2009
Сообщения: 9
|
Как реализовать в Ами пропуск какой-то части кода? Есть ли в Ами что-то наподобие оператора goto? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Нет. goto нету. Вообще вроде программеры говорят, что это нехороший оператор и лучше его не использовать даже если есть. Типа дурной тон..
Некое подобие в ами Управляющее слово break |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|