mirror of
https://github.com/Ragora/T2-BoL.git
synced 2026-01-19 19:14:45 +00:00
202 lines
5 KiB
C#
202 lines
5 KiB
C#
// -----------------------------------------------------
|
|
// Block Processing
|
|
// -----------------------------------------------------
|
|
function getBlockCount(%file,%blockName) //Searches a data file for all occurances of 'blockName'
|
|
{
|
|
if (!IsFile(%file))
|
|
return false;
|
|
|
|
%blockSearch = strLwr("[" @ %blockName @ "]");
|
|
|
|
%fileP = new FileObject();
|
|
%fileP.openForRead(%file);
|
|
|
|
%count = 0;
|
|
while (!%fileP.isEOF())
|
|
{
|
|
%line = %fileP.readLine();
|
|
%lineTest = strLwr(%line);
|
|
%Search = strStr(%lineTest,%blockSearch);
|
|
if (%search != -1)
|
|
%count++;
|
|
}
|
|
%fileP.detach();
|
|
return %count;
|
|
}
|
|
|
|
function getBlockData(%file,%blockName,%num,%data) //Gets values out of a block. Note that 1 is the first block in a file for %num
|
|
{
|
|
if (!IsFile(%file))
|
|
return false;
|
|
|
|
%blockCount = getBlockCount(%file,%blockName);
|
|
|
|
if (!%blockCount || %num > %blockCount) //None of 'typeName' exist here
|
|
return -1;
|
|
|
|
%blockSearch = strLwr("[" @ %blockName @ "]");
|
|
|
|
%fileP = new FileObject();
|
|
%fileP.openForRead(%file);
|
|
|
|
%count = 0;
|
|
%lineCount = 0;
|
|
while (!%fileP.isEOF())
|
|
{
|
|
%line = %fileP.readLine();
|
|
%lineCount++;
|
|
|
|
if (getSubStr(stripSpaces(%line),0,1) !$= ";") //If the beginning of the line is "commented", skip it.
|
|
{
|
|
%lineTest = strLwr(%line);
|
|
%Search = strStr(%lineTest,%blockSearch);
|
|
|
|
if (%Search != -1 && %Count != %num)
|
|
%count++;
|
|
else if (%count == %num) //We found it, stop incrementing the count and find our data.
|
|
{
|
|
%Search = strStr(strLwr(%line),strLwr(%data));
|
|
|
|
%lineTest = strLwr(strReplace(%line," ","")); //See if we exited our block
|
|
if (GetSubStr(%lineTest, 0, 1) $= "[") //The beginning of a new block
|
|
return -1;
|
|
|
|
if (%search != -1) //We found it,
|
|
{
|
|
%fileP.detach();
|
|
|
|
//Since our line might have some sort of commenting after it, we better return to just the "end" symbol..
|
|
%semiS =strStr(%line, ";");
|
|
if (%semiS == -1)
|
|
return -1;
|
|
%line = getSubStr(%line, 0, %semiS);
|
|
//Now find where "equals" is..
|
|
%equalS = strStr(%line, "=");
|
|
if (%equalS == -1)
|
|
return -1;
|
|
%line = getSubStr(%line, %equalS+1, strLen(%line));
|
|
//Is our data in single quotations? If so, convert it to a tagged string.
|
|
if (strStr(%line,"\x27") != -1) //It is.
|
|
%line = addTaggedString(stripChars(%line,"\x27"));
|
|
//Now return our string without quotations.
|
|
%line = stripChars(stripTrailingSpaces(strReplace(%line,%data,"")),"\x22");
|
|
return getSubStr(%line,1,strLen(%line));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
%fileP.detach();
|
|
return false;
|
|
}
|
|
|
|
//function getBlockLength(%file,%blockName,%num) Won't work until I figure out a way to signal the end of a block without adding any extra characters,
|
|
//{
|
|
//if (!IsFile(%file))
|
|
//return "Not existant.";
|
|
|
|
//%blockSearch = "[" @ %blockName @ "]";
|
|
//%blockSearch = strLwr(%blockSearch); //Convert to lowerCase
|
|
|
|
//new FileObject(GetBlockCount);
|
|
//GetBlockCount.openForRead(%file);
|
|
|
|
//%count = 0;
|
|
//%len = 0;
|
|
// while (!GetBlockCount.isEOF())
|
|
// {
|
|
// %line = GetBlockCount.readLine();
|
|
// %lineTest = strLwr(%line);
|
|
// %Search = strStr(%lineTest,%blockSearch);
|
|
//if (%search != -1)
|
|
// %count++;
|
|
// else if (%search != -1 && %count == %num) //We found our wanted block, count it.
|
|
//{
|
|
// if (strStr(%lineTest,%blockSearch) == -1)
|
|
// %len++;
|
|
// else
|
|
// break;
|
|
// }
|
|
//}
|
|
//GetBlockCount.detach();
|
|
//return %len;
|
|
//}
|
|
|
|
// -----------------------------------------------------
|
|
// Array Processing
|
|
// -----------------------------------------------------
|
|
function getArrayCount(%file,%array)
|
|
{
|
|
if (!IsFile(%file))
|
|
return false;
|
|
|
|
%arraySearch = strLwr("\x22" @ %array @ "\x22");
|
|
|
|
%fileP = new FileObject();
|
|
%fileP.openForRead(%file);
|
|
|
|
%count = 0;
|
|
while (!%fileP.isEOF())
|
|
{
|
|
%line = %fileP.readLine();
|
|
%lineTest = strLwr(%line);
|
|
%Search = strStr(%lineTest,%typeSearch);
|
|
if (%search != -1)
|
|
%count++;
|
|
}
|
|
%fileP.detach();
|
|
return %count;
|
|
}
|
|
|
|
function getArrayData(%file,%arrayName,%num)
|
|
{
|
|
if (!IsFile(%file))
|
|
return false;
|
|
|
|
%arrayCount = getArrayCount(%file,%arrayName);
|
|
|
|
if (!%arrayCount)
|
|
return false;
|
|
|
|
%arraySearch = strLwr("\x22" @ %arrayName @ "\x22");
|
|
|
|
%fileP = new FileObject();
|
|
%fileP.openForRead(%file);
|
|
|
|
%lineCount = 0;
|
|
while (!%fileP.isEOF())
|
|
{
|
|
%line = stripSpaces(%fileP.readline());
|
|
%lineCount++;
|
|
|
|
if (getSubStr(%line,0,1) !$= ";") //Is this line a comment?
|
|
{
|
|
%search = strStr(strLwr(%line),%arraySearch);
|
|
|
|
if (%search !$= -1) //Found it.
|
|
break; //Break the loop, we know the array exists
|
|
if (%fileP.IsEOF() && %search == -1) //Didn't find it, return the error.
|
|
return false;
|
|
}
|
|
}
|
|
|
|
//Check where the array actually starts..
|
|
%line = %fileP.readLine();
|
|
if (%line $= "{") //Data starts on next line..
|
|
{
|
|
%line = %fileP.readLine(); //Drop it down one
|
|
for (%i = 0; %i < %num; %i++) //Keep going untill we hit the wanted data
|
|
%line = %fileP.readLine();
|
|
}
|
|
else //The line we just grabbed is part of the data
|
|
{
|
|
if (%num == 0) //The wanted data was on line zero..
|
|
return %line;
|
|
|
|
for (%i = 0; %i < %num; %i++) //Keep going untill we hit the wanted data
|
|
%line = %fileP.readLine();
|
|
}
|
|
|
|
%fileP.detach();
|
|
return %line;
|
|
}
|