//+------------------------------------------------------------------+
//| IniSectionsEnum.mq4 |
//| Copyright © 2006-2010, Solop Dmitry (Ved) |
//| dsolop@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006-2010, Solop Dmitry (Ved)"
#property link "dsolop@yandex.ru"
#property library
#import "kernel32.dll"
int GetPrivateProfileStringA
( int SectionName, // Íàèìåíîâàíèå ñåêöèè
int KeyName, // Íàèìåíîâàíèå ïàðàìåòðà
string Default, // Çíà÷åíèå ïî óìîë÷àíèþ
int ReturnedString[], // Âîçâðàùàåìîå çíà÷åíèå ïàðàìåòðà
int nSize, // Ðàçìåð áóôåðà ïîä çíà÷åíèå ïàðàìåòðà
string FileName); // Ïîëíîå èìÿ ôàéëà
#import
bool SectionsEnum(string FileName, string &Sections[])
{
int iBuffer[16384];
ArrayInitialize(iBuffer, 0);
int nValue = GetPrivateProfileStringA(0, 0, "", iBuffer, 65535, FileName);
if(nValue>0){
SplitStrings(iBuffer, nValue, Sections);
return(true);
}
else
return(false);
}
/*
bool KeysEnum(string FileName, string SectionName, string &Keys[])
{
int iBuffer[16384];
ArrayInitialize(iBuffer, 0);
int nValue = GetPrivateProfileStringA(SectionName, 0, "", iBuffer, 65535, FileName);
if(nValue>0){
SplitStrings(iBuffer, nValue, Keys);
return(true);
}
else
return(false);
}
*/
bool SplitStrings(int &iBuffer[], int TotalLengthInByte, string &Strings[]){
ArrayResize(Strings, 10);
string Buffer = "";
int i, j, n=0, aSec=0;
string iChars[4];
for(int k=0; k<(TotalLengthInByte-1)/4+1; k++){
if(iBuffer[k]==0)break;
for(j = 0; j < 4; j++) iChars[j]="";
for(i = 0; i < 4; i++){
if(iBuffer[k] & 255 > 0){
iChars[i] = CharToStr(iBuffer[k] & 255);
n++;
}else
if(Buffer!="" || iChars[0]!="" || iChars[1]!="" || iChars[2]!="" || iChars[3]!=""){
if(ArraySize(Strings)==aSec)
ArrayResize(Strings, ArraySize(Strings)+10);
Buffer = StringConcatenate(Buffer, iChars[0], iChars[1], iChars[2], iChars[3]);
Strings[aSec]=StringSubstr(Buffer, 0, n);
aSec++;
for(j = 0; j < 4; j++) iChars[j]="";
Buffer="";
n=0;
}
iBuffer[k] = iBuffer[k] >> 8;
}
Buffer = StringConcatenate(Buffer, iChars[0], iChars[1], iChars[2], iChars[3]);
}
if(Buffer!=""){
if(ArraySize(Strings)==aSec)
ArrayResize(Strings, ArraySize(Strings)+1);
Strings[aSec]=StringSubstr(Buffer, 0, n);
aSec++;
}
// StringSubstr(Buffer, 0, nValue)
ArrayResize(Strings, aSec);
}
Comments