1041 lines
30 KiB
Plaintext
1041 lines
30 KiB
Plaintext
//---------------------------------------------------------------------------
|
||
#pragma hdrstop
|
||
//---------------------------------------------------------------------------
|
||
#include "stdTools.h"
|
||
#include "mathTools.h"
|
||
|
||
//#include <Math.h>
|
||
#include <sstream>
|
||
#include <iostream>
|
||
#include <iomanip>
|
||
#include <fstream>
|
||
#include <locale>
|
||
#include <vector>
|
||
//---------------------------------------------------------------------------
|
||
//#include <atlbase.h> //Çëî :-)
|
||
#if defined( _VC )
|
||
#include < ctime >
|
||
#endif
|
||
#if defined( _BORLAND )
|
||
#include <vcl.h>
|
||
#endif
|
||
#include <Windows.h> //Äëÿ Windows
|
||
#include <time.h> //Ôóíêöèÿ âðåìåíè
|
||
|
||
#include "tcDebug.h"
|
||
//---------------------------------------------------------------------------
|
||
//260 was taken from windef.h
|
||
#ifndef MAX_PATH
|
||
#define MAX_PATH 260
|
||
#endif
|
||
|
||
//---------------------------------------------------------------------------
|
||
/*template <typename T>
|
||
std::string toStdStr(T val)
|
||
{
|
||
std::ostringstream oss;
|
||
oss << val;
|
||
return oss.str();
|
||
}*/
|
||
//---------------------------------------------------------------------------
|
||
std::wstring s2ws(const std::string& s)
|
||
{
|
||
int len;
|
||
int slength = (int)s.length();// + 1;
|
||
if(slength==0) return L"";
|
||
len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0);
|
||
std::wstring r(len, L'\0');
|
||
MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, &r[0], len);
|
||
return r;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
std::string ws2s(const std::wstring& s)
|
||
{
|
||
int len;
|
||
int slength = (int)s.length();// + 1;
|
||
if(slength==0) return "";
|
||
len = WideCharToMultiByte(CP_ACP, 0, s.c_str(), slength, 0, 0, 0, 0);
|
||
std::string r(len, '\0');
|
||
WideCharToMultiByte(CP_ACP, 0, s.c_str(), slength, &r[0], len, 0, 0);
|
||
return r;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Êîíâåðòèì èç Unicode â DOS 866 êîäèðîâêó
|
||
std::string UnicodeToDOS886(std::wstring str)
|
||
{
|
||
std::string rez;
|
||
rez.reserve(str.length()); //Êîëè÷åñòâî ñèìâîëîâ íå äîëæíî èçìåíèòüñÿ
|
||
|
||
for(uint4 i=0;i<str.length();i++)
|
||
{
|
||
switch(str[i])
|
||
{
|
||
case L'À': rez+=(char)0x80; break;
|
||
case L'Á': rez+=(char)0x81; break;
|
||
case L'Â': rez+=(char)0x82; break;
|
||
case L'Ã': rez+=(char)0x83; break;
|
||
case L'Ä': rez+=(char)0x84; break;
|
||
case L'Å': rez+=(char)0x85; break;
|
||
case L'¨': rez+=(char)0x85; break; //case L'¨': rez+=(char)0xF0; break;
|
||
case L'Æ': rez+=(char)0x86; break;
|
||
case L'Ç': rez+=(char)0x87; break;
|
||
case L'È': rez+=(char)0x88; break;
|
||
case L'É': rez+=(char)0x89; break;
|
||
case L'Ê': rez+=(char)0x8A; break;
|
||
case L'Ë': rez+=(char)0x8B; break;
|
||
case L'Ì': rez+=(char)0x8C; break;
|
||
case L'Í': rez+=(char)0x8D; break;
|
||
case L'Î': rez+=(char)0x8E; break;
|
||
case L'Ï': rez+=(char)0x8F; break;
|
||
case L'Ð': rez+=(char)0x90; break;
|
||
case L'Ñ': rez+=(char)0x91; break;
|
||
case L'Ò': rez+=(char)0x92; break;
|
||
case L'Ó': rez+=(char)0x93; break;
|
||
case L'Ô': rez+=(char)0x94; break;
|
||
case L'Õ': rez+=(char)0x95; break;
|
||
case L'Ö': rez+=(char)0x96; break;
|
||
case L'×': rez+=(char)0x97; break;
|
||
case L'Ø': rez+=(char)0x98; break;
|
||
case L'Ù': rez+=(char)0x99; break;
|
||
case L'Ú': rez+=(char)0x9A; break;
|
||
case L'Û': rez+=(char)0x9B; break;
|
||
case L'Ü': rez+=(char)0x9C; break;
|
||
case L'Ý': rez+=(char)0x9D; break;
|
||
case L'Þ': rez+=(char)0x9E; break;
|
||
case L'ß': rez+=(char)0x9F; break;
|
||
case L'à': rez+=(char)0xA0; break;
|
||
case L'á': rez+=(char)0xA1; break;
|
||
case L'â': rez+=(char)0xA2; break;
|
||
case L'ã': rez+=(char)0xA3; break;
|
||
case L'ä': rez+=(char)0xA4; break;
|
||
case L'å': rez+=(char)0xA5; break;
|
||
case L'¸': rez+=(char)0xA5; break; //case L'¸': rez+=(char)0xF1; break;
|
||
case L'æ': rez+=(char)0xA6; break;
|
||
case L'ç': rez+=(char)0xA7; break;
|
||
case L'è': rez+=(char)0xA8; break;
|
||
case L'é': rez+=(char)0xA9; break;
|
||
case L'ê': rez+=(char)0xAA; break;
|
||
case L'ë': rez+=(char)0xAB; break;
|
||
case L'ì': rez+=(char)0xAC; break;
|
||
case L'í': rez+=(char)0xAD; break;
|
||
case L'î': rez+=(char)0xAE; break;
|
||
case L'ï': rez+=(char)0xAF; break;
|
||
case L'ð': rez+=(char)0xE0; break;
|
||
case L'ñ': rez+=(char)0xE1; break;
|
||
case L'ò': rez+=(char)0xE2; break;
|
||
case L'ó': rez+=(char)0xE3; break;
|
||
case L'ô': rez+=(char)0xE4; break;
|
||
case L'õ': rez+=(char)0xE5; break;
|
||
case L'ö': rez+=(char)0xE6; break;
|
||
case L'÷': rez+=(char)0xE7; break;
|
||
case L'ø': rez+=(char)0xE8; break;
|
||
case L'ù': rez+=(char)0xE9; break;
|
||
case L'ú': rez+=(char)0xEA; break;
|
||
case L'û': rez+=(char)0xEB; break;
|
||
case L'ü': rez+=(char)0xEC; break;
|
||
case L'ý': rez+=(char)0xED; break;
|
||
case L'þ': rez+=(char)0xEE; break;
|
||
case L'ÿ': rez+=(char)0xEF; break;
|
||
//Êàç-ÿç
|
||
/* case L'?': rez+=(char)0xDB; break;
|
||
case L'?': rez+=(char)0xDC; break;
|
||
case L'?': rez+=(char)0xDE; break;
|
||
case L'?': rez+=(char)0xDF; break;
|
||
case L'?': rez+=(char)0xF0; break;
|
||
case L'?': rez+=(char)0xF1; break;
|
||
case L'?': rez+=(char)0xF3; break;
|
||
case L'?': rez+=(char)0xF4; break;
|
||
case L'?': rez+=(char)0xF5; break;
|
||
case L'?': rez+=(char)0xF6; break;
|
||
case L'?': rez+=(char)0xF7; break;
|
||
case L'?': rez+=(char)0xF8; break;
|
||
case L'?': rez+=(char)0xFD; break;
|
||
case L'?': rez+=(char)0xFE; break;
|
||
*/
|
||
default: rez+=(char)str[i]; break;
|
||
}
|
||
}
|
||
return rez;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Îáðàòíàÿ êîíâåðòàöèÿ èç DOS886 â Unicode
|
||
std::wstring DOS886ToUnicode(std::string str)
|
||
{
|
||
std::wstring rez;
|
||
rez.reserve(str.length()); //Êîëè÷åñòâî ñèìâîëîâ íå äîëæíî èçìåíèòüñÿ
|
||
|
||
for(uint4 i=0;i<str.length();i++)
|
||
{
|
||
switch(str[i])
|
||
{
|
||
case (char)0x80: rez+=L'À'; break;
|
||
case (char)0x81: rez+=L'Á'; break;
|
||
case (char)0x82: rez+=L'Â'; break;
|
||
case (char)0x83: rez+=L'Ã'; break;
|
||
case (char)0x84: rez+=L'Ä'; break;
|
||
case (char)0x85: rez+=L'Å'; break;
|
||
//case (char)0xF0: rez+=L'¨'; break; //Â ìåñòî "¨" â ïðèíòåðå "?"
|
||
case (char)0x86: rez+=L'Æ'; break;
|
||
case (char)0x87: rez+=L'Ç'; break;
|
||
case (char)0x88: rez+=L'È'; break;
|
||
case (char)0x89: rez+=L'É'; break;
|
||
case (char)0x8A: rez+=L'Ê'; break;
|
||
case (char)0x8B: rez+=L'Ë'; break;
|
||
case (char)0x8C: rez+=L'Ì'; break;
|
||
case (char)0x8D: rez+=L'Í'; break;
|
||
case (char)0x8E: rez+=L'Î'; break;
|
||
case (char)0x8F: rez+=L'Ï'; break;
|
||
case (char)0x90: rez+=L'Ð'; break;
|
||
case (char)0x91: rez+=L'Ñ'; break;
|
||
case (char)0x92: rez+=L'Ò'; break;
|
||
case (char)0x93: rez+=L'Ó'; break;
|
||
case (char)0x94: rez+=L'Ô'; break;
|
||
case (char)0x95: rez+=L'Õ'; break;
|
||
case (char)0x96: rez+=L'Ö'; break;
|
||
case (char)0x97: rez+=L'×'; break;
|
||
case (char)0x98: rez+=L'Ø'; break;
|
||
case (char)0x99: rez+=L'Ù'; break;
|
||
case (char)0x9A: rez+=L'Ú'; break;
|
||
case (char)0x9B: rez+=L'Û'; break;
|
||
case (char)0x9C: rez+=L'Ü'; break;
|
||
case (char)0x9D: rez+=L'Ý'; break;
|
||
case (char)0x9E: rez+=L'Þ'; break;
|
||
case (char)0x9F: rez+=L'ß'; break;
|
||
case (char)0xA0: rez+=L'à'; break;
|
||
case (char)0xA1: rez+=L'á'; break;
|
||
case (char)0xA2: rez+=L'â'; break;
|
||
case (char)0xA3: rez+=L'ã'; break;
|
||
case (char)0xA4: rez+=L'ä'; break;
|
||
case (char)0xA5: rez+=L'å'; break;
|
||
//case (char)0xF1: rez+=L'¸'; break; //Â ìåñòî "¸" â ïðèíòåðå "?"
|
||
case (char)0xA6: rez+=L'æ'; break;
|
||
case (char)0xA7: rez+=L'ç'; break;
|
||
case (char)0xA8: rez+=L'è'; break;
|
||
case (char)0xA9: rez+=L'é'; break;
|
||
case (char)0xAA: rez+=L'ê'; break;
|
||
case (char)0xAB: rez+=L'ë'; break;
|
||
case (char)0xAC: rez+=L'ì'; break;
|
||
case (char)0xAD: rez+=L'í'; break;
|
||
case (char)0xAE: rez+=L'î'; break;
|
||
case (char)0xAF: rez+=L'ï'; break;
|
||
case (char)0xE0: rez+=L'ð'; break;
|
||
case (char)0xE1: rez+=L'ñ'; break;
|
||
case (char)0xE2: rez+=L'ò'; break;
|
||
case (char)0xE3: rez+=L'ó'; break;
|
||
case (char)0xE4: rez+=L'ô'; break;
|
||
case (char)0xE5: rez+=L'õ'; break;
|
||
case (char)0xE6: rez+=L'ö'; break;
|
||
case (char)0xE7: rez+=L'÷'; break;
|
||
case (char)0xE8: rez+=L'ø'; break;
|
||
case (char)0xE9: rez+=L'ù'; break;
|
||
case (char)0xEA: rez+=L'ú'; break;
|
||
case (char)0xEB: rez+=L'û'; break;
|
||
case (char)0xEC: rez+=L'ü'; break;
|
||
case (char)0xED: rez+=L'ý'; break;
|
||
case (char)0xEE: rez+=L'þ'; break;
|
||
case (char)0xEF: rez+=L'ÿ'; break;
|
||
//Êàç-ÿç
|
||
case (char)0xDB: rez+=L'?'; break;
|
||
case (char)0xDC: rez+=L'?'; break;
|
||
case (char)0xDE: rez+=L'?'; break;
|
||
case (char)0xDF: rez+=L'?'; break;
|
||
case (char)0xF0: rez+=L'?'; break;
|
||
case (char)0xF1: rez+=L'?'; break;
|
||
case (char)0xF3: rez+=L'?'; break;
|
||
case (char)0xF4: rez+=L'?'; break;
|
||
case (char)0xF5: rez+=L'?'; break;
|
||
case (char)0xF6: rez+=L'?'; break;
|
||
case (char)0xF7: rez+=L'?'; break;
|
||
case (char)0xF8: rez+=L'?'; break;
|
||
case (char)0xFD: rez+=L'?'; break;
|
||
case (char)0xFE: rez+=L'?'; break;
|
||
|
||
default: rez+=(char)str[i]; break;
|
||
}
|
||
}
|
||
return rez;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Float â ñòðîêó
|
||
std::string FloatToStdStr(float val)
|
||
{
|
||
std::ostringstream oss;
|
||
oss << val;
|
||
return oss.str();
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
std::string IntToStdStr(int val)
|
||
{
|
||
std::ostringstream oss;
|
||
oss << val;
|
||
return oss.str();
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
template <typename T>
|
||
std::string toStringHex(T val)
|
||
{
|
||
std::ostringstream oss;
|
||
oss << std::hex << val;
|
||
return oss.str();
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
std::string toStringHex2(int val)
|
||
{
|
||
std::ostringstream oss;
|
||
oss << std::hex << val;
|
||
return oss.str();
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ïðåîáðàçîâàòü HEX ñòðîêó â ÷èñëî
|
||
template <typename T>
|
||
T fromStringHex(std::string val)
|
||
{
|
||
T value;
|
||
std::istringstream iss(val);
|
||
iss >> std::hex >> value;
|
||
return value;
|
||
}
|
||
//----------------------------------------------------------------------------
|
||
//Çàêîäèðîâàòü äâîè÷íî äåñÿòè÷íîå ÷èñëî
|
||
//Ïðåîáðàçîâàòü ñòðîêó öèôð â ñòðîêó áàéò ïðèìåð "1234" â 2 áàéòà [12h,34h] åñëè íå÷¸òíîå òî 0 â íà÷àëå
|
||
std::string CodeBSD(std::string str)
|
||
{
|
||
if(str.length()%2!=0) str="0"+str;
|
||
//Ïðåîáðàçóåì 2 ñèìâîëà â 1 áàéò
|
||
std::string rez;
|
||
size_t len=str.length()/2;
|
||
for(size_t i=0;i<len;i++)
|
||
{
|
||
std::string ch;
|
||
ch+=str[i*2];
|
||
ch+=str[i*2+1];
|
||
unsigned char hch = fromStringHex<int>(ch);
|
||
rez+=hch;
|
||
}
|
||
return rez;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Çàêîäèðîâàòü äâîè÷íî äåñÿòè÷íîå ÷èñëî
|
||
//Ïðåîáðàçîâàòü ñòðîêó öèôð â ñòðîêó áàéò ïðèìåð "1234" â 2 áàéòà [12h,34h] åñëè íå÷¸òíîå òî 0 â íà÷àëå
|
||
//len - êîëè÷åñòâî (áàéò)ñèìâîëîâ äîáàâèò íóëè â íà÷àëå åñëè ïîëó÷èëîñü ìåíüøå
|
||
std::string CodeBSD(int val,int len)
|
||
{
|
||
std::string str=CodeBSD(IntToStdStr(val));
|
||
for(size_t i=str.length();i<len;i++) //Ìåäëåííî
|
||
str=(char)0x00+str;
|
||
return str;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Äâîè÷íî äåñÿòè÷íûé ñèìâîë â int
|
||
int BSDToInt(char chr)
|
||
{
|
||
//return StdStrToInt(DecodeBSD(chr)); //TODO èñïðàâèòü äëÿ áèëäåðà
|
||
return 0;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Äâîè÷íî äåñÿòè÷íóþ ñòðîêó â int
|
||
int BSDToInt(std::string str, size_t start, size_t len)
|
||
{
|
||
//return StdStrToInt(DecodeBSD(str,start,len)); //TODO èñïðàâèòü äëÿ áèëäåðà
|
||
return 0;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ðàñêîäèðîâàòü äâîè÷íî äåñÿòè÷íîå ÷èñëî 2 áàéòà [12h,34h] ïðåîáðàçóþòñÿ â ñòðîêó "1234"
|
||
std::string DecodeBSD(char chr)
|
||
{
|
||
std::string rez;
|
||
unsigned char ch;
|
||
|
||
ch=(chr >> 4) & 0x0F;
|
||
if(ch<10) rez+=(char)(48+ch);
|
||
else rez+='0'; //òàêîãî íå äîëæíî áûòü
|
||
|
||
ch=chr & 0x0F;
|
||
if(ch<10) rez+=(char)(48+ch);
|
||
else rez+='0'; //òàêîãî íå äîëæíî áûòü
|
||
|
||
return rez;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ðàñêîäèðîâàòü äâîè÷íî äåñÿòè÷íîå ÷èñëî 2 áàéòà [12h,34h] ïðåîáðàçóþòñÿ â ñòðîêó "1234"
|
||
std::string DecodeBSD(std::string str, size_t start, size_t len)
|
||
{
|
||
if(len==0) len=str.length();
|
||
len=start+len;
|
||
if(len>str.length()) len=str.length();
|
||
std::string rez;
|
||
for(size_t i=start;i<len;i++)
|
||
{
|
||
rez+=DecodeBSD(str[i]);
|
||
}
|
||
return rez;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//std::wstring StringToWString( const std::string& in, std::locale loc )
|
||
std::wstring StringToWString(const std::string& in, const std::locale &loc)
|
||
{
|
||
std::wstring out;
|
||
std::string::const_iterator i( in.begin() ), ie( in.end() );
|
||
for( ; i!=ie; ++i )
|
||
out += std::use_facet<std::ctype<wchar_t> > ( loc ).widen( *i );
|
||
return out;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
void replaseChars(std::string& str, char oldCh, char newCh)
|
||
{
|
||
int indexCh = str.find(oldCh);
|
||
while (indexCh != -1)
|
||
{
|
||
str.replace(indexCh,1,1,newCh);
|
||
indexCh = str.find(oldCh,indexCh);
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
/*inline std::string replace(std::string text, std::string s, std::string d)
|
||
{
|
||
for(unsigned index=0; index=text.find(s, index), index!=std::string::npos;)
|
||
{
|
||
text.replace(index, s.length(), d);
|
||
index+=d.length();
|
||
}
|
||
return text;
|
||
}*/
|
||
//---------------------------------------------------------------------------
|
||
/*std::string getExePath()
|
||
{
|
||
//åñëè EXE òî
|
||
//return ExtractFilePath(ParamStr(0)).c_str();
|
||
//Åñëè DLL òî
|
||
return "";
|
||
}*/
|
||
//------------------------------------------------------------------------------
|
||
//Çàìåíèòü âñå âõîæäåíèÿ ñòðîêè find â sors íà repl (wxString::Replace)
|
||
std::string replaceStrings(std::string sors,std::string find,std::string repl)
|
||
{
|
||
if(find==repl) return sors;
|
||
std::string rez="";
|
||
size_t p0=0;
|
||
size_t p1 = sors.find(find,p0);
|
||
while(p1!=std::string::npos)
|
||
{
|
||
rez.append(sors,p0,p1-p0);
|
||
rez+=repl;
|
||
p0=p1+find.length();
|
||
p1=sors.find(find,p0);
|
||
}
|
||
rez.append(sors,p0,sors.length()-p0);
|
||
return rez;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
std::wstring replaceStrings(std::wstring sors,std::wstring find,std::wstring repl)
|
||
{
|
||
if(find==repl) return sors;
|
||
std::wstring rez=L"";
|
||
size_t p0=0;
|
||
size_t p1 = sors.find(find,p0);
|
||
while(p1!=std::wstring::npos)
|
||
{
|
||
rez.append(sors,p0,p1-p0);
|
||
rez+=repl;
|
||
p0=p1+find.length();
|
||
p1=sors.find(find,p0);
|
||
}
|
||
rez.append(sors,p0,sors.length()-p0);
|
||
return rez;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ïîëó÷èòü äàòó â âèäå ANSI ñòðîêè â ôîðìàòå ddmmyyyy
|
||
std::string getStrDate()
|
||
{
|
||
time_t t=time(NULL);
|
||
tm* st=localtime(&t);
|
||
|
||
std::string str1=IntToStdStr(st->tm_mday);
|
||
if(str1.length()==1) str1="0"+str1;
|
||
std::string str2=IntToStdStr(st->tm_mon+1);
|
||
if(str2.length()==1) str2="0"+str2;
|
||
std::string str3=IntToStdStr(st->tm_year+1900);
|
||
if(str3.length()==1) str3="0"+str3;
|
||
|
||
//delete st; //Îøèáêà ïàìÿòè áóäåò åñëè óäàëþ
|
||
return str1+str2+str3;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ïîëó÷èòü äàòó â âèäå Unicode ñòðîêè â ôîðìàòå ddmmyyyy
|
||
std::wstring getWStrDate()
|
||
{
|
||
return StringToWString(getStrDate(),std::locale("rus"));
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Äàòà è âðåìÿ â âèäå ñòðîêè dd.mm.yyyy hh:mm:ss 24.05.2010 15:20:26
|
||
std::string getDateTime()
|
||
{
|
||
/*
|
||
#if defined( _VC )
|
||
//Äëÿ ïðîåêòà ñ ATL áèáëèîòåêîé
|
||
std::string tmp,res="";
|
||
SYSTEMTIME st;
|
||
GetLocalTime(&st);
|
||
//Äàòà
|
||
tmp=toStdStr(st.wDay);
|
||
if(tmp.length()==1) res+="0"+tmp+"."; else res+=tmp+".";
|
||
tmp=toStdStr(st.wMonth);
|
||
if(tmp.length()==1) res+="0"+tmp+"."; else res+=tmp+".";
|
||
res+=toStdStr(st.wYear)+" ";
|
||
|
||
//Âðåìÿ
|
||
tmp=toStdStr(st.wHour);
|
||
if(tmp.length()==1) res+="0"+tmp+":"; else res+=tmp+":";
|
||
tmp=toStdStr(st.wMinute);
|
||
if(tmp.length()==1) res+="0"+tmp+":"; else res+=tmp+":";
|
||
tmp=toStdStr(st.wSecond);
|
||
if(tmp.length()==1) res+="0"+tmp; else res+=tmp;
|
||
|
||
return res;
|
||
#endif
|
||
#if defined( _WX )
|
||
//Äëÿ êðîñïëàòôîðìåííîãî ïðîåêòà wxWidgets
|
||
return "";
|
||
#endif
|
||
*/
|
||
std::string tmp,res="";
|
||
|
||
time_t t=time(NULL);
|
||
tm* st=localtime(&t);
|
||
|
||
//Äàòà
|
||
tmp=IntToStdStr(st->tm_mday);
|
||
if(tmp.length()==1) res+="0"+tmp+"."; else res+=tmp+".";
|
||
tmp=IntToStdStr(st->tm_mon+1);
|
||
if(tmp.length()==1) res+="0"+tmp+"."; else res+=tmp+".";
|
||
res+=IntToStdStr(st->tm_year+1900)+" ";
|
||
|
||
//Âðåìÿ
|
||
tmp=IntToStdStr(st->tm_hour);
|
||
if(tmp.length()==1) res+="0"+tmp+":"; else res+=tmp+":";
|
||
tmp=IntToStdStr(st->tm_min);
|
||
if(tmp.length()==1) res+="0"+tmp+":"; else res+=tmp+":";
|
||
tmp=IntToStdStr(st->tm_sec);
|
||
if(tmp.length()==1) res+="0"+tmp; else res+=tmp;
|
||
|
||
//delete st; //Îøèáêà ïàìÿòè áóäåò åñëè óäàëþ
|
||
return res;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ïðåîáðàçîâàòü â ñòðîêó (Ðàçäåëèòåëü âñåãäà òî÷êà)
|
||
//digits - Ñêîëüêî öèôð ïîñëå çàïÿòîé îñòàâëÿòü åñëè -1 òî ïî ïîëíîé
|
||
std::string FloatToStdStr(double val, int digits)
|
||
{
|
||
std::ostringstream oss;
|
||
if(digits >= 0)
|
||
oss << std::fixed << std::setprecision( digits ) << val;
|
||
else oss << std::fixed << val;
|
||
|
||
std::string str=oss.str();
|
||
int pos=MaxI4(str.find('.'),str.find(',')); //Ïîçèöèÿ çàïÿòîé â ñòðîêå (TODO âçÿòü ðàçäåëèòåëü èç ñèñòåìíûõ ïàðàìåòðîâ)
|
||
//Îáðåçàåì ñòðîêó
|
||
if(digits>=0 && pos>=0)
|
||
{ if(digits==0) digits=-1; //×òîá óáðàòü çàïÿòóþ
|
||
|
||
std::string result="";
|
||
result.append(str,0,pos+digits+1);
|
||
return result;
|
||
}else return str;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
template <typename T>
|
||
std::wstring toStdWStr(T val)
|
||
{
|
||
std::ostringstream oss;
|
||
oss << val;
|
||
|
||
std::string str=oss.str();
|
||
return StringToWString( str, std::locale("rus"));
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
std::wstring IntToStdWStr(int val)
|
||
{
|
||
return toStdWStr(val);
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
template<typename T>
|
||
T fromString(const std::string& s)
|
||
{
|
||
std::istringstream iss(s);
|
||
T res;
|
||
iss >> res;
|
||
return res;
|
||
}
|
||
//int StdStrToInt(std::string& str);
|
||
//---------------------------------------------------------------------------
|
||
//Ïðåîáðàçîâàòü ñòðîêó â ÷èñëî
|
||
//str - Èñõîäíàÿ ñòðîêà ñ ÷èñëîì
|
||
//cutInt - âûðåçàòü èç ñòðîêè òîëüêî öèôðû
|
||
int StdStrToInt(std::string& str, bool cutInt)
|
||
{
|
||
if(cutInt)
|
||
{
|
||
std::string val="";
|
||
for(unsigned int i=0;i<str.length();i++)
|
||
{
|
||
if((str[i]=='-' && (val.length()==0 || val[0]!='-')) || str[i]=='0' || str[i]=='1' || str[i]=='2' || str[i]=='3' || str[i]=='4' || str[i]=='5' || str[i]=='6' || str[i]=='7' || str[i]=='8' || str[i]=='9')
|
||
val+=str[i];
|
||
}
|
||
if(val=="") return 0;
|
||
return fromString<int>(val);
|
||
}
|
||
if(str=="") return 0;
|
||
return fromString<int>(str);
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ïðåîáðàçîâàòü ñòðîêó â ÷èñëî
|
||
//str - Èñõîäíàÿ ñòðîêà ñ ÷èñëîì
|
||
//cutInt - âûðåçàòü èç ñòðîêè òîëüêî öèôðû
|
||
int StdStrToUInt(std::string& str, bool cutInt)
|
||
{
|
||
if(cutInt)
|
||
{
|
||
std::string val="";
|
||
for(unsigned int i=0;i<str.length();i++)
|
||
{
|
||
if(str[i]=='0' || str[i]=='1' || str[i]=='2' || str[i]=='3' || str[i]=='4' || str[i]=='5' || str[i]=='6' || str[i]=='7' || str[i]=='8' || str[i]=='9')
|
||
val+=str[i];
|
||
}
|
||
if(val=="") return 0;
|
||
return fromString<int>(val);
|
||
}
|
||
if(str=="") return 0;
|
||
return fromString<int>(str);
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
float StdStrToFloat(std::string& str)
|
||
{
|
||
if(str=="") return 0;
|
||
return fromString<float>(str);
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
double StdStrToDouble(std::string& str)
|
||
{
|
||
if(str=="") return 0;
|
||
return fromString<double>(str);
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
template<typename T>
|
||
T fromWString(const std::wstring& s)
|
||
{
|
||
std::string str=WStringToString(s, std::locale("rus"));
|
||
|
||
std::istringstream iss(str);
|
||
T res;
|
||
iss >> res;
|
||
return res;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
int StdWStrToInt(const std::wstring& s)
|
||
{
|
||
return fromWString<int>(s);
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Ê âåðõíåìó ðåãèñòðó ñòðîêó
|
||
std::wstring UpperCase(const std::wstring& str)
|
||
{
|
||
std::wstring res=L""; //TODO Íàäî âûäåëèòü ïàìÿòü
|
||
for(unsigned int i=0;i<str.length();i++)
|
||
{
|
||
switch( str[i] )
|
||
{
|
||
case L'a': res+=L'A'; break;
|
||
case L'b': res+=L'B'; break;
|
||
case L'c': res+=L'C'; break;
|
||
case L'd': res+=L'D'; break;
|
||
case L'e': res+=L'E'; break;
|
||
case L'f': res+=L'F'; break;
|
||
case L'g': res+=L'G'; break;
|
||
case L'h': res+=L'H'; break;
|
||
case L'i': res+=L'I'; break;
|
||
case L'j': res+=L'J'; break;
|
||
case L'k': res+=L'K'; break;
|
||
case L'l': res+=L'L'; break;
|
||
case L'm': res+=L'M'; break;
|
||
case L'n': res+=L'N'; break;
|
||
case L'o': res+=L'O'; break;
|
||
case L'p': res+=L'P'; break;
|
||
case L'q': res+=L'Q'; break;
|
||
case L'r': res+=L'R'; break;
|
||
case L's': res+=L'S'; break;
|
||
case L't': res+=L'T'; break;
|
||
case L'u': res+=L'U'; break;
|
||
case L'v': res+=L'V'; break;
|
||
case L'w': res+=L'W'; break;
|
||
case L'x': res+=L'X'; break;
|
||
case L'y': res+=L'Y'; break;
|
||
case L'z': res+=L'Z'; break;
|
||
|
||
case L'à': res+=L'À'; break;
|
||
case L'á': res+=L'Á'; break;
|
||
case L'â': res+=L'Â'; break;
|
||
case L'ã': res+=L'Ã'; break;
|
||
case L'ä': res+=L'Ä'; break;
|
||
case L'å': res+=L'Å'; break;
|
||
case L'¸': res+=L'¨'; break;
|
||
case L'æ': res+=L'Æ'; break;
|
||
case L'ç': res+=L'Ç'; break;
|
||
case L'è': res+=L'È'; break;
|
||
case L'ê': res+=L'Ê'; break;
|
||
case L'ë': res+=L'Ë'; break;
|
||
case L'ì': res+=L'Ì'; break;
|
||
case L'í': res+=L'Í'; break;
|
||
case L'î': res+=L'Î'; break;
|
||
case L'ï': res+=L'Ï'; break;
|
||
case L'ð': res+=L'Ð'; break;
|
||
case L'ñ': res+=L'Ñ'; break;
|
||
case L'ò': res+=L'Ò'; break;
|
||
case L'ó': res+=L'Ó'; break;
|
||
case L'ô': res+=L'Ô'; break;
|
||
case L'õ': res+=L'Õ'; break;
|
||
case L'ö': res+=L'Ö'; break;
|
||
case L'÷': res+=L'×'; break;
|
||
case L'ø': res+=L'Ø'; break;
|
||
case L'ù': res+=L'Ù'; break;
|
||
case L'ú': res+=L'Ú'; break;
|
||
case L'û': res+=L'Û'; break;
|
||
case L'ü': res+=L'Ü'; break;
|
||
case L'ý': res+=L'Ý'; break;
|
||
case L'þ': res+=L'Þ'; break;
|
||
case L'ÿ': res+=L'ß'; break;
|
||
default:
|
||
res+=str[i];
|
||
}
|
||
}
|
||
return res;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Ïîëó÷èòü ñòðîêó äî óêàçàííîãî ñèìâîëà åñëè ñèìâîëà íåò òî âåðí¸ò âñþ ñòðîêó.
|
||
std::string BeforeLast(std::string str,char ch)
|
||
{
|
||
int pos=0;
|
||
for(uint4 i=0;i<str.length();i++)
|
||
{
|
||
if(str[i]==ch) pos=i;
|
||
}
|
||
if(pos==0) pos=str.length();
|
||
|
||
std::string result="";
|
||
result.append(str,0,pos);
|
||
return result;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Ïîëó÷èòü ñòðîêó äî óêàçàííîãî ñèìâîëà åñëè ñèìâîëà íåò òî âåðí¸ò âñþ ñòðîêó.
|
||
std::wstring BeforeWLast(std::wstring str,wchar_t ch)
|
||
{
|
||
int pos=0;
|
||
for(uint4 i=0;i<str.length();i++)
|
||
{
|
||
if(str[i]==ch) pos=i;
|
||
}
|
||
if(pos==0) pos=str.length();
|
||
|
||
std::wstring result=L"";
|
||
result.append(str,0,pos);
|
||
return result;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
std::string BeforeFirst(std::string str,const char ch)
|
||
{
|
||
unsigned int pos=str.find(ch);
|
||
std::string result="";
|
||
result.append(str,0,pos);
|
||
return result;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
std::wstring BeforeWFirst(std::wstring str,const wchar_t ch)
|
||
{
|
||
unsigned int pos=str.find(ch);
|
||
std::wstring result=L"";
|
||
result.append(str,0,pos);
|
||
return result;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Îòðåçàòü îò ñòðîêè äî óêàçàííîãî ñèìâîëà åñëè íå íàéäåí ñèìâîë îòðåçàåòñÿ âñÿ ñòðîêà
|
||
std::string CutBeforeFirst(std::string& str,const char ch)
|
||
{
|
||
int pos=str.find(ch);
|
||
std::string result="";
|
||
result.append(str,0,pos);
|
||
str.erase(0,pos+1);
|
||
return result;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Îòðåçàòü îò ñòðîêè äî óêàçàííîãî ñèìâîëà åñëè íå íàéäåí ñèìâîë îòðåçàåòñÿ âñÿ ñòðîêà
|
||
std::wstring CutBeforeWFirst(std::wstring& str,const wchar_t ch)
|
||
{
|
||
int pos=str.find(ch);
|
||
std::wstring result=L"";
|
||
if(pos==-1)
|
||
{
|
||
result.append(str);
|
||
str.erase();
|
||
}else
|
||
{
|
||
result.append(str,0,pos);
|
||
str.erase(0,pos+1);
|
||
}
|
||
return result;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
std::string AfterFirst(std::string str,const char ch)
|
||
{
|
||
unsigned int pos=str.find(ch);
|
||
std::string result="";
|
||
result.append(str,pos+1,str.size());
|
||
return result;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
std::wstring AfterWFirst(std::wstring str,const wchar_t ch)
|
||
{
|
||
unsigned int pos=str.find(ch);
|
||
std::wstring result=L"";
|
||
result.append(str,pos+1,str.size());
|
||
return result;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Âñ¸ ïîñëå çàäàííîãî ðàçäåëèòåëÿ, åñëè ðàçäåëèòåëü íå íàéäåí òî ñíà÷àëà ñòðîêè
|
||
std::string AfterLast(std::string str,const char ch)
|
||
{
|
||
int pos=str.find_last_of(ch)+1;
|
||
int len=str.length()-pos;
|
||
return str.substr(pos,len);
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
std::string WStringToString(std::wstring const &wstr, std::locale const &loc, char default_char)
|
||
{
|
||
if (wstr.empty())
|
||
return std::string();
|
||
|
||
std::string ret;
|
||
ret.resize(wstr.length());
|
||
|
||
std::use_facet<std::ctype<wchar_t> >(loc).narrow(&wstr[0], &wstr[0] + wstr.length(), '?', &ret[0]);
|
||
|
||
return ret;
|
||
/*
|
||
if (wstr.empty())
|
||
return std::string();
|
||
std::ctype<wchar_t> const &facet = std::use_facet<std::ctype<wchar_t> >(loc);
|
||
wchar_t const *first = wstr.c_str();
|
||
wchar_t const *last = first + wstr.size();
|
||
std::vector<char> result(wstr.size());
|
||
|
||
facet.narrow(first, last, default_char, &result[0]);
|
||
|
||
return std::string(result.begin(), result.end());
|
||
*/
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ïóòü ê DLL ñïåöèàëüíî äëÿ dll áåð¸òñÿ å¸ õýíäë
|
||
std::wstring getAppPathW()
|
||
{
|
||
std::wstring str;
|
||
#if defined( _VC )
|
||
wchar_t pathBuf[MAX_PATH] = {0};
|
||
HMODULE thisModule = 0;
|
||
BOOL ret = GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCTSTR)&__FUNCTION__, &thisModule);
|
||
DWORD nLen = GetModuleFileName(thisModule, pathBuf, MAX_PATH);
|
||
str=pathBuf;
|
||
str=BeforeWLast(str,L'\\')+L'\\';
|
||
#endif
|
||
return str;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ïîëó÷èòü ïóòü ê ïðèëîæåíèþ (íå ïóòàòü ñ âåðõíåé ôóíêöèåé)
|
||
std::string getAppPathA()
|
||
{
|
||
/*
|
||
#if defined( _VC )
|
||
return WStringToString(getAppPathW(), std::locale("rus"));
|
||
#endif
|
||
#if defined( _BORLAND )
|
||
return ExtractFilePath(ParamStr(0)).c_str();
|
||
#endif
|
||
#if defined( _WX )
|
||
return "";
|
||
#endif
|
||
*/
|
||
std::string str;
|
||
char pathBuf[MAX_PATH] = {0};
|
||
GetModuleFileNameA(NULL,pathBuf,MAX_PATH);
|
||
str=pathBuf;
|
||
str=BeforeLast(str,'\\')+'\\';
|
||
return str;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Äîáàâèòü 0 â íà÷àëî ñòðîîêè åñëè 1 ñèìâîë äëÿ äàòû íóæíî
|
||
std::string add0(std::string str)
|
||
{
|
||
if(str.length()==1) return "0"+str;
|
||
else return str;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Óáðàòü íà÷àëüíûå è êîíå÷íûå ïðîáåëû
|
||
std::string trim(const std::string & s)
|
||
{
|
||
size_t startPos = s.find_first_not_of(" \t");
|
||
if ( startPos == std::string::npos )
|
||
return "";
|
||
size_t endPos = s.find_last_not_of(" \t");
|
||
return s.substr(startPos, endPos - startPos + 1);
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Êîíâåðòàöèÿ èç UTF16LE â UTF8
|
||
std::string convUTF16ToUTF8(const std::wstring& widestring)
|
||
{
|
||
unsigned int len8=0;
|
||
unsigned int len16=widestring.length();
|
||
const wchar_t* p16=widestring.data();
|
||
for(unsigned int i=0;i<len16;i++) //Ïîäñ÷èòûâàåì ðàçìåð áóôåðà
|
||
{
|
||
if(p16[i]<=0x7f) len8++; else
|
||
if(p16[i]<=0x7ff) len8+=2; else
|
||
if(p16[i]<=0xffff) len8+=3; else
|
||
if(p16[i]<=0x10ffff) len8+=4;
|
||
}
|
||
unsigned char * p8=new unsigned char[len8];
|
||
unsigned int pos=0;
|
||
for(unsigned int i=0;i<len16;i++)
|
||
{
|
||
if(p16[i]<=0x7f)
|
||
{
|
||
p8[pos]=(unsigned char)p16[i];
|
||
pos++;
|
||
}else
|
||
if(p16[i]<=0x7ff) //110xxxxx, 10xxxxxx
|
||
{
|
||
p8[pos]=(p16[i]>>6 | 192) & 223;
|
||
pos++;
|
||
p8[pos]=(p16[i] | 128) & 191;
|
||
pos++;
|
||
}else
|
||
if(p16[i]<=0xffff) //1110xxxx 10xxxxxx 10xxxxxx
|
||
{
|
||
p8[pos]=(p16[i]>>12 | 224) & 239;
|
||
pos++;
|
||
p8[pos]=(p16[i]>>6 | 128) & 191;
|
||
pos++;
|
||
p8[pos]=(p16[i] | 128) & 191;
|
||
pos++;
|
||
}else
|
||
if(p16[i]<=0x10ffff) //11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
|
||
{
|
||
p8[pos]=(p16[i]>>18 | 240) & 247;
|
||
pos++;
|
||
p8[pos]=(p16[i]>>12 | 128) & 191;
|
||
pos++;
|
||
p8[pos]=(p16[i]>>6 | 128) & 191;
|
||
pos++;
|
||
p8[pos]=(p16[i] | 128) & 191;
|
||
pos++;
|
||
}
|
||
}
|
||
std::string str;
|
||
str.append((char*)p8,len8);
|
||
delete[] p8;
|
||
return str;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Êîíâåðòàöèÿ èç UTF8 â UTF16LE
|
||
std::wstring convUTF8ToUTF16(const std::string& str)
|
||
{
|
||
unsigned int len16=0;
|
||
unsigned int len8=str.length();
|
||
const char* p8=str.data();
|
||
|
||
unsigned int i=0;
|
||
while(i<len8) //Ïîäñ÷èòûâàåì ñêîëüêî ñèìâîëîâ â ñòðîêå
|
||
{
|
||
if((p8[i] & 0x80)==0) i++; else //0 â íà÷àëå çíà÷ 1 ñèìâîë
|
||
if((p8[i] & 0xF0)==0xF0) i+=4; else //11110xxx
|
||
if((p8[i] & 0xE0)==0xE0) i+=3; else //1110xxxx
|
||
if((p8[i] & 0xC0)==0xC0) i+=2; //110xxxxx
|
||
len16++;
|
||
}
|
||
wchar_t* p16=new wchar_t[len16];
|
||
unsigned int pos=0;
|
||
i=0;
|
||
while(i<len8)
|
||
{
|
||
if((p8[i] & 0x80)==0) //0xxxxxxx (0 â íà÷àëå çíà÷ 1 ñèìâîë)
|
||
{
|
||
p16[pos]=p8[i];
|
||
pos++; i++;
|
||
}else
|
||
if((p8[i] & 0xF0)==0xF0) //11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
|
||
{
|
||
p16[pos]=((p8[i] & 0x7) << 18) | ((p8[i] & 0x3F) << 12) | ((p8[i] & 0x3F) << 6) | (p8[i] & 0x3F);
|
||
pos++; i+=4;
|
||
}else
|
||
if((p8[i] & 0xE0)==0xE0) //1110xxxx 10xxxxxx 10xxxxxx
|
||
{
|
||
p16[pos]=((p8[i] & 0xf) << 12) | ((p8[i] & 0x3F) << 6) | (p8[i] & 0x3F);
|
||
pos++; i+=3;
|
||
} else
|
||
if((p8[i] & 0xC0)==0xC0) //110xxxxx 10xxxxxx
|
||
{
|
||
p16[pos]=((p8[i] & 0x1F) << 6) | (p8[i+1] & 0x3F);
|
||
pos++; i+=2;
|
||
}else i++; //åñëè äîøëî äî ñþäà òî îøèáêà
|
||
}
|
||
|
||
std::wstring wstr;
|
||
wstr.append(p16,len16);
|
||
delete[] p16;
|
||
return wstr;
|
||
}
|
||
//******************************************************************************
|
||
/*TIniFileSTD::TIniFileSTD(std::wstring path)
|
||
{
|
||
this->path=path;
|
||
first=NULL;
|
||
|
||
std::wifstream myfile(path.c_str()); //std::wifstream myfile(path.c_str());
|
||
if (myfile.is_open())
|
||
{
|
||
std::wstring str;
|
||
std::wstring section;
|
||
while ( myfile.good() )
|
||
{
|
||
std::getline(myfile,str);
|
||
if (str.find('[')!=std::wstring::npos)
|
||
{
|
||
section=BeforeWLast(AfterWFirst(str,'['),']');
|
||
}
|
||
if (str.find('=')!=std::wstring::npos)
|
||
{
|
||
TIniStructSTD* inistr= new TIniStructSTD;
|
||
inistr->next=NULL;
|
||
inistr->section=section;
|
||
inistr->ident=BeforeWFirst(str,L'=');
|
||
inistr->value=AfterWFirst(str,L'=');
|
||
if (first==NULL)
|
||
{
|
||
first=inistr;
|
||
last=inistr;
|
||
}else
|
||
{
|
||
last->next=inistr;
|
||
last=inistr;
|
||
}
|
||
}
|
||
}
|
||
myfile.close();
|
||
}
|
||
}
|
||
TIniFileSTD::~TIniFileSTD()
|
||
{
|
||
}
|
||
std::string TIniFileSTD::ReadString(std::string Section,std::string Ident,std::string Default)
|
||
{
|
||
return NULL;
|
||
}
|
||
void TIniFileSTD::WriteString(std::string Section,std::string Ident,std::string Value)
|
||
{
|
||
}*/ |