TRISTATE ParseInteger(int* pi, char* szText) { CTextParser cTextParser; TRISTATE tResult; cTextParser.Init(szText); tResult = cTextParser.GetInteger(pi); cTextParser.Kill(); return tResult; }
TRISTATE ParseFloat(double* pf, char* szText) { CTextParser cTextParser; TRISTATE tResult; double f; int iExponent; int iTemp; double fTen; cTextParser.Init(szText); tResult = cTextParser.GetFloat(&f); if (tResult == TRITRUE) { tResult = cTextParser.GetExactCaseInsensitiveCharacter('e', FALSE); if (tResult == TRITRUE) { tResult = cTextParser.GetInteger(&iExponent, &iTemp, FALSE); if (tResult == TRITRUE) { fTen = 10.0; *pf = pow(fTen, iExponent) * f; return TRITRUE; } else { return TRIFALSE; } } else { *pf = f; return TRITRUE; } } else { return TRIFALSE; } cTextParser.Kill(); return tResult; }
void CGuidClass::Init(char8* sz) { CTextParser cParser; TRISTATE tOpenCurly; TRISTATE tOpenRound; TRISTATE tResult; uint64 uiValue; int32 iLength; BOOL bResult; cParser.Init(sz); tOpenCurly = cParser.GetExactCharacter('{'); tOpenRound = TRIERROR; if (tOpenCurly == TRIERROR) { cParser.Kill(); Clear(); return; } else if (tOpenCurly == TRIFALSE) { tOpenRound = cParser.GetExactCharacter('('); } tResult = cParser.GetHexadecimal(&uiValue, &iLength); if (tResult == TRITRUE) { bResult = Get0xFormat(&cParser, (uint32)uiValue); if (!bResult) { Clear(); cParser.Kill(); return; } } else { tResult = cParser.GetHexadecimalPart(&uiValue, &iLength); if (tResult == TRITRUE) { if (iLength == 16) { bResult = Get32Format(&cParser, uiValue); } else if (iLength == 8) { bResult = Get8_4_4_4_12Format(&cParser, (uint32)uiValue); if (!bResult) { Clear(); cParser.Kill(); return; } } else { Clear(); cParser.Kill(); return; } } } if (tOpenCurly == TRITRUE) { tResult = cParser.GetExactCharacter('}'); if (tResult != TRITRUE) { cParser.Kill(); Clear(); return; } } else if (tOpenRound == TRITRUE) { tResult = cParser.GetExactCharacter(')'); if (tResult != TRITRUE) { cParser.Kill(); Clear(); return; } } cParser.Kill(); return; }
BOOL CTileMapXML::ImportTiles(CMarkupTag* pcTag, CTileLayer* pcLayer) { CChars szCSV; CCSVFileImmutable cCSVFile; CMemoryFile cMemoryFile; int iRow; SCSVRowImmutable* psRow; int i; char* szCelIndex; CTextParser cTextParser; TRISTATE tResult; int iCelIndex; CChars szError; CTile* pcTile; szCSV.Init(128); pcTag->GetText(&szCSV); if (szCSV.Empty()) { szCSV.Kill(); CMarkupTextParser::LogErrorTagWasEmpty(pcTag); return FALSE; } szCSV.StripWhiteSpace(TRUE); //szCSV.Replace(" ", ""); //Write a test for this, why does it not work? cMemoryFile.Init(szCSV.Text(), szCSV.Length()); cCSVFile.Init(','); cCSVFile.Open(&cMemoryFile); cCSVFile.ReadAllLines(); for (iRow = 0; iRow < cCSVFile.NumRows(); iRow++) { psRow = cCSVFile.Get(iRow); for (i = 0; i < psRow->iNumFields; i++) { szCelIndex = psRow->Get(i); cTextParser.Init(szCelIndex); tResult = cTextParser.GetInteger(&iCelIndex); if (tResult != TRITRUE) { szError.Init("CSV cell ["); szError.Append(i); szError.Append(", "); szError.Append(iRow); szError.Append("] could not be parsed as an integer."); CMarkupTextParser::LogError(pcTag, szError.Text()); szError.Kill(); cCSVFile.Close(); cMemoryFile.Kill(); szCSV.Kill(); return FALSE; } pcTile = pcLayer->mpcTileType->Get(iCelIndex); if (pcTile) { pcLayer->Set(i, iRow, pcTile); } } } cCSVFile.Close(); cMemoryFile.Kill(); szCSV.Kill(); return TRUE; }