//#include //#include //#include // Table symbolTable; // FileHandle srcFile("c:\\work\\http\\htm\\csis.htm",FileHandle::Read,FileHandle::ShareRead); // FileMap srcMap(srcFile); // FileMap dstMap("OUTMAP",0,250000,FileMap::ReadWrite,FileMap::Commit); // PureViewOfFile srcView(srcMap); // PureViewOfFile dstView(dstMap); // Scan htmlScan(srcView,dstView,symbolTable); // htmlScan.analyze(); // FundReader fundReader; // fundReader.readQuote("c:\\work\\http\\htm\\csis.htm",""); #include #include void parseData(void) { FileHandle readFile("C:\\WORK\\HTTP\\DATA.DAT",FileHandle::Read); FileHandle writeFile("C:\\WORK\\HTTP\\DATA.TXT",FileHandle::Write,FileHandle::ShareNone,FileHandle::Overwrite); FileMap readMap(readFile); PureViewOfFile readView(readMap); String inLine; String security; String ticker; String prefix; int tickPos; int count(18); while(readView.getLine(inLine)) { ::sprintf(prefix,"N%d=",count++); security=inLine.betweenString('=','<'); if(security.isNull())continue; tickPos=inLine.strpos("TICKER="); if(-1==tickPos)continue; ticker=inLine.substr(tickPos); if(ticker.isNull())continue; ticker=ticker.betweenString('=','"'); if(ticker.isNull())continue; prefix+=security; prefix+=";"; prefix+=ticker; writeFile.writeLine(prefix); } void parseData(void) { FileHandle readFile("C:\\WORK\\HTTP\\DATA.DAT",FileHandle::Read); FileHandle writeFile("C:\\WORK\\HTTP\\DATA.TXT",FileHandle::Write,FileHandle::ShareNone,FileHandle::Overwrite); FileMap readMap(readFile); PureViewOfFile readView(readMap); String inLine; String prefix; String security; String ticker; char *lpThumb; char *lpCursor; int count(1); while(readView.getLine(inLine)) { ::sprintf(prefix,"N%d=",count++); lpThumb=lpCursor=((char*)inLine)+40; while(*lpCursor==' ')lpCursor--; *(lpCursor+1)=0; security=inLine; lpCursor=++lpThumb; while(*lpCursor!=' ')lpCursor++; *lpCursor=0; ticker=lpThumb; prefix+=security; prefix+=";"; prefix+=ticker; writeFile.writeLine(prefix); } } void Scan::analyze(void) { readch(); while((int)mChar!=-1&&mChar!=0x001A) { skipSeparators(); if(0xFFFF==mChar||0x001A==mChar)break; if(isdigit(mChar))scanNumeral(); else if(isalpha(mChar))scanWord(); else if(mChar=='\r')scanNewLine(); else if(mChar=='"')scanLiteral(); else if(mChar=='<')scanLeftAngle(); else if(mChar=='>')scanRightAngle(); else if(mChar=='/')scanForwardSlash(); else if(mChar=='&')scanAmpersand(); else scanUnknown(); // else scanWord(); } emit(endtext1); } class StockReader : private Reader { public: StockReader(void); virtual ~StockReader(); WORD readQuote(const String &pathFileName,StockQuote &someStockQuote); private: enum Key{Description,Symbol,Last,Change,Volume,Open,Bid,Low,Low52,End}; void handleDescriptionKey(const String "eLine,StockQuote &someStockQuote); void handleSymbolKey(const String "eLine,StockQuote &someStockQuote); void handleLastKey(const String "eLine,StockQuote &someStockQuote); void handleChangeKey(const String "eLine,StockQuote &someStockQuote); void handleVolumeKey(const String "eLine,StockQuote &someStockQuote); void handleOpenKey(const String "eLine,StockQuote &someStockQuote); void handleBidKey(const String "eLine,StockQuote &someStockQuote); void handleLowKey(const String "eLine,StockQuote &someStockQuote); void handleLowKey52(const String "eLine,StockQuote &someStockQuote); String mDescriptionKey; String mLastKey; String mChangeKey; String mVolumeKey; String mOpenKey; String mBidKey; String mLowKey; String mLowKey52; }; StockReader::StockReader(void) : mDescriptionKey(""), mLastKey("glossary.html#last"), mChangeKey("glossary.html#change"), mVolumeKey("glossary.html#volume"), mOpenKey("glossary.html#open"), mBidKey("glossary.html#bid"), mLowKey("glossary.html#low"), mLowKey52("glossary.html#52low") { } inline StockReader::~StockReader() { } WORD StockReader::readQuote(const String &pathFileName,StockQuote &someStockQuote) { FileHandle quoteFile(pathFileName); if(!quoteFile.isOkay())return FALSE; FileMap quoteMap(quoteFile); PureViewOfFile quoteView(quoteMap); Key expectKey; String quoteLine; expectKey=Description; while(TRUE) { if(End==expectKey||!quoteView.getLine(quoteLine))break; switch(expectKey) { case Description : if(!quoteLine.strstr(mDescriptionKey))break; handleDescriptionKey(quoteLine,someStockQuote); expectKey=Symbol; break; case Symbol : handleSymbolKey(quoteLine,someStockQuote); expectKey=Last; break; case Last : if(!quoteLine.strstr(mLastKey))break; handleLastKey(quoteLine,someStockQuote); expectKey=Change; break; case Change : if(!quoteLine.strstr(mChangeKey))break; handleChangeKey(quoteLine,someStockQuote); expectKey=Volume; break; case Volume : if(!quoteLine.strstr(mVolumeKey))break; handleVolumeKey(quoteLine,someStockQuote); expectKey=Open; break; case Open : if(!quoteLine.strstr(mOpenKey))break; handleOpenKey(quoteLine,someStockQuote); expectKey=Bid; break; case Bid : if(!quoteLine.strstr(mBidKey))break; handleBidKey(quoteLine,someStockQuote); expectKey=Low; break; case Low : if(!quoteLine.strstr(mLowKey))break; handleLowKey(quoteLine,someStockQuote); expectKey=Low52; break; case Low52 : if(!quoteLine.strstr(mLowKey52))break; handleLowKey52(quoteLine,someStockQuote); expectKey=End; break; } } } void StockReader::handleDescriptionKey(const String "eLine,StockQuote &someStockQuote) { char *pString; String descriptionString; pString=(LPSTR)quoteLine+quoteLine.length(); while(*(pString)!='>')pString--; descriptionString=++pString; descriptionString.trimRight(); someStockQuote.description(descriptionString); winConsole.writeLine(String("Description:")+descriptionString); } void StockReader::handleSymbolKey(const String "eLine,StockQuote &someStockQuote) { String symbolString(quoteLine.betweenString('(',')')); someStockQuote.symbol(symbolString); winConsole.writeLine(String("Symbol:")+symbolString); } void StockReader::handleLastKey(const String "eLine,StockQuote &someStockQuote) { String lastTraded; String dateTime; getAt(7,String(quoteLine),lastTraded); getAt(14,String(quoteLine),dateTime); winConsole.writeLine(String("Last Traded:")+lastTraded); winConsole.writeLine(String("DateTime:")+dateTime); someStockQuote.lastTraded(strToDec(lastTraded)); } void StockReader::handleChangeKey(const String "eLine,StockQuote &someStockQuote) { String changeInValueDollars; String changeInValuePercent; if(!getAt(7,String(quoteLine),changeInValueDollars)) { getAt(8,String(quoteLine),changeInValueDollars); if(!getAt(17,String(quoteLine),changeInValuePercent)) getAt(19,String(quoteLine),changeInValuePercent); } else { if(!getAt(16,String(quoteLine),changeInValuePercent)) getAt(14,String(quoteLine),changeInValuePercent); } winConsole.writeLine(String("$ Change:")+changeInValueDollars); winConsole.writeLine(String("% Change:")+changeInValuePercent); someStockQuote.dollarChange(strToDec(changeInValueDollars)); someStockQuote.percentChange(::atof(changeInValuePercent)); } void StockReader::handleVolumeKey(const String "eLine,StockQuote &someStockQuote) { String volume; String trades; if(!getAt(6,String(quoteLine),volume))getAt(8,String(quoteLine),volume); getAt(12,String(quoteLine),trades); winConsole.writeLine(String("Volume:")+volume); winConsole.writeLine(String("Trades:")+trades); someStockQuote.volume(::atoi(volume)); someStockQuote.trades(::atoi(trades)); } void StockReader::handleOpenKey(const String "eLine,StockQuote &someStockQuote) { String open; String previousClose; getAt(6,String(quoteLine),open); getAt(12,String(quoteLine),previousClose); winConsole.writeLine(String("Open:")+open); winConsole.writeLine(String("Previous Close:")+previousClose); someStockQuote.openingPrice(strToDec(open)); someStockQuote.previousClose(strToDec(previousClose)); } void StockReader::handleBidKey(const String "eLine,StockQuote &someStockQuote) { String bid; String ask; getAt(6,String(quoteLine),bid); getAt(12,String(quoteLine),ask); winConsole.writeLine(String("Bid:")+bid); winConsole.writeLine(String("Ask:")+ask); someStockQuote.bid(strToDec(bid)); someStockQuote.ask(strToDec(ask)); } void StockReader::handleLowKey(const String "eLine,StockQuote &someStockQuote) { String dayLow; String dayHigh; getAt(6,String(quoteLine),dayLow); getAt(12,String(quoteLine),dayHigh); winConsole.writeLine(String("Day Low:")+dayLow); winConsole.writeLine(String("Day High:")+dayHigh); someStockQuote.dayLow(strToDec(dayLow)); someStockQuote.dayHigh(strToDec(dayHigh)); } void StockReader::handleLowKey52(const String "eLine,StockQuote &someStockQuote) { String weekLow52; String weekHigh52; getAt(6,String(quoteLine),weekLow52); getAt(12,String(quoteLine),weekHigh52); winConsole.writeLine(String("52 Week Low:")+weekLow52); winConsole.writeLine(String("52 Week High:")+weekHigh52); someStockQuote.low52(strToDec(weekLow52)); someStockQuote.high52(strToDec(weekHigh52)); } // ************************************************************************** #include #include #include #include #include #include #include #include #include #if 0 int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) { String strLine; String strDescription; String strSymbol; String sqlString; FileHandle inFile("mutual.txt",FileHandle::Read,FileHandle::ShareRead); FileMap inMap(inFile); PureViewOfFile inView(inMap); SQLDb sqlDb; SQLStatement sqlStatement; sqlDb.open("Exchange","dba","sql"); if(!sqlDb.isOkay())return FALSE; sqlStatement=sqlDb; while(inView.getLine(strLine)) { strDescription=strLine.betweenString('=',';'); strDescription.removeTokens("'"); strSymbol=strLine.betweenString(';',0); sqlString=String("add_symbol('")+strDescription+String("','")+strSymbol+String("','MUTUAL'")+String(");"); sqlStatement.call(sqlString); } sqlDb.close(); String pathString("c:\\work\\http\\nasdaq\\"); FindData findData; StockReader stockReader; StockQuote stockQuote; if(findData.findFirst(pathString+String("*.htm"))); { stockReader.readQuote(pathString+findData.fileName(),stockQuote); winConsole.read(); while(findData.findNext()) { stockReader.readQuote(pathString+findData.fileName(),stockQuote); winConsole.read(); } } return FALSE; } #endif #if 0 Block itemStrings; hostName=cmdLine.betweenString(' ',0); if(hostName.isNull())return FALSE; nameFile=hostName; hostName=hostName.betweenString(0,' '); if(hostName.isNull())return FALSE; nameFile=nameFile.betweenString(' ',0); if(nameFile.isNull())return FALSE; if(String(nameFile.operator[](0))==String("@")) { nameFile=nameFile.substr(1); // listLoad(nameFile,itemStrings); // for(int itemIndex=0;itemIndex