//+------------------------------------------------------------------+ //| csv.mq4 | //| Copyright © 2011, XrustSolution. | //| mail: xrustx@gmail.com | //+------------------------------------------------------------------+ #property copyright "Copyright © 2011, XrustSolution." //| #property link "mail: xrustx@gmail.com" //| //+------------------------------------------------------------------+ //| int StringReplace(string &in_out,string find,string repl="") | //| int WriteFileInArray(string fn, string in[]) | //| int ReadFileToArray(string fn, string &in_out[],string del="^")| //| string GetContentFromString(string in,string tag,int count,string prop,string val) //| string GetContentFromArray(string in[],string tag,int count,string prop,string val) //| int WriteDataFromHtml(string in[],string &head[5],string &data[][15]) читает данные из ХТМЛь массива в строковый массив, возвращает количество записанных строк //| int WriteDataFromCsv (string in[],string &head[5],string &data[][15]) читает данные из ЦСВ массива в строковый массив, возвращает количество записанных строк //| string GetContentFromScvCell(string in,int pos,string del=",") Возвращает значение ячейки из ЦСВ строки //| int GetCsvStringSize(string in,string del=",") Возвращает количество ячеек (столбиков) в ЦСВ строке //| double Str2Double(string in) убирает пропуски внутри числа и преобразовывает //| string Double2Str(double in) разделяет разряды пропусками согласно форматированию //| string StringUpper(string in) возвращает строку в верхнем регистре //| string GetValueFromString(string in,string tag,int count,string prop) возвращает значение свойства (стиль,класс,айди) //| double nds(double in,string sy) //| string Dig2str(string sy) //+------------------------------------------------------------------+ //| Function : Dig2str | //| Copyright © 2010, XrustSolution. | //| mail: xrustx@gmail.com | //+------------------------------------------------------------------+ int Digit(string sy){int dig =MarketInfo(sy,MODE_DIGITS); if(dig==2||dig==4){dig++;} return(dig); } //+------------------------------------------------------------------+ //| Function : Dig2str | //| Copyright © 2010, XrustSolution. | //| mail: xrustx@gmail.com | //+------------------------------------------------------------------+ string Dig2str(string sy){string out="";int i=0,dig = Digit(sy); while(i96 && c<123) n=c-32; // a-z -> A-Z if (c>223 && c<256) n=c-32; // а-я -> А-Я if (c==184) n=168; // ё -> Ё if (n>0) s=StringSetChar(s, i, n); } return(s); } //+------------------------------------------------------------------+ //| Function : WriteFileInArr | //| Copyright © 2010, XrustSolution. | //| mail: xrustx@gmail.com | //+------------------------------------------------------------------+ int WriteFileFromArray(string fn, string in[]){int i,x,y,hd,res=0; x = ArraySize(in); hd = FileOpen(fn,FILE_CSV|FILE_WRITE); if(hd<1){return(-GetLastError());} for(i=0;i=x){ FileClose(hd); return(-4002); break; } } FileClose(hd); ArrayResize(in,i-1); return(i); } //+------------------------------------------------------------------+ //| Function : GetContentFromString |Функция ищет в HTML строке нужный тег и возвращает его значение (контент) //| Copyright © 2010, XrustSolution. |Позволяет производить фильтрацию по номер вхождения, свойству и значению //| mail: xrustx@gmail.com | //+------------------------------------------------------------------+ string GetContentFromString(string in, //|Входная строка в которо будет производиться поиск string teg, //|Искомый тег int co=1, //|Номер тега в строке (их может быть несколько), по умолчанию возврат первого найденного string prop="", //|Свойство (стиль, клас, ID) по умолчанию без свойств (любой) string val="" //|Значение свойства по умолчанию без свойств (любое) ){ //| //+------------------------------------------------------------------+ string out="",tg=""; //| int i=0,x=0,y=0,z=0,ln=StringLen(teg)+3; //| while(i",x)+1; //|ищем конец тега if(prop!=""&&val!=""){ //|если есть уточнение по свойствам tg = StringSubstr(in,x,y-x); //|читаем весь тег в переменную if(StringFind(tg,prop,0)>=0){ //|если находим свойство if(StringFind(tg,val,0)<0 && //|значение без кавычек StringFind(tg,"\""+val+"\"",0)<0 && //|или значение в двойных кавычках StringFind(tg,"\'"+val+"\'",0)<0 ){ //|или значение в одинарных кавычках z = StringFind(in,"",0); //|если значение не совпадает с искомым in = StringSubstr(in,z+ln); //|обрезаем считaнный тег с контентом у исходной строки continue; //|ищем следующий тег } //| }else{ //|если не находим свойство z = StringFind(in,"",0); //|ищем закрывающий тег in = StringSubstr(in,z+ln); //|обрезаем считaнный тег с контентом у исходной строки continue; //|ищем следующий тег } //| } //| z = StringFind(in,"",0); //|ищем закрывающий тег out = StringSubstr(in,y,z-y); //|читаем контент in = StringSubstr(in,z+ln); //|обрезаем считaнный тег с контентом у исходной строки i++; //|возврат в начало для проверки номера вхождения } //| return(out); //|возврат значения } //| //+------------------------------------------------------------------+ //| Function : GetContentFromArray |Функция ищет в HTML массиве строк нужный тег и возвращает его значение (контент) //| Copyright © 2010, XrustSolution. |Позволяет производить фильтрацию по номер вхождения, свойству и значению //| mail: xrustx@gmail.com | //+------------------------------------------------------------------+ string GetContentFromArray(string in[], //|Входной масив строк в котором будет производиться поиск string teg, //|Искомый тег int co=1, //|Номер тега в строке (их может быть несколько), по умолчанию возврат первого найденного string prop="", //|Свойство (стиль, клас, ID) по умолчанию без свойств (любой) string val="" //|Значение свойства по умолчанию без свойств (любое) ){ //| //+------------------------------------------------------------------+ string out="",tg=""; //| int i,ii=0,x=0,xx=0,y=0,z=0,st=0,sz=ArraySize(in); //| for(i=0;i= 0){ //| xx = StringFind(in[i],">",x)+1; //|ищем конец тега tg = StringSubstr(in[i],x,xx-x); //| if(prop!=""&& val!=""){ //| if(StringFind(tg,prop,0)>=0){ //|если находим свойство if(StringFind(tg,val,0)<0 && //|значение без кавычек StringFind(tg,"\""+val+"\"",0)<0 && //|или значение в двойных кавычках StringFind(tg,"\'"+val+"\'",0)<0 ){ //|или значение в одинарных кавычках continue; //|ищем следующий тег } //| }else{ //|если не находим свойство continue; //|ищем следующий тег } //| } //| ii++; //| }else{ //| z=0; //| break; //| } //| } //| if(x<0){z=0;continue;} //|перенос строки если начало нужного тега не найдено if(tg==""){tg = StringSubstr(in[i],x);} //| x = StringFind(in[i],">",x)+1; //|ищем конец тега if(x<0){return("");} //|выход если внутренности тега перенесены (кривое форматирование)!!!! if(st==0){st=x;} //|записываем первое вхождение символа конца тега y = StringFind(in[i],"",x); //|ищем закрывающий тег if(y<0){ //| out = out + in[i]; //|если конец не на этой строке - добавляем и переходим на следующую continue; //| } //| if(st!=i){x=0;} //| out = out + StringSubstr(in[i],0,y); //| out = StringSubstr(out,st); //| break; //| } //| return(out); //| } //| //+------------------------------------------------------------------+ //| Function : GetContentFromString |Функция ищет в HTML строке нужный тег и возвращает его значение (контент) //| Copyright © 2010, XrustSolution. |Позволяет производить фильтрацию по номер вхождения, свойству и значению //| mail: xrustx@gmail.com | //+------------------------------------------------------------------+ string GetTagValueFromString(string in, //|Входная строка в которо будет производиться поиск string teg, //|Искомый тег int co=1, //|Номер тега в строке (их может быть несколько), по умолчанию возврат первого найденного string prop="" //|Свойство (стиль, клас, ID) по умолчанию без свойств (любой) ){ //| //+------------------------------------------------------------------+ string out="",tg="",prom="",pv="",val=""; //| int i=0,x=0,y=0,z=0,pr=0,cv=0,ln=StringLen(teg)+3; //| while(i",x)+1; //|ищем конец тега tg = StringSubstr(in,x,y-x); pr = StringFind(tg,prop,0); if(prop==""){ out = StringSubstr(tg,StringLen(teg)+1); out = StringSubstr(out,0,StringFind(out,">")); if(out==">"){out="";} z = StringFind(in,"",0); //|ищем закрывающий тег in = StringSubstr(in,z+ln); //|обрезаем считaнный тег с контентом у исходной строки i++; continue; }else{ if(pr>=0){ //|если находим свойство pv = StringSubstr(tg,pr+StringLen(prop)+1); //|читаем весь тег в переменную cv = StringFind(pv,"\""); if(cv >= 0 ){ out = StringSubstr(pv,cv,StringFind(pv,"\"",cv+1)+1); z = StringFind(in,"",0); //|ищем закрывающий тег in = StringSubstr(in,z+ln); //|обрезаем считaнный тег с контентом у исходной строки i++; continue; } cv = StringFind(pv," "); if(cv>=0){ out = StringSubstr(pv,0,StringFind(pv," ")); z = StringFind(in,"",0); //|ищем закрывающий тег in = StringSubstr(in,z+ln); //|обрезаем считaнный тег с контентом у исходной строки i++; continue; } cv = StringFind(pv,";"); if(cv>=0){ out = StringSubstr(pv,0,StringFind(pv,";")); z = StringFind(in,"",0); //|ищем закрывающий тег in = StringSubstr(in,z+ln); //|обрезаем считaнный тег с контентом у исходной строки i++; continue; } cv = StringFind(pv,">"); if(cv>=0){ out = StringSubstr(pv,0,StringFind(pv,">")); z = StringFind(in,"",0); //|ищем закрывающий тег in = StringSubstr(in,z+ln); //|обрезаем считaнный тег с контентом у исходной строки i++; continue; } }else{ //|если не находим свойство z = StringFind(in,"",0); //|ищем закрывающий тег in = StringSubstr(in,z+ln); i++; //|обрезаем считaнный тег с контентом у исходной строки continue; //|ищем следующий тег } } //| } //| return(StringTrimLeft(StringTrimRight(out))); //|возврат значения } //| //+------------------------------------------------------------------+ //| Function : Str2Dig | //| Copyright © 2010, XrustSolution. | //| mail: xrustx@gmail.com | //+------------------------------------------------------------------+ string Str2Dig(string in){int i,x,y,ln;string prom=""; prom =StringTrimLeft(StringTrimRight(in)); ln=StringLen(prom); if(ln==0){return("0.00");} if(ln==1){return(prom+".00");} i = StringFind(prom,"."); if(i<0){return(prom+".00");} if(ln-i==1){return(prom+"00");} if(ln-i==2){return(prom+"0");} return(prom); } //+------------------------------------------------------------------+ //| Function :GetContentFromScvCell | //| Copyright © 2010, XrustSolution. | //| mail: xrustx@gmail.com | //+------------------------------------------------------------------+ string GetCorrectTime(string in){string lf,rt,prom,out; string tm = StringTrimLeft(StringTrimRight(StringSubstr(in,10))); if(StringLen(tm)<5){tm = "0"+tm;} string dt = StringSubstr(in,0,5); string ear= StringTrimLeft(StringTrimRight(StringSubstr(in,6,4))); if(StringLen(ear)<4){ear = "20"+ear;} out = ear + "." + dt + " " + tm; return(out); } //+------------------------------------------------------------------+ //| Function :GetContentFromScvCell | //| Copyright © 2010, XrustSolution. | //| mail: xrustx@gmail.com | //+------------------------------------------------------------------+ string GetContentFromScvCell(string in,int pos,string del){int i=-1,x,y; string det=";",out=""; while(i=0){out="";} return(out); } //+------------------------------------------------------------------+ //| Function : GetCsvStringSize | //| Copyright © 2010, XrustSolution. | //| mail: xrustx@gmail.com | //+------------------------------------------------------------------+ string GetCsvDelimiter(string in){int i,x,sh[256],sz=StringLen(in);string res=" "; for(i=0;i