Есть скрипт:
который поедает память. задача его не совсем в этом, потому прошу помощи - возможно какие-либо данные(подозреваю что массивы) надо удалять по окончанию цикла?
_WinAPI_EmptyWorkingSet()(не забыв подключить библиотеку) поставленное в начало цикла, вызывает закладку с библиотекой и жалуется на ошибки в ней.
обращение массивов в ноль, в конце цикла, тоже не помогло.
Код:
#include <Excel.au3>
#include <Date.au3>
$iDateCalc = _DateDiff( 's',"1970/01/01 00:00:00",_NowCalc())
While 1
ShortOpen()
WEnd
;ОПИСАНИЕ ФУНКЦИЙ
;ФУНКЦИЯ ОТКРЫТИЯ СДЕЛОК ШОРТ
Func ShortOpen()
;ОПИСЫВАЕМ ДВА МАССИВА
Dim $Array1[1], $Array2[1], $Array3[1]
;ОТКРЫВАЕМ ФАЙЛ АКТИВНЫХ ОРДЕРОВ ДЛЯ ЧТЕНИЯ, ЧТОБЫ СОЗДАТЬ ИЗ НЕГО ПЕРВЫЙ МАССИВ СТРОК
$hFile=FileOpen(@ScriptDir&"\History.txt", 0)
If $hFile=-1 Then
MsgBox(0, "FileOpen", "Невозможно открыть файл History.txt для чтения.")
Exit
EndIf
;СОЗДАЕМ ПЕРВЫЙ МАССИВ СТРОК ИЗ ФАЙЛА АКТИВНЫХ ОРДЕРОВ
$i=0
While 1
$Array1[$i]=FileReadLine($hFile)
If @error=-1 Then ExitLoop
If @error=1 Then
MsgBox(0,"$Array1","Ошибка создания массива. FileReadLine=0")
Exit
EndIf
$i+=1
ReDim $Array1[$i+1]
WEnd
;ЗАКРЫВАЕМ ФАЙЛ АКТИВНЫХ ОРДЕРОВ
FileClose($hFile)
;ОТКРЫВАЕМ ФАЙЛ ОБРАБОТАННЫХ ОРДЕРОВ ДЛЯ ЧТЕНИЯ, ЧТОБЫ СОЗДАТЬ ИЗ НЕГО ВТОРОЙ МАССИВ СТРОК
$hFile=FileOpen(@ScriptDir&"\Ticket_close_short.txt",0)
If $hFile=-1 Then
MsgBox(0, "FileOpen", "Невозможно открыть файл Ticket_close_short.txt.txt для чтения.")
Exit
EndIf
;СОЗДАЕМ ВТОРОЙ МАССИВ СТРОК
$i=0
While 1
$Array2[$i]=FileReadLine($hFile)
If @error=-1 Then ExitLoop
If @error=1 Then
MsgBox(0,"$Array2","Ошибка создания массива. FileReadLine=0")
Exit
EndIf
$i+=1
ReDim $Array2[$i+1]
WEnd
;ЗАКРЫВАЕМ ФАЙЛ ОБРАБОТАННЫХ ОРДЕРОВ
FileClose($hFile)
;ОТКРЫВАЕМ ФАЙЛ ОБРАБОТАННЫХ ОРДЕРОВ ДЛЯ ЗАПИСИ
$hFile=FileOpen(@ScriptDir&"\Ticket_close_short.txt",1)
If $hFile=-1 Then
MsgBox(0,"FileOpen","Невозможно открыть файл Ticket_close_short.txt для записи.")
Exit
EndIf
;С КАЖДЫМ ШАГОМ, ЦИКЛА ПОВТОРЯЮЩЕГОСЯ ДО КОНЦА СТРОК ПЕРВОГО МАССИВА(НАЧАТОГО С 1 СТРОКИ, СТРОКА 0-НЕИНФОРМАТИВНА), РАЗБИВАЕМ СТРОКУ РАВНУЮ ШАГУ ЦИКЛА НА МАССИВ
For $i=1 To UBound($Array1)-2
if UBound($Array1)=0 Then
MsgBox(0,"UBound($Array1)","Ошибка #"&@error)
Exit
EndIf
$t=False
;РАЗБИВАЕМ СТРОКУ i В ПЕРВОМ МАССИВЕ СТРОК, НА МАССИВ Temp1 С РАЗДЕЛИТЕЛЕМ ";"
$aTemp1=StringSplit($Array1[$i],";",2)
if $aTemp1=0 Then
MsgBox(0,"StringSplit($Array1[$i])","Ошибка #"&@error)
Exit
EndIf
;С КАЖДЫМ ШАГОМ, ЦИКЛА ПОВТОРЯЮЩЕГОСЯ ДО КОНЦА СТРОК ВТОРОГО МАССИВА, РАЗБИВАЕМ СТРОКУ РАВНУЮ ШАГУ ЦИКЛА НА МАССИВ
For $j=0 To UBound($Array2)-2
if UBound($Array1)=0 Then
MsgBox(0,"UBound($Array1)","Ошибка #"&@error)
Exit
EndIf
;РАЗБИВАЕМ СТРОКУ j ВО ВТОРОМ МАССИВЕ, НА МАССИВ Temp2 С РАЗДЕЛИТЕЛЕМ ";"
$aTemp2=StringSplit($Array2[$j],";",2)
if $aTemp2=0 Then
MsgBox(0,"StringSplit($Array2[$i])","Ошибка #"&@error)
Exit
EndIf
;ИЩЕМ В СТРОКЕ j ВТОРОГО МАССИВА С 1 ПО 10 СИМВОЛЫ, ЭЛЕМЕНТ РАВНЫЙ ПЕРВОМУ ЭЛЕМЕНТУ МАССИВА ПОЛУЧЕНОГО ИЗ СТРОКИ i
if StringInStr($Array2[$j],$aTemp1[0],0,1,1,10) Then
;ЕСЛИ НАХОДИМ - ПЕРЕХОДИМ К СЛЕДУЮЩЕЙ СТРОКЕ ПЕРВОГО МАССИВА, ЕСЛИ НЕ НАХОДИМ - ПЕРЕХОДИМ К ВЫПОЛНЕНИЮ СЛЕДУЮЩЕГО УСЛОВИЯ
$t=True
ExitLoop
EndIf
Next
;ЕСЛИ НЕ НАХОДИМ И ТРЕТИЙ ЭЛЕМЕНТ СТРОКИ i ПЕРВОГО МАССИВА РАВЕН ЕДИНИЦЕ И ЕСЛИ ВРЕМЯ ЗАПИСИ СТРОКИ i БОЛЬШЕ ВРЕМЕНИ НАЧАЛА РАБОТЫ ЦИКЛА
If ($t=False) And ($aTemp1[2]=1) And ($aTemp1[4]>=$iDateCalc) Then
;ЗАПИСИВАЕМ ПЕРВЫЙ ЭЛЕМЕНТ СТРОКИ i ПЕРВОГО МАССИВА В КОНЕЦ ВТОРОГО МАССИВА
$FW=FileWriteLine($hFile,$aTemp1[0])
FileClose($hFile)
;ЗДЕСЬ НАДО ЗАПУСТИТЬ ОТКРЫТИЕ\ЗАКРЫТИЕ ОРДЕРА В TWS
;ОТКРЫВАЕМ СООТНОШЕНИЙ ФАЙЛ ДЛЯ ЧТЕНИЯ, ЧТОБЫ СОЗДАТЬ ИЗ НЕГО МАССИВ СТРОК
$hFile=FileOpen(@ScriptDir&"\MT4_TWS.txt", 0)
If $hFile=-1 Then
MsgBox(0, "FileOpen", "Невозможно открыть файл MT4_TWS.txt для чтения.")
Exit
EndIf
;СОЗДАЕМ ТРЕТИЙ МАССИВ СТРОК ИЗ ФАЙЛА СООТНОШЕНИЙ
$z=0
While 1
$Array3[$z]=FileReadLine($hFile)
If @error=-1 Then ExitLoop
If @error=1 Then
MsgBox(0,"$Array3","Ошибка создания массива. FileReadLine=0")
Exit
EndIf
$z+=1
ReDim $Array3[$z+1]
WEnd
;ЗАКРЫВАЕМ ФАЙЛ СООТНОШЕНИЙ
FileClose($hFile)
;ПОВТОРЯЕМ СТОЛЬКО РАЗ, СКОЛЬКО СТРОК В ТРЕТЬЕМ МАССИВЕ
For $z=0 To UBound($Array3)-2
if UBound($Array3)=0 Then
MsgBox(0,"UBound($Array1)","Ошибка #"&@error)
Exit
EndIf
;РАЗБИВАЕМ СТРОКУ i В ТРЕТЬЕМ МАССИВЕ СТРОК, НА МАССИВ Temp3 С РАЗДЕЛИТЕЛЕМ ";"
$aTemp3=StringSplit($Array3[$z],";",2)
if $aTemp3=0 Then
MsgBox(0,"StringSplit($Array3[$i])","Ошибка #"&@error)
Exit
EndIf
;ЕСЛИ ТИП СИМВОЛА В СТРОКЕ i МАССИВА СТРОК ИЗ ФАЙЛА ОТКРЫТЫХ ОРДЕРОВ СОВПАДАЕТ С ТИПОМ СИМВОЛА В СТРОКЕ z МАССИВА СТРОК ИЗ ФАЙЛА СООТНОШЕНИЙ
if $aTemp1[1]==$aTemp3[0] Then
;ПРИСВАИВАЕМ ЗНАЧЕНИЯ РАВНЫЕ ЗНАЧЕНИЯМ В СТРОКЕ z ФАЙЛА СООТНОШЕНИЙ
$Symbol=$aTemp3[1]
$Type=$aTemp3[2]
$Exchange=$aTemp3[3]
$Currency=$aTemp3[4]
;ОТКРЫВАЕМ СДЕЛКУ В ТВС
Local $oAppl=_Excel_Open()
if $oAppl=0 Then
MsgBox(0,"_Excel_Open","ошибка №"&@error)
Exit
EndIf
Local $oWorkbook=_Excel_BookAttach("TwsDde.xls","filename")
if $oWorkbook=0 Then
MsgBox(0,"_Exel_BookAttachSort","ошибка №"&@error)
Exit
EndIf
Local $RanIns=_Excel_RangeInsert($oWorkbook.Activesheet,"11:11",$xlShiftDown)
if $RanIns=0 Then
MsgBox(0,"_Excel_RangeInsert11:11","ошибка №"&@error)
Exit
EndIf
Local $ExcRanWr=_Excel_RangeWrite($oWorkbook,$oWorkbook.Activesheet,$Symbol,"A11")
if $ExcRanWr=0 Then
MsgBox(0,"_Excel_RangeWriteA11","ошибка №"&@error)
Exit
EndIf
Local $ExcRanWr=_Excel_RangeWrite($oWorkbook,$oWorkbook.Activesheet,$Type,"B11")
if $ExcRanWr=0 Then
MsgBox(0,"_Excel_RangeWriteB11","ошибка №"&@error)
Exit
EndIf
Local $ExcRanWr=_Excel_RangeWrite($oWorkbook,$oWorkbook.Activesheet,$Exchange,"H11")
if $ExcRanWr=0 Then
MsgBox(0,"_Excel_RangeWriteH11","ошибка №"&@error)
Exit
EndIf
Local $ExcRanWr=_Excel_RangeWrite($oWorkbook,$oWorkbook.Activesheet,$Currency,"J11")
if $ExcRanWr=0 Then
MsgBox(0,"_Excel_RangeWriteJ11","ошибка №"&@error)
Exit
EndIf
Local $ExcRanWr=_Excel_RangeWrite($oWorkbook,$oWorkbook.Activesheet,"SELL","M11")
if $ExcRanWr=0 Then
MsgBox(0,"_Excel_RangeWriteM11","ошибка №"&@error)
Exit
EndIf
Local $ExcRanWr=_Excel_RangeWrite($oWorkbook,$oWorkbook.Activesheet,"1","N11")
if $ExcRanWr=0 Then
MsgBox(0,"_Excel_RangeWriteN11","ошибка №"&@error)
Exit
EndIf
Local $ExcRanWr=_Excel_RangeWrite($oWorkbook,$oWorkbook.Activesheet,"MKT","O11")
if $ExcRanWr=0 Then
MsgBox(0,"_Excel_RangeWriteO11","ошибка №"&@error)
Exit
EndIf
$oAppl.Activesheet.Cells(11,1).Select
$oAppl.Run("Sheet2.placeOrder")
EndIf
Next
if $FW=0 Then
MsgBox(0,"FileWriteLine($hFile,$aTemp1[0])","Ошибка записи")
Exit
EndIf
EndIf
Next
EndFunc
который поедает память. задача его не совсем в этом, потому прошу помощи - возможно какие-либо данные(подозреваю что массивы) надо удалять по окончанию цикла?
_WinAPI_EmptyWorkingSet()(не забыв подключить библиотеку) поставленное в начало цикла, вызывает закладку с библиотекой и жалуется на ошибки в ней.
обращение массивов в ноль, в конце цикла, тоже не помогло.