Пожалуйста, подскажите решения которые будут работать лучше, чем примененные. скрипт:
Данный скрипт парсит файл со строками(который несколько раз в секунду обновляется, какие-то строки удаляются, какие-то добавляются) и если находит новую строку - обрабатывает ее(заменяет символы в строке и отправляет все это добро на исполнение макросу excel'я). На мой взгляд, надо убрать чтение файла Ticket_Work_Short(он является списком обработанных строк и применяется для сравнения) - а массив построенный на его основе, создавать в теле скрипта(тем самым избежав чтения с диска). Пока не придумал как это сделать.
Здесь буду обновлять конечный результат со всеми поправками:
Здесь полезные ссылки:
Код:
#include <Array.au3>
#include <Excel.au3>
#include <Date.au3>
#include <File.au3>
Local $oWorkbook, $oAppl, $Array1, $Array2, $Array3, $a, $b, $c, $d, $aTemp1, $aTemp2, $aTemp3
$iDateCalc = _DateDiff( 's',"1970/01/01 00:00:00",_NowCalc())
$oAppl=_Excel_Open()
$oWorkbook=_Excel_BookAttach("TwsDde.xls","filename")
While 1
_FileReadToArray(@ScriptDir & "\Trades.txt", $Array1)
_FileReadToArray(@ScriptDir & "\Ticket_work_short.txt", $Array2)
For $a=1 To $Array1[0]
$d=False
$aTemp1=StringSplit($Array1[$a],";",2)
For $b=1 To $Array2[0]
$aTemp2=StringSplit($Array2[$b],";",2)
If StringInStr($Array2[$b],$aTemp1[0],0,1,1,10) Then
$d=True
ExitLoop
EndIf
Next
if ($d=False) And ($aTemp1[2]=1) And ($aTemp1[4]>=$iDateCalc) Then
$hFile=FileOpen(@ScriptDir&"\Ticket_work_short.txt",1)
FileWriteLine($hFile,$Array1[$a])
FileClose($hFile)
_FileReadToArray(@ScriptDir & "\MT4_TWS.txt", $Array3)
For $c=1 To $Array3[0]
$aTemp3=StringSplit($Array3[$c],";",2)
if $aTemp1[1]==$aTemp3[0] Then
$Symbol=$aTemp3[1]
$Type=$aTemp3[2]
$Exchange=$aTemp3[3]
$Currency=$aTemp3[4]
Local $RanIns=_Excel_RangeInsert($oWorkbook.Activesheet,"11:11",$xlShiftDown)
Local $ExcRanWr=_Excel_RangeWrite($oWorkbook,$oWorkbook.Activesheet,$Symbol,"A11")
Local $ExcRanWr=_Excel_RangeWrite($oWorkbook,$oWorkbook.Activesheet,$Type,"B11")
Local $ExcRanWr=_Excel_RangeWrite($oWorkbook,$oWorkbook.Activesheet,$Exchange,"H11")
Local $ExcRanWr=_Excel_RangeWrite($oWorkbook,$oWorkbook.Activesheet,$Currency,"J11")
Local $ExcRanWr=_Excel_RangeWrite($oWorkbook,$oWorkbook.Activesheet,"SELL","M11")
Local $ExcRanWr=_Excel_RangeWrite($oWorkbook,$oWorkbook.Activesheet,"1","N11")
Local $ExcRanWr=_Excel_RangeWrite($oWorkbook,$oWorkbook.Activesheet,"MKT","O11")
$oAppl.Activesheet.Cells(11,1).Select
$oAppl.Run("Sheet2.placeOrder")
EndIf
Next
EndIf
Next
Sleep(100)
WEnd
Здесь буду обновлять конечный результат со всеми поправками:
Код:
#include <Array.au3>
#include <Excel.au3>
#include <Date.au3>
#include <File.au3>
Local $dic, $iDateCalc, $oAppl, $oWorkbook, $Array3, $Array1, $a, $aTemp1, $c, $aTemp3, $Symbol, $Type, $Exchange, $Currency, $Array
$dic = ObjCreate('scripting.dictionary')
$iDateCalc = _DateDiff( 's',"1970/01/01 00:00:00",_NowCalc())
$oAppl=_Excel_Open()
$oWorkbook=_Excel_BookAttach("TwsDde.xls","filename")
_FileReadToArray(@ScriptDir & "\MT4_TWS.txt", $Array3)
While 1
_FileReadToArray(@ScriptDir & "\Trades.txt", $Array1)
For $a=1 To $Array1[0]
If $dic.exists($Array1[$a]) Then
ContinueLoop
Else
$dic.add($Array1[$a], 0)
$aTemp1=StringSplit($Array1[$a],";",2)
if $aTemp1[2]=1 Then
For $c=1 To $Array3[0]
$aTemp3=StringSplit($Array3[$c],";",2)
if $aTemp1[1]==$aTemp3[0] And ($aTemp1[4]>=$iDateCalc) Then
$Symbol=$aTemp3[1]
$Type=$aTemp3[2]
$Exchange=$aTemp3[3]
$Currency=$aTemp3[4]
_Excel_RangeInsert($oWorkbook.Activesheet,"11:11",$xlShiftDown)
_Excel_RangeWrite($oWorkbook,$oWorkbook.Activesheet,$Symbol,"A11")
_Excel_RangeWrite($oWorkbook,$oWorkbook.Activesheet,$Type,"B11")
_Excel_RangeWrite($oWorkbook,$oWorkbook.Activesheet,$Exchange,"H11")
_Excel_RangeWrite($oWorkbook,$oWorkbook.Activesheet,$Currency,"J11")
_Excel_RangeWrite($oWorkbook,$oWorkbook.Activesheet,"SELL","M11")
_Excel_RangeWrite($oWorkbook,$oWorkbook.Activesheet,"1","N11")
_Excel_RangeWrite($oWorkbook,$oWorkbook.Activesheet,"MKT","O11")
$oAppl.Activesheet.Cells(11,1).Select
$oAppl.Run("Sheet2.placeOrder")
EndIf
Next
EndIf
EndIf
Next
WEnd
Здесь полезные ссылки: