//====================================================================================================== // LibreConver Function1_5 v1.107 MQL5 // Основные функции алгоритма // Librecoin (c)2014-2017 //====================================================================================================== #property strict //====================================================================================================== // MAIN FUNCTIONS //------------------------------------------------------------------------------------------------------ // //====================================================================================================== // StringConverter() - Script program start function //====================================================================================================== bool StringConverter( int iMode, string iInpStr, string &iOutStr){ int n; bool iResult=true; iOutStr=""; {if((StringFind(iInpStr,",",0)<0)&&(iMode<=3)) { iResult=false; return(iResult); }}//if(StringFind(iInpStr,",",0)<0) //----- string iDateTim=""; string iDate=gDat; string iYear=gYear; string iMou=gMoun; string iDay=gDay; string iTim=gTim; string iEvent=""; string iCountry=""; string iCouN=""; string iCur=""; string iVolatility=""; string iForecast=""; string iImpact=""; string iImpN=""; string iActual=""; string iPrevious=""; int nCountry=0; int nnCountry=0; //----- Календарь investing html {if(iMode==4) { //Строка даты нового дня - заносим дату в глобал, для установки дат недатированных событий string iTheDay=""; int posDay=StringFind(iInpStr,"=0)&&(TagContent(iInpStr,"id=\"theDay","/td>",iTheDay))) { iResult=TagContent(iTheDay,", ","<",iTheDay); gMoun=StringSubstr(iTheDay,0,StringFind(iTheDay," ")); gMoun=StringSubstr(iMounthN,StringFind(iMounthN,gMoun,2)-2,2); iResult=TagContent(iTheDay," ",",",gDay); gYear=StringSubstr(iTheDay,StringFind(iTheDay,", ")+2); iTheDay=gYear+"."+gMoun+"."+gDay+" 00:00:00"; TimeToStruct(StringToTime(iTheDay),gDateTime); iResult=TagDelete(iInpStr,"",""); return(false); }}//if(TagContent(InpStrBuff,"id=\"theDay","/td>",iTheDay)) int dFormat=0; dFormat=(TagContent(iInpStr,"event_timestamp=\"","\">",iDate)) ?(1) :( (TagContent(iInpStr,"data-event-datetime=\"","\">",iDate)) ?(2) :(0) ); {if((dFormat==1)||(dFormat==2)) //если один из распознаваемых форматов { //----- Date Time if(dFormat==2)StringReplace(iDate,"/",".");//в формате апреля 2016 if(dFormat==1)StringReplace(iDate,"-",".");//в формате ранее апреля 2016 iDateTim=TimeToString(StringToTime(iDate),TIME_DATE|TIME_MINUTES); TimeToStruct(StringToTime(iDate),gDateTime); iResult=TagDelete(iInpStr,""); iResult=TagDelete(iInpStr,""); iInpStr=StringSubstr(iInpStr,StringFind(iInpStr,"","",iCouN); iResult=TagDelete(iInpStr,""); iInpStr=StringSubstr(iInpStr,StringFind(iInpStr,"",iVolatility);}} //----- Impact N iImpN=StringSubstr(iImpactMN,StringFind(iImpactMN,iVolatility,1)-1,1); iResult=TagDelete(iInpStr,""); iInpStr=StringSubstr(iInpStr,StringFind(iInpStr,""); //Удаляем тип события //----- Event iResult=TagContent(iInpStr,"target=\"_blank\">","",iEvent); {if(!iResult){iResult=TagContent(iInpStr,"event\">",""); //Удаляем дату n=StringReplace(iEvent,"&",""); iInpStr=StringSubstr(iInpStr,StringFind(iInpStr,"",iActual); iResult=TagContent(iActual,"\">","<",iActual); n=StringReplace(iActual," ",""); iResult=TagDelete(iInpStr,""); //Удаляем дату iInpStr=StringSubstr(iInpStr,StringFind(iInpStr,"",iForecast); iResult=TagContent(iForecast,"\">","<",iForecast); n=StringReplace(iForecast," ",""); iResult=TagDelete(iInpStr,""); //Удаляем дату iInpStr=StringSubstr(iInpStr,StringFind(iInpStr,"",iPrevious); iResult=TagContent(iPrevious,"\">","<",iPrevious); n=StringReplace(iPrevious," ",""); }else{//Если даты нет но возможно "All Day" {if(TagContent(iInpStr,"","",iDate)&&(iDate=="All Day")) //если есть дата тэг { //----- Date Time iDateTim=TimeToString(StructToTime(gDateTime),TIME_DATE|TIME_MINUTES); iResult=TagDelete(iInpStr,""); iInpStr=StringSubstr(iInpStr,StringFind(iInpStr,""); iInpStr=StringSubstr(iInpStr,StringFind(iInpStr,"",iVolatility); iResult=TagContent(iVolatility,"\">","",iVolatility); //----- Impact N iImpN=StringSubstr(iImpactMN,StringFind(iImpactMN,iVolatility,1)-1,1); iResult=TagDelete(iInpStr,""); iInpStr=StringSubstr(iInpStr,StringFind(iInpStr,"",iEvent); iResult=TagContent(iInpStr,"\">","","",iMouDay)) }}//if(TagContent(iInpStr,"","",iMouDay)) iOutStr=iDateTim+";"+iEvent+";"+iCountry+";"+iCouN+";"+iImpN+";"+iPrevious+";"+iForecast+";"+iActual+";";// //Print("iOutStr=",iOutStr); //Print("3. iRes=",iResult," iPrevious=",iPrevious," iStr=",iInpStr); return(true); }}//if(iMode==4) //----- return(false); }//StringConverter() // //====================================================================================================== // StringNormal() - удаление из строки не цифровых символов //====================================================================================================== void StringNormal(string &iInpStr){ string Cifr="0123456789.-KMBT$|%"; StringTrimLeft(iInpStr); StringTrimRight(iInpStr); StringToUpper(iInpStr); //Print(iInpStr); {for(int i=StringLen(iInpStr)-1;i>=0;i--) { {if(StringFind(Cifr,StringSubstr(iInpStr,i,1),0)<0) { //Print(StringSubstr(iInpStr,i,1)); StringSetCharacter(iInpStr,i,'#'); }}//if(StringFind(Cifr,StringSubstr(iInpStr,i,1),0)<0) }}//for(int i=StringLen(iInpStr)-1;i>=0;i--) //Print(StringReplace(iInpStr,"#","")); StringReplace(iInpStr,"#",""); return; }//StringNormal() // //====================================================================================================== // NormalizeFile() - Удаление из файла повторов и косяков //====================================================================================================== bool NormalizeFile( string iInFileName, string iTmpFileName){ string OutStr=""; uchar LastChar=char(0), InpChar=char(0); int n=0, CharOperation=0;// 0/1/2/3 - без изменений/пропустить/заменить/конец строки //----- ResetLastError(); //int InFileHandle = FileOpen(iInFileName,FILE_READ|FILE_BIN|FILE_TXT|FILE_ANSI|FILE_COMMON,','); int InFileHandle = FileOpen(iInFileName,FILE_READ|FILE_BIN|FILE_COMMON,','); {if ((InFileHandle!=INVALID_HANDLE)&&(FileSize(InFileHandle)!=0)) { ResetLastError(); int OutFileHandle=FileOpen(iTmpFileName,FILE_WRITE|FILE_TXT|FILE_ANSI|FILE_COMMON,','); {if(OutFileHandle!=INVALID_HANDLE) { bool NewString=true; {while(!FileIsEnding(InFileHandle)) { CharOperation=0;//Передать на выход по умолчанию ResetLastError(); InpChar=(uchar)FileReadInteger(InFileHandle,1); //Print(InpChar,"=",CharToString(InpChar)); {if(CharToString(InpChar)==">")//Конец тега - конец строки { CharOperation=3; }}//if(CharToString(InpChar)==">") {if(CharToString(InpChar)==" ")//Пробел... { {if(CharToString(LastChar)==" ")//... после пробела { CharOperation=1;//Пропустить }else{ CharOperation=0;//Передать на выход }}//if(CharToString(LastChar)==" ") }}//if(CharToString(InpChar)==" ") LastChar=InpChar; {switch(CharOperation) { case 1://Пропустить //Просто ничего не делать break; case 2://Заменить //Пока не известно, что можно сразу заменять break; case 3://Конец строки - запись строки в файл ResetLastError(); OutStr=OutStr+CharToString(InpChar); //Подчистка n=StringReplace(OutStr,"\t","");//Удаляем табуляции n=StringReplace(OutStr,"\n","");//удаляем возвраты каретки n=StringReplace(OutStr,"\r","");//удаляем переводы строк n=StringReplace(OutStr,"\0",""); n=StringReplace(OutStr," ","");//  n=StringReplace(OutStr,"&","");//& n=StringReplace(OutStr,"<","");//< n=StringReplace(OutStr,"'","");//' n=StringReplace(OutStr," <","<");//удаляем пробел перед тегом n=StringReplace(OutStr," "," ");//удаляем двойные пробелы OutStr=((StringGetCharacter(OutStr,0)==StringGetCharacter(" ",0))?(StringSubstr(OutStr,1)):(OutStr));//удаляем пробел в начале строки //OutStr=OutStr+"\n\r";//<ВК><ПС> OutStr=OutStr+"\n";//<ВК> //Print("OutStr=",OutStr); if(FileWriteString(OutFileHandle,OutStr)==0)return(false); OutStr=""; break; default://0 - Передать без изменений на выход OutStr=OutStr+CharToString(InpChar); //Print("OutStr=",OutStr); break; }}//switch(CharOperation) }}//while(!FileIsEnding(file_handle)) //Закрытие выходного файла ResetLastError(); FileClose(OutFileHandle); //Закрытие входного файла ResetLastError(); FileClose(InFileHandle); }else{ Print("NormalizeFile>> Операция FileOpen Write неудачна, ошибка ",GetLastError()); return(false); }}//if(OutFileHandle!=INVALID_HANDLE) }else{ Print("NormalizeFile>> Операция FileOpen Read неудачна, ошибка ",GetLastError()); return(false); }}//if ((InFileHandle!=INVALID_HANDLE)&&(FileSize(InFileHandle)!=0)) //----- return(true); }//NormalizeFile()