<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
<title>using System;</title>
<style><!--
.Normal
{font-size:12.0pt;
font-family:"Times New Roman";}
-->
</style>
</head>
<body lang=EN-US class="Normal" bgcolor="#FFFFFF">
<p style='text-autospace:none'><span
style='font-size:10.0pt;font-family:"Courier New";color:blue'>using</span><span
style='font-size:10.0pt;font-family:"Courier New"'> System;</span></p>
<p style='text-autospace:none'><span
style='font-size:10.0pt;font-family:"Courier New";color:blue'>using</span><span
style='font-size:10.0pt;font-family:"Courier New"'> System.Diagnostics;</span></p>
<p style='text-autospace:none'><span
style='font-size:10.0pt;font-family:"Courier New";color:blue'>using</span><span
style='font-size:10.0pt;font-family:"Courier New"'> System.Drawing;</span></p>
<p style='text-autospace:none'><span
style='font-size:10.0pt;font-family:"Courier New";color:blue'>using</span><span
style='font-size:10.0pt;font-family:"Courier New"'> System.Collections;</span></p>
<p style='text-autospace:none'><span
style='font-size:10.0pt;font-family:"Courier New";color:blue'>using</span><span
style='font-size:10.0pt;font-family:"Courier New"'> System.IO;</span></p>
<p style='text-autospace:none'><span
style='font-size:10.0pt;font-family:"Courier New";color:blue'>using</span><span
style='font-size:10.0pt;font-family:"Courier New"'> System.ComponentModel;</span></p>
<p style='text-autospace:none'><span
style='font-size:10.0pt;font-family:"Courier New";color:blue'>using</span><span
style='font-size:10.0pt;font-family:"Courier New"'> System.Windows.Forms;</span></p>
<p style='text-autospace:none'><span
style='font-size:10.0pt;font-family:"Courier New";color:blue'>using</span><span
style='font-size:10.0pt;font-family:"Courier New"'> mshtml;</span></p>
<p style='text-autospace:none'><span
style='font-size:10.0pt;font-family:"Courier New";color:blue'>using</span><span
style='font-size:10.0pt;font-family:"Courier New"'> SHDocVw;</span></p>
<p style='text-autospace:none'><span
style='font-size:10.0pt;font-family:"Courier New";color:blue'>using</span><span
style='font-size:10.0pt;font-family:"Courier New"'> System.Text.RegularExpressions;</span></p>
<p style='text-autospace:none'><span
style='font-size:10.0pt;font-family:"Courier New";color:blue'>using</span><span
style='font-size:10.0pt;font-family:"Courier New"'> System.Data.OleDb;</span></p>
<p style='text-autospace:none'><span
style='font-size:10.0pt;font-family:"Courier New";color:blue'>namespace</span><span
style='font-size:10.0pt;font-family:"Courier New"'> WebScraper</span></p>
<p style='text-autospace:none'><span
style='font-size:10.0pt;font-family:"Courier New"'>{</span></p>
<p style='text-autospace:none'><span>����� </span><span style='color:gray'>///</span><span style='color:green'>
</span><span
style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����� </span><span style='color:gray'>///</span>
This is a minimalist interface for controlling the financial data scrapers.�
It provides</p>
<p style='text-autospace:none'><span>����� </span><span style='color:gray'>///</span><span style='color:green'>
facilities for selecting and initiating scavenging operations, logic for processing
the</span></p>
<p style='text-autospace:none'><span>����� </span><span style='color:gray'>///</span><span style='color:green'>
retrieved data, and limited progress feedback.</span></p>
<p style='text-autospace:none'><span>����� </span><span style='color:gray'>///</span><span style='color:green'>
</span><span
style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����� </span><span style='color:blue'>public</span>
<span style='color:blue'>class</span> WebScraper : System.Windows.Forms.Form</p>
<p style='text-autospace:none'><span>����� </span>{</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> This string constant defines the DBMS connection string.
Modify the path and or name as neccessary</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>const</span>
<span
style='color:blue'>string</span> DBMSConnection = @"Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User
ID=Admin;Data Source=CorporateData.mdb;Mode=Share Deny None;Extended Properties="""";Jet
OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet
OLEDB:Database Password="""";Jet OLEDB:Engine Type=5;Jet
OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global
Bulk Transactions=1;Jet OLEDB:New Database Password="""";Jet
OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't
Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet
OLEDB:SFP=False";</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Name of the file containing the list of ticker symbols</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>const</span>
<span
style='color:blue'>string</span> TickerSymbolFile = "tickers.txt";</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span>
Email address for where bugs (top level exception catches) should be sent.�
Only</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> applies to release builds.</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>const</span>
<span
style='color:blue'>string</span> ProgramSupportEmail = "mark@vibrant3d.com";</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Defines the operating mode of the scraper</span></p>
<p style='text-autospace:none'><span>����� </span>����� <span
style='color:gray'>///</span><span style='color:green'> </span><span
style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>enum</span> ScraperOperatingMode { Stopped,Started,Paused };</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Defines exactly what the scanner is doing while it is operating</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>enum</span> ScraperOperatingState { StartStatement,InStatement,EndStatement
};</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Defines the type of scraped data, which indicates how it
will be converted from</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span>
textual to internal form.� </p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>public</span>
<span
style='color:blue'>enum</span> ScrapeDataType { Dates,Dollars,Numbers};</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Defines individual types of financial records. </span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>public</span>
<span
style='color:blue'>enum</span> FinancialStatements<a name="FinancialStatements"></a>
{NoStatement=-1,BalanceSheet=0,CashFlows=1,Income=2,Equity=3,Trading=4,UserExpressions
= 5,NumItems=6};</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Defines the global operating mode of the scraper to control
behavior in the idle dispatch loop</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
ScraperOperatingMode m_scraperOperatingMode = ScraperOperatingMode.Stopped;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Defines the internal process state when the scraper is running</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>�
ScraperOperatingState m_scraperOperatingState;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Defines the current statement type being scraped</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
FinancialStatements m_scraperActiveStatement;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Defines the numeric index of the scraper being indexed</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>int</span> m_scraperRecordIndex;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Current statement being processed by the scanner</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>int</span> m_scraperStatementIndex;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> List of ticker symbols that will drive scraper retrieval
operations</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
ArrayList m_symbols;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Number of records that could not be retrieved in the current
pass</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>int</span> m_numFailures;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Number of statements the user has selected for scraping</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>int</span> m_numStatementsToScrape;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Reference to browser instance used to handle HTTP download
and DOM text extraction</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
InternetExplorer m_browser;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span>
The time scavenging started.� Note that these values all reset for</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> each class of operation, i.e. if you select CashFlow and
Equity, </span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> the calculations about elapsed and remaining time are done
for</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span>
each item individually, not for your collective selection.� You</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> may elect to modify this</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Start of statement scraping cycle</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
DateTime m_startScrapeTime;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Start of individual item scraping within a statement</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
DateTime m_startItemScrapeTime;</p>
<p style='text-autospace:none'><span>����������� </span>#region<span
style='font-size:10.0pt;font-family:"Courier New"'> Windows Forms Designer created
variables</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.ComponentModel.IContainer components;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.GroupBox groupBox1;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.CheckBox GetBalanceSheet;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.CheckBox GetCashFlow;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.CheckBox GetEquityInfo;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.CheckBox GetIncomeStatement;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.ProgressBar progressBar1;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.Label performanceMsg;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.Label CurrentTickerDisplay;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.Label CurrentRecordDisplay;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.Label TotalRecordsDisplay;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.Label TotalRecoveryDisplay;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.Label SuccessPercentage;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.Label SecondsPerRecord;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.Label ElapsedTimeDisplay;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.Label RemainingTimeDisplay;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.Button startButton;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.Button stopButton;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.Button exitButton;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.Label label3;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.Label label1;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.Label label2;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.Label label5;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.Label label4;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.Label label6;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.Label label9;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.ToolTip toolTip1;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Data.OleDb.OleDbConnection<a name="OleDbConnection"></a> MarketDBMS;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
System.Windows.Forms.Timer timer1;</p>
<p style='text-autospace:none'><span>����������� </span>#endregion</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>public</span>
WebScraper()</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
Required for Windows Form Designer support</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//</span></p>
<p style='text-autospace:none'><span>����������������� </span>InitializeComponent();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
clear the count of selected statements</span></p>
<p style='text-autospace:none'><span>����������������� </span>m_numStatementsToScrape
= 0;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
initialize the list of ticker symbols that will be used for retrieving data</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
get the (potentially) ordered list of ticker symbols</span></p>
<p style='text-autospace:none'><span>����������������� </span>ArrayList gd = loadTickerSymbols(TickerSymbolFile);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
randomize its contents and use that list to drive retrievals</span></p>
<p style='text-autospace:none'><span>����������������� </span>m_symbols = randomizeList(gd);</p>
<p style='text-autospace:none'><span>����������������� </span>// setup the database
connection -� as usual, in their infinite wisdom, microsoft shows poor to nonexistant</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
skills in factoring their components, i.e. the visual setup for databases ends
up binding in host platform</span></p>
<p style='text-autospace:none'><span>����������������� </span>// dependencies
in exactly the same way as the 'references' mechanism in the solution view.�
This line makes it</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
easy to compensate for their foolishness when moving the software between various
development systems</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.MarketDBMS.ConnectionString
=DBMSConnection;</p>
<p style='text-autospace:none'><span>����������������� </span>Application.Idle<a name="ApplicationIdle"></a>
+= <span style='color:blue'>new</span> System.EventHandler(doOperatingCycle);</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>void</span> startButton_Click<a name="startButton_Click"></a>(<span style='color:blue'>object</span>
sender, System.EventArgs e)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>if</span>(m_scraperOperatingMode
== ScraperOperatingMode.Stopped)</p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:green'>//
start scavenging operations</span></p>
<p style='text-autospace:none'><span>����������������������� </span>MarketDBMS.Open();</p>
<p style='text-autospace:none'><span>����������������������� </span>m_browser
= <span style='color:blue'>new</span> InternetExplorer();</p>
<p style='text-autospace:none'><span>����������������������� </span>m_scraperOperatingMode
= ScraperOperatingMode.Started;</p>
<p style='text-autospace:none'><span>����������������������� </span>m_scraperOperatingState
= ScraperOperatingState.StartStatement;</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:green'>//
reset the state index</span></p>
<p style='text-autospace:none'><span>����������������������� </span>m_scraperStatementIndex
= 0;</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:green'>//
update the total # of records display</span></p>
<p style='text-autospace:none'><span>����������������������� </span>TotalRecordsDisplay.Text
= m_symbols.Count.ToString();</p>
<p style='text-autospace:none'><span>����������������������� </span>forceFieldUpdate(TotalRecordsDisplay);</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>this</span>.startButton.Text
= "Pause";</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>this</span>.stopButton.Enabled
= <span style='color:blue'>true</span>;</p>
<p style='text-autospace:none'><span>����������������� </span>} </p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>else</span>
<span
style='color:blue'>if</span>(m_scraperOperatingMode == ScraperOperatingMode.Started)</p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:green'>//
pause the scavenging operations</span></p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>this</span>.performanceMsg.Text
= "";</p>
<p style='text-autospace:none'><span>����������������������� </span>m_scraperOperatingMode
= ScraperOperatingMode.Paused;</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>this</span>.startButton.Text
= "Continue";</p>
<p style='text-autospace:none'><span>����������������� </span>} </p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>else</span>
<span
style='color:blue'>if</span>(m_scraperOperatingMode == ScraperOperatingMode.Paused)</p>
<p style='text-autospace:none'><span>����� </span>����������� {</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:green'>//
restart the scavenging operation</span></p>
<p style='text-autospace:none'><span>����������������������� </span>m_scraperOperatingMode
= ScraperOperatingMode.Started;</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>this</span>.startButton.Text
= "Pause";</p>
<p style='text-autospace:none'><span>����������������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>string</span> m_runDisplayMessage = "STARTING";</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span>
This is the root function that drives the scavenging process.� It's triggered</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> by the user pressing the start button, and gathers the various
information</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> set in the UI to configure and drive the scavenging process</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="sender"></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="e"></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>void</span> doOperatingCycle<a name="doOperatingCycle"></a>(<span style='color:blue'>object</span>
sender, System.EventArgs e)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>if</span>(m_scraperOperatingMode
!= ScraperOperatingMode.Started)</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>return</span>;</p>
<p style='text-autospace:none'><span>����������������� </span>updateMessage(m_runDisplayMessage);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>switch</span>(m_scraperOperatingState)</p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>case</span>
ScraperOperatingState.StartStatement<a name="ScraperOperatingStateStartStatement"></a>
:</p>
<p style='text-autospace:none'><span>����������������������������� </span>m_runDisplayMessage
= "STARTING";</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:green'>//
clear the recovered record count</span></p>
<p style='text-autospace:none'><span>����������������������������� </span>TotalRecoveryDisplay.Text
= "0";</p>
<p style='text-autospace:none'><span>����������������������������� </span>forceFieldUpdate(TotalRecoveryDisplay);</p>
<p style='text-autospace:none'><span>����������������������������� </span>// reset
the recovered records display count and percentage.� This has to be</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:green'>//
done here because it only updates on successful recoveries</span></p>
<p style='text-autospace:none'><span>����������������������������� </span>m_startScrapeTime
= DateTime.Now;</p>
<p style='text-autospace:none'><span>����������������������������� </span>SuccessPercentage.Text
= "0";</p>
<p style='text-autospace:none'><span>����������������������������� </span>forceFieldUpdate(SuccessPercentage);</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:green'>//
clear the internal failure count</span></p>
<p style='text-autospace:none'><span>����������������������������� </span>m_numFailures
= 0;</p>
<p style='text-autospace:none'><span>����������������������������� </span>m_scraperRecordIndex
= 0;</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>switch</span>(m_scraperStatementIndex)
</p>
<p style='text-autospace:none'><span>����������������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������������� </span><span style='color:blue'>case</span>
0 :</p>
<p style='text-autospace:none'><span>�����������������������������������������
</span><span style='color:blue'>if</span>(<span
style='color:blue'>this</span>.GetBalanceSheet.Checked) </p>
<p style='text-autospace:none'><span>�����������������������������������������
</span>{</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>m_scraperActiveStatement = FinancialStatements.BalanceSheet;</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>m_scraperOperatingState = ScraperOperatingState.InStatement;</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>m_runDisplayMessage = "BALANCE SHEET";</p>
<p style='text-autospace:none'><span>�����������������������������������������
</span>} </p>
<p style='text-autospace:none'><span>�����������������������������������������
</span><span style='color:blue'>else</span></p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>++m_scraperStatementIndex;</p>
<p style='text-autospace:none'><span>�����������������������������������������
</span><span style='color:blue'>break</span>;</p>
<p style='text-autospace:none'><span>����������������������������������� </span><span style='color:blue'>case</span>
1 :</p>
<p style='text-autospace:none'><span>�����������������������������������������
</span><span style='color:blue'>if</span>(<span
style='color:blue'>this</span>.GetCashFlow.Checked) </p>
<p style='text-autospace:none'><span>�����������������������������������������
</span>{</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>m_scraperActiveStatement = FinancialStatements.CashFlows;</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>m_scraperOperatingState = ScraperOperatingState.InStatement;</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>m_runDisplayMessage = "CASH FLOW";</p>
<p style='text-autospace:none'><span>�����������������������������������������
</span>} </p>
<p style='text-autospace:none'><span>�����������������������������������������
</span><span style='color:blue'>else</span></p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>++m_scraperStatementIndex;</p>
<p style='text-autospace:none'><span>�����������������������������������������
</span><span style='color:blue'>break</span>;</p>
<p style='text-autospace:none'><span>����������������������������������� </span><span style='color:blue'>case</span>
2 :</p>
<p style='text-autospace:none'><span>�����������������������������������������
</span><span style='color:blue'>if</span>(<span
style='color:blue'>this</span>.GetIncomeStatement.Checked) </p>
<p style='text-autospace:none'><span>�����������������������������������������
</span>{</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>m_scraperActiveStatement = FinancialStatements.Income;</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>m_scraperOperatingState = ScraperOperatingState.InStatement;</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>m_runDisplayMessage = "INCOME STMNT";</p>
<p style='text-autospace:none'><span>�����������������������������������������
</span>} </p>
<p style='text-autospace:none'><span>�����������������������������������������
</span><span style='color:blue'>else</span></p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>++m_scraperStatementIndex;</p>
<p style='text-autospace:none'><span>�����������������������������������������
</span><span style='color:blue'>break</span>;</p>
<p style='text-autospace:none'><span>����������������������������������� </span><span style='color:blue'>case</span>
3 :</p>
<p style='text-autospace:none'><span>�����������������������������������������
</span><span style='color:blue'>if</span>(<span
style='color:blue'>this</span>.GetEquityInfo.Checked) </p>
<p style='text-autospace:none'><span>�����������������������������������������
</span>{</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>m_scraperActiveStatement = FinancialStatements.Equity;</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>m_scraperOperatingState = ScraperOperatingState.InStatement;</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>m_runDisplayMessage = "EQUITY INFO";</p>
<p style='text-autospace:none'><span>�����������������������������������������
</span>} </p>
<p style='text-autospace:none'><span>�����������������������������������������
</span><span style='color:blue'>else</span></p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>stopScraper();</p>
<p style='text-autospace:none'><span>�����������������������������������������
</span><span style='color:blue'>break</span>;</p>
<p style='text-autospace:none'><span>����������������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>break</span>;</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>case</span>
ScraperOperatingState.InStatement<a name="ScraperOperatingStateInStatement"></a>
:</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>if</span>(m_scraperRecordIndex
>= m_symbols.Count)</p>
<p style='text-autospace:none'><span>����������������������������������� </span>m_scraperOperatingState
= ScraperOperatingState.EndStatement;</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>else</span></p>
<p style='text-autospace:none'><span>����������������������������� </span>�����
scrapeFinancialInformation(m_browser,m_scraperActiveStatement,m_scraperRecordIndex++);</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>break</span>;</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>case</span>
ScraperOperatingState.EndStatement<a name="ScraperOperatingStateEndStatement"></a>
:</p>
<p style='text-autospace:none'><span>����������������������������� </span>m_runDisplayMessage
= "FINISH STMNT";</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>if</span>(++m_scraperStatementIndex
< 4)</p>
<p style='text-autospace:none'><span>����������������������������������� </span>m_scraperOperatingState
= ScraperOperatingState.StartStatement;</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>else</span></p>
<p style='text-autospace:none'><span>����������������������������������� </span>stopScraper();</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>break</span>;</p>
<p style='text-autospace:none'><span>����������������� </span>}</p>
<p style='text-autospace:none'> this.Invalidate(false);<a name="invalidate"></a></p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span>
Top level scavenging method.� This function handles scavenging for all generically
parsed records.� It deals with</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span>
a single record at a time and is repeatedly dispatched to process all records.�
When it completes processing, it</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> will set the operating state to EndStatement</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="ie"></span><span style='color:green'>Browser
instance, used to download code and extract text from the DOM</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="scrapeSource"></span><span style='color:green'>Specific
data type to be scraped</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>void</span> scrapeFinancialInformation<a name="scrapeFinancialInformation"></a>(InternetExplorer
ie,FinancialStatements scrapeSource,<span style='color:blue'>int</span> recordIndex)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>bool</span>
rslt = processRecord(ie,scrapeSource,(<span style='color:blue'>string</span>)
m_symbols[recordIndex]);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
update the current ticker symbol display</span></p>
<p style='text-autospace:none'><span>����������������� </span>updateProgressMonitorFields(recordIndex,rslt);</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> This is the generic top level function that handles scavenging
individual company records.</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> It first determines the correct URL to retrieve data from,
and then directs the browser</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span>
to this location.� If the browser returns sufficient data to indicate the result
was</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> successful it then attempts to parse the returned data</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="ie"></span><span style='color:green'>Reference
to web browser instance used to handle basic HTTP connection</span><span
style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="srt"></span><span style='color:green'>The
type of financial statement being processed</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="sym"></span><span style='color:green'>The
current symbol being processed</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><returns></span><span
style='color:green'>Boolean indicating whether or not a record was successfully
retrieved</span><span style='color:gray'></returns></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>bool</span> processRecord<a name="processRecord"></a>(InternetExplorer
ie,FinancialStatements srt,<span style='color:blue'>string</span> sym)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>
theURL = "";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>switch</span>(srt)
</p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>case</span>
FinancialStatements.BalanceSheet :</p>
<p style='text-autospace:none'><span>����������������������������� </span>theURL
= balanceSheetURL(sym);</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>break</span>;</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>case</span>
FinancialStatements.Income :</p>
<p style='text-autospace:none'><span>����������������������������� </span>theURL
= incomeStatementURL(sym);</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>break</span>;</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>case</span>
FinancialStatements.CashFlows :</p>
<p style='text-autospace:none'><span>����������������������������� </span>theURL
= cashFlowURL(sym);</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>break</span>;</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>case</span>
FinancialStatements.Equity :</p>
<p style='text-autospace:none'><span>����������������������������� </span>theURL
= equityStatementURL(sym);</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>break</span>;</p>
<p style='text-autospace:none'><span>����������������� </span>}</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>
theBody = explorerRead(theURL,ie);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>bool</span>
rslt = <span
style='color:blue'>false</span>;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>if</span>(theBody
!= <span
style='color:blue'>null</span> && theBody.Length > 1500) <a name="processRecordTestSize"></a></p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>switch</span>(srt)
</p>
<p style='text-autospace:none'><span>����������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>case</span>
FinancialStatements.BalanceSheet :</p>
<p style='text-autospace:none'><span>����������������������������������� </span>rslt
= processBalanceSheetRecord(sym,theBody);</p>
<p style='text-autospace:none'><span>����������������������������������� </span><span style='color:blue'>break</span>;</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>case</span>
FinancialStatements.Income :</p>
<p style='text-autospace:none'><span>����������������������������������� </span>rslt
= processIncomeRecord(sym,theBody);</p>
<p style='text-autospace:none'><span>����������������������������������� </span><span style='color:blue'>break</span>;</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>case</span>
FinancialStatements.CashFlows :</p>
<p style='text-autospace:none'><span>����������������������������������� </span>rslt
= processCashFlowRecord(sym,theBody);</p>
<p style='text-autospace:none'><span>����������������������������������� </span><span style='color:blue'>break</span>;</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>case</span>
FinancialStatements.Equity :</p>
<p style='text-autospace:none'><span>����������������������������������� </span>rslt
= processEquityRecord(sym,theBody);</p>
<p style='text-autospace:none'><span>����������������������������������� </span><span style='color:blue'>break</span>;</p>
<p style='text-autospace:none'><span>����������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������� </span>} </p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>return</span>
rslt;</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span>
Updates the display controls during the scavenging process.� This provides</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> the user with information on the progress of their scavenging
operation. It</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> updates the progress bar, the various record counts, and
the elapsed and </span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> remaining time displays</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="currentIndex"></span><span style='color:green'>Current
record index</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="lastResultSuccessful"></span><span style='color:green'>true
if the last record was successfully retrieved</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>void</span> updateProgressMonitorFields<a name="updateProgressMonitorFields"></a>(<span
style='color:blue'>int</span> currentIndex,<span style='color:blue'>bool</span>
lastResultSuccessful)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
update the ticker field display</span></p>
<p style='text-autospace:none'><span>����������������� </span>CurrentTickerDisplay.Text
= (<span
style='color:blue'>string</span>) m_symbols[currentIndex];</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>if</span>(lastResultSuccessful)</p>
<p style='text-autospace:none'><span>����������������������� </span>CurrentTickerDisplay.BackColor
= Color.LightGreen;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>else</span></p>
<p style='text-autospace:none'><span>����������������������� </span>CurrentTickerDisplay.BackColor
= Color.LightPink;</p>
<p style='text-autospace:none'><span>����������������� </span>CurrentTickerDisplay.Invalidate(<span
style='color:blue'>true</span>);</p>
<p style='text-autospace:none'><span>����������������� </span>CurrentTickerDisplay.Update();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
update the progress display</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>float</span>
v1 = (<span
style='color:blue'>float</span>) currentIndex / (<span style='color:blue'>float</span>)
m_symbols.Count;</p>
<p style='text-autospace:none'><span>����������������� </span>progressBar1.Value
= (<span style='color:blue'>int</span>) (v1 * 1000.0);</p>
<p style='text-autospace:none'><span>����������������� </span>forceFieldUpdate(progressBar1);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
update the current record display</span></p>
<p style='text-autospace:none'><span>����������������� </span>CurrentRecordDisplay.Text
= currentIndex.ToString();</p>
<p style='text-autospace:none'><span>����������������� </span>forceFieldUpdate(CurrentRecordDisplay);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
update the total # successfully recovered and the success percentage</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
if the last record was successfully recovered</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>if</span>(lastResultSuccessful)</p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:green'>//
success count</span></p>
<p style='text-autospace:none'><span>����������������������� </span>TotalRecoveryDisplay.Text
= (currentIndex + 1 - m_numFailures).ToString();</p>
<p style='text-autospace:none'><span>����� </span>����������������� forceFieldUpdate(TotalRecoveryDisplay);</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:green'>//
success percentage</span></p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>float</span>
pctg = ((<span style='color:blue'>float</span>) currentIndex - m_numFailures)
/ (<span
style='color:blue'>float</span>) currentIndex;</p>
<p style='text-autospace:none'><span>����������������������� </span>SuccessPercentage.Text
= (pctg * 100.0).ToString("0.00");</p>
<p style='text-autospace:none'><span>����������������������� </span>forceFieldUpdate(SuccessPercentage);</p>
<p style='text-autospace:none'><span>����������������� </span>} </p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>else</span>�
<span style='color:green'>// count the failure</span></p>
<p style='text-autospace:none'><span>����������������������� </span>m_numFailures++;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
update the per record, elapsed, and remaining times</span></p>
<p style='text-autospace:none'><span>����������������� </span>DateTime endItemScrapeTime
= DateTime.Now;</p>
<p style='text-autospace:none'><span>����������������� </span>TimeSpan recordTime
= endItemScrapeTime - m_startItemScrapeTime;</p>
<p style='text-autospace:none'><span>����������������� </span>SecondsPerRecord.Text
= (recordTime.TotalMilliseconds / 1000.0).ToString("0.00");</p>
<p style='text-autospace:none'><span>����������������� </span>forceFieldUpdate(SecondsPerRecord);</p>
<p style='text-autospace:none'><span>����������������� </span>TimeSpan elapsedTime
= endItemScrapeTime - m_startScrapeTime;</p>
<p style='text-autospace:none'><span>����������������� </span></p>
<p style='text-autospace:none'><span>����������������� </span>ElapsedTimeDisplay.Text
= timespanString(elapsedTime);</p>
<p style='text-autospace:none'><span>����������������� </span>forceFieldUpdate(ElapsedTimeDisplay);</p>
<p style='text-autospace:none'><span>����������������� </span>// computing the
remaining time is a guess -� we just use the last record retrieval time</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
and multiply this by the number of remaining records, but the more adventurous
could</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
implement some type of averaging function to get a more stable estimate</span></p>
<p style='text-autospace:none'><span>����������������� </span>TimeSpan estRemTime
= <span style='color:blue'>new</span> TimeSpan(recordTime.Ticks * (m_symbols.Count
- currentIndex));</p>
<p style='text-autospace:none'><span>����������������� </span>RemainingTimeDisplay.Text
= timespanString(estRemTime);</p>
<p style='text-autospace:none'><span>����������������� </span>forceFieldUpdate(RemainingTimeDisplay);</p>
<p style='text-autospace:none'><span>����������������� </span>m_startItemScrapeTime
= endItemScrapeTime;</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Generate the url for retrieving a specific balance sheet</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="sym"></span><span style='color:green'>Symbol
of equity to return data for</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><returns></span><span
style='color:green'>URL of balance sheet for given equity</span><span
style='color:gray'></returns></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>string</span> balanceSheetURL<a name="balanceSheetURL"></a>(<span style='color:blue'>string</span>
sym)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>
firstLetter = sym.Substring(0,1);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>return</span>�
"http://biz.yahoo.com/fin/l/" + firstLetter + "/" + sym
+ "_qb.html";</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Generate the url for retrieving a specific cash flow statement</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="sym"></span><span style='color:green'>Symbol
of equity to return data for</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><returns></span><span
style='color:green'>URL of cash flow statement for given equity</span><span
style='color:gray'></returns></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>string</span> cashFlowURL(<span style='color:blue'>string</span>
sym)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>
firstLetter = sym.Substring(0,1);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>return</span>�
"http://biz.yahoo.com/fin/l/" + firstLetter + "/" + sym
+ "_qc.html";</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Generate the url for retrieving a specific income statement</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="sym"></span><span
style='color:green'>Symbol of equity to return data for</span><span
style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><returns></span><span
style='color:green'>URL of income statement for given equity</span><span
style='color:gray'></returns></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>string</span> incomeStatementURL(<span style='color:blue'>string</span>
sym)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>
firstLetter = sym.Substring(0,1);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>return</span>
"http://biz.yahoo.com/fin/l/" + firstLetter + "/" + sym
+ ".html";</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Generate the url for retrieving a specific equity information
page</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="sym"></span><span style='color:green'>Symbol
of equity to return data for</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><returns></span><span
style='color:green'>URL of equity information page</span><span
style='color:gray'></returns></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>string</span> equityStatementURL(<span style='color:blue'>string</span>
sym)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>
firstLetter = sym.Substring(0,1);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>return</span>�
"http://biz.yahoo.com/p/" + firstLetter + "/" + sym + ".html";</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Method for reading a specific web page and extracting the
text content of the page</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="web_page_address"></span><span style='color:green'>string
giving the URL the browser is to navigate to</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="ie"></span><span style='color:green'>browser
instance</span><span
style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><returns></span><span
style='color:green'>String containing the text contents of the page or null</span><span
style='color:gray'></returns></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>string</span> explorerRead<a name="explorerRead"></a>(<span style='color:blue'>string</span>
web_page_address,InternetExplorer ie)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span>System.Object nullObject
= 0;</p>
<p style='text-autospace:none'><span>����������������� </span>System.Object nullObjStr
= "";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>try</span>
</p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:green'>//
set a five second delay on the timer</span></p>
<p style='text-autospace:none'><span>����������������������� </span>timer1.Interval
= 5000;</p>
<p style='text-autospace:none'><span>����������������������� </span>timer1.Start();</p>
<p style='text-autospace:none'><span>����������������������� </span>ie.Navigate<a name="explorerReadNavigate"></a>(web_page_address,<span
style='color:blue'>ref</span> nullObject, <span style='color:blue'>ref</span>
nullObjStr, <span style='color:blue'>ref</span> nullObjStr, <span
style='color:blue'>ref</span> nullObjStr);</p>
<p style='text-autospace:none'><span>����������������� </span>} </p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>catch</span>(Exception
e)</p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span>timer1.Stop();</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>return</span>
<span
style='color:blue'>null</span>;</p>
<p style='text-autospace:none'><span>����� </span>����������� }</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>int</span>
ctr = 0;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>while</span>(
ie.ReadyState!=tagREADYSTATE.READYSTATE_COMPLETE )</p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span>Application.DoEvents();</p>
<p style='text-autospace:none'><span>����������������������� </span>System.Threading.Thread.Sleep(100);</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>if</span>(++ctr
> 25)</p>
<p style='text-autospace:none'><span>����������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������� </span>timer1.Stop();</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>return</span>
<span
style='color:blue'>null</span>;<a name="explorerReadReturnNull"></a></p>
<p style='text-autospace:none'><span>����������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������� </span>}</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
stop the timer</span></p>
<p style='text-autospace:none'><span>����������������� </span>timer1.Stop();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
extract and return the text contents of the retrieved page</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>return</span>
(ie.Document <span style='color:blue'>as</span> IHTMLDocument2).body.outerText;<a name="explorerReadString"></a></p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Setup for generic parsing of balance sheet data and database
update with scraped data</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="sym"></span><span style='color:green'>Symbol
of equity the page data is for</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="theBodyIn"></span><span style='color:green'>The
raw page data</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><returns></span><span
style='color:green'>Boolean indicating whether parse and dbms update were successful</span><span style='color:gray'></returns></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>bool</span> processBalanceSheetRecord<a name="processBalanceSheetRecord"></a>(<span
style='color:blue'>string</span> sym, <span style='color:blue'>string</span> theBodyIn)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
match patterns for terminal elements</span></p>
<p style='text-autospace:none'><span>����������������� </span>ItemParseDirective[]</p>
<p style='text-autospace:none'><span>����������������������� </span>directives
= {</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"POSTDATE",@"\s*Period
Ending(?<POSTDATE>.+)",ScrapeDataType.Dates,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"CASH",@"\s*Cash
And Cash Equivalents<a name="processBalanceSheetCash"></a>(?<CASH>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"STI",@"\s*Short
Term Investments(?<STI>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"NR",@"\s*Net
Receivables(?<NR>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"I",@"\s*Inventory(?<I>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"OCA",@"\s*Other
Current Assets(?<OCA>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"LTI",@"\s*Long
Term Investments(?<LTI>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"TA",@"\s*Property
Plant And Equipment(?<TA>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"GW",@"\s*Goodwill(?<GW>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"IA",@"\s*Intangible
Assets(?<IA>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"AA",@"\s*Accumulated
Amortization(?<AA>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"OA",@"\s*Other
Assets(?<OA>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"DLTAC",@"\s*Deferred
Long Term Asset Charges(?<DLTAC>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"AP",@"\s*Payables
And Accrued Expenses(?<AP>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"DPAY",@"\s*Short
Term And Current Long Term Debt(?<DPAY>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"OCL",@"\s*Other
Current Liabilities(?<OCL>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"LTD",@"\s*Long
Term Debt(?<LTD>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"OL",@"\s*Other
Liabilities(?<OL>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"DLTLC",@"\s*Deferred
Long Term Liability Charges(?<DLTLC>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"MI",@"\s*Minority
Interest(?<MI>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"NG",@"\s*Negative
Goodwill(?<NG>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"OW",@"\s*Misc
Stocks Options Warrants(?<OW>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"RPS",@"\s*Redeemable
Preferred Stock(?<RPS>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������� </span>�����������������������
�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"PS",@"\s*Preferred
Stock(?<PS>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"CS",@"\s*Common
Stock(?<CS>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������
</span>����� �<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"RE",@"\s*Retained
Earnings(?<RE>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"TS",@"\s*Treasury
Stock(?<TS>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������� </span>�����������
�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"CAPS",@"\s*Capital
Surplus(?<CAPS>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"OSE",@"\s*Other
Stockholder Equity(?<OSE>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������� </span>};</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>int</span>
numColumsRead = 0;</p>
<p style='text-autospace:none'><span>����������������� </span>Hashtable bsd =�
processGenericRecord(theBodyIn,directives,<span style='color:blue'>ref</span>
numColumsRead);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>if</span>(bsd.Count
> 0) </p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span>writeGenericRecord("QuarterlyBalance",sym,bsd,numColumsRead);</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>return</span>
<span
style='color:blue'>true</span>;</p>
<p style='text-autospace:none'><span>����������������� </span>} </p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>else</span></p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>return</span>
<span
style='color:blue'>false</span>;</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Setup for generic parsing of cash flow statement data and
database update with scraped data</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="sym"></span><span style='color:green'>Symbol
of equity the page data is for</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="theBodyIn"></span><span style='color:green'>The
raw page data</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><returns></span><span
style='color:green'>Boolean indicating whether parse and dbms update were successful</span><span style='color:gray'></returns></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>bool</span> processCashFlowRecord<a name="processCashFlowRecord"></a>(<span style='color:blue'>string</span>
sym, <span style='color:blue'>string</span> theBodyIn)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span>ItemParseDirective[]</p>
<p style='text-autospace:none'><span>����������������������� </span>directives
= {</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"POSTDATE",@"\s*Period
Ending:(?<POSTDATE>.+)",ScrapeDataType.Dates,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"DEPR",@"\s*Depreciation(?<DEPR>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"ADNI",@"\s*Adjustments
To Net Income(?<ADNI>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"CAR",@"\s*Changes
In Accounts Receivables(?<CAR>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"CL",@"\s*Changes
In Liabilities(?<CL>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"CI",@"\s*Changes
In Inventories(?<CI>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"COOA",@"\s*Changes
In Other Operating Activities(?<COOA>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"CE",@"\s*Capital
Expenditures(?<CE>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"INV",@"\s*Investments(?<INV>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"OCFIA",@"\s*Other
Cashflows From Investing Activities(?<OCFIA>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"DP",@"\s*Dividends
Paid(?<DP>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"SPS",@"\s*Sale
Purchase Of Stock(?<SPS>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"NB",@"\s*Net
Borrowings(?<NB>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"OCFFA",@"\s*Other
Cashflows From Financing Activities(?<OCFFA>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"EER",@"\s*Effect
Of Exchange Rate(?<EER>.+)",ScrapeDataType.Dollars,4)</p>
<p style='text-autospace:none'><span>�����������������������������������������
</span>�};</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>int</span>
numColumsRead = 0;</p>
<p style='text-autospace:none'><span>����������������� </span>Hashtable cfd =
processGenericRecord(theBodyIn,directives,<span style='color:blue'>ref</span>
numColumsRead);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>if</span>(cfd.Count
> 0)</p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span>writeGenericRecord("QuarterlyCashFlow",sym,cfd,numColumsRead);</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>return</span>
<span
style='color:blue'>true</span>;</p>
<p style='text-autospace:none'><span>����������������� </span>} </p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>else</span></p>
<p style='text-autospace:none'><span>����������������� </span>����� <span
style='color:blue'>return</span> <span style='color:blue'>false</span>;</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Setup for generic parsing of income statement data and database
update with scraped data</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="sym"></span><span style='color:green'>Symbol
of equity the page data is for</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="theBodyIn"></span><span style='color:green'>The
raw page data</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><returns></span><span
style='color:green'>Boolean indicating whether parse and dbms update were successful</span><span style='color:gray'></returns></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>bool</span> processIncomeRecord<a name="processIncomeRecord"></a>(<span style='color:blue'>string</span>
sym, <span style='color:blue'>string</span> theBodyIn)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span>ItemParseDirective[]</p>
<p style='text-autospace:none'><span>����������������������� </span>directives
= {</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"POSTDATE",@"\s*Period
Ending:(?<POSTDATE>.+)",ScrapeDataType.Dates,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"REVENUES",@"\s*Total
Revenue(?<REVENUES>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"COGS",@"\s*Cost
Of Revenue(?<COGS>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"RD",@"\s*Research
And Development(?<RD>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������� </span>�����������������
�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"SGA",@"\s*Selling
General And Administrative Expenses(?<SGA>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"NR",@"\s*Non
Recurring(?<NR>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"OX",@"\s*Other
Operating Expenses(?<OX>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"OIN",@"\s*Total
Other Income And Expenses Net(?<OIN>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"INTEREST",@"\s*Interest
Expense(?<INTEREST>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"IT",@"\s*Income
Tax Expense(?<IT>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"NIUC",@"\s*Equity
Earnings Or Loss Unconsolidated Subsidiary(?<NIUC>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"MINT",@"\s*Minority
Interest(?<MINT>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"DO",@"\s*Discontinued
Operations(?<DO>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"EI",@"\s*Extraordinary
Items(?<EI>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"AC",@"\s*Effect
Of Accounting Changes(?<AC>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"OTHER",@"\s*Other
Items(?<OTHER>.+)",ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,"PSA",@"\s*Preferred
Stock And Other Adjustments(?<PSA>.+)",ScrapeDataType.Dollars,4)</p>
<p style='text-autospace:none'><span>�����������������������������������������
</span>�};</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>int</span>
numColumsRead = 0;</p>
<p style='text-autospace:none'><span>����������������� </span>Hashtable id = processGenericRecord(theBodyIn,directives,<span style='color:blue'>ref</span>
numColumsRead);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>if</span>(id.Count
> 0)</p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span>writeGenericRecord("QuarterlyIncome",sym,id,numColumsRead);</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>return</span>
<span
style='color:blue'>true</span>;</p>
<p style='text-autospace:none'><span>����������������� </span>} </p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>else</span></p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>return</span>
<span
style='color:blue'>false</span>;</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> This handles processing of records whose elements of interest
are defined by item parse directives</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="sym"></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="theBodyIn"></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="directives"></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><returns></returns></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
Hashtable processGenericRecord<a name="processGenericRecord"></a>(<span style='color:blue'>string</span>
theBodyIn,ItemParseDirective[] directives,<span style='color:blue'>ref</span>
<span
style='color:blue'>int</span> columnsRead)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>
theBody = theBodyIn;</p>
<p style='text-autospace:none'><span>����������������� </span>theBody = theBody.Replace("\r","\r\n");</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>int</span>
searchoffset = 0;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>[]
rslts;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>[]
vars = <span
style='color:blue'>new</span> String[1];</p>
<p style='text-autospace:none'><span>����������������� </span>Hashtable finalOutput
= <span style='color:blue'>new</span> Hashtable();</p>
<p style='text-autospace:none'><span>����������������� </span>columnsRead = 0;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>for</span>(<span
style='color:blue'>int</span> i = 0;i < directives.Length;i++)</p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span>directives[i].m_recordID
= i;</p>
<p style='text-autospace:none'><span>����������������������� </span>vars[0] =
directives[i].m_key;</p>
<p style='text-autospace:none'><span>����������������������� </span>rslts = <span style='color:blue'>this</span>.grabData(theBody,directives[i].m_pattern,vars,<span
style='color:blue'>ref</span> searchoffset);</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>if</span>(rslts
!= <span
style='color:blue'>null</span>) </p>
<p style='text-autospace:none'><span>����������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:green'>//
parse the individual results</span></p>
<p style='text-autospace:none'><span>����������������������������� </span>// note
that columnsRead is updated ONLY from the parseDateData result.� This is because
this</p>
<p style='text-autospace:none'><span>����������������������������� </span>// routine
is not prone to error, given the format of dates.� This logic does presuppose
that</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:green'>//
we're always reading in date information, however</span></p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>switch</span>(directives[i].m_dataType)</p>
<p style='text-autospace:none'><span>����������������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������������� </span><span style='color:blue'>case</span>
ScrapeDataType.Dates :� </p>
<p style='text-autospace:none'><span>�����������������������������������������
</span>finalOutput[directives[i].m_key] = parseDateData(rslts[0].Trim(),directives[i].m_numColumns);</p>
<p style='text-autospace:none'><span>�����������������������������������������
</span>columnsRead = ((DateTime[]) finalOutput[directives[i].m_key]).Length;</p>
<p style='text-autospace:none'><span>����������� </span>�����������������������������
<span
style='color:blue'>break</span>;</p>
<p style='text-autospace:none'><span>����������������������������������� </span><span style='color:blue'>case</span>
ScrapeDataType.Dollars :� </p>
<p style='text-autospace:none'><span>�����������������������������������������
</span>finalOutput[directives[i].m_key] = parseNumericData(rslts[0].Trim(),directives[i].m_numColumns);</p>
<p style='text-autospace:none'><span>�����������������������������������������
</span><span style='color:blue'>break</span>;</p>
<p style='text-autospace:none'><span>����������������������������������� </span><span style='color:blue'>case</span>
ScrapeDataType.Numbers :� </p>
<p style='text-autospace:none'><span>�����������������������������������������
</span>finalOutput[directives[i].m_key] = parseNumericData(rslts[0].Trim(),directives[i].m_numColumns);</p>
<p style='text-autospace:none'><span>�����������������������������������������
</span><span style='color:blue'>break</span>;</p>
<p style='text-autospace:none'><span>����������������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������� </span>}����������������
</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>return</span>
finalOutput;</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span>
Custom parser for equity information.� This is an unrolled hand modified version
of the generic parser</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span>
that shows a recently developed parser for some specialized information.� Once
the parsing logic works</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> and is stable, this is a candidate for being rewritten as
another general parser, i.e. the logic is broken</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> down into support methods and an ItemParseDirectives table</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="sym"></span><span style='color:green'>The
key for the record, which will be used when writing it to the database</span><span
style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="theBodyIn"></span><span style='color:green'>The
raw text recovered from the web page</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><returns></returns></span></p>
<p style='text-autospace:none'><span>����� </span>����� <span
style='color:blue'>private</span>� <span
style='color:blue'>bool</span> processEquityRecord<a name="processEquityRecord"></a>(<span style='color:blue'>string</span>
sym,<span style='color:blue'>string</span> theBodyIn)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>
theBody = theBodyIn;</p>
<p style='text-autospace:none'><span>����������������� </span>theBody = theBody.Replace("\r","\r\n");</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>int</span>
searchoffset = 0;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>
empPtn = @"\s*Employees.+:(?<emp>.+)";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>
sctPtn = @"\s*Sector:(?<sct>.+)"; </p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>
instPtn = @"\s*Institutional:(?<inst>\s*[0-9]+)%"; </p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>
soPtn = @"Shares Outstanding(?<so>.+)";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>
lsPtn = @"Last Split(?<ls>.+)";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>
ftPtn = @"Float(?<ft>.+)";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>
stPtn = @"Shares Short(?<ss>.+)";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>[]
rslts;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>
empStr,sctStr,instStr,lsStr,soStr,ftStr,ssStr;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>[]
vars = <span
style='color:blue'>new</span> String[1];</p>
<p style='text-autospace:none'><span>����������������� </span>vars[0] <a name="processEquityRecordVarsAssign"></a>=
"emp";rslts = <span
style='color:blue'>this</span>.grabData(theBody,empPtn,vars,<span
style='color:blue'>ref</span> searchoffset);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>if</span>(rslts
!= <span
style='color:blue'>null</span>)</p>
<p style='text-autospace:none'><span>����������������������� </span>empStr = rslts[0].Trim();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>else</span></p>
<p style='text-autospace:none'><span>����������������������� </span>empStr = "1";</p>
<p style='text-autospace:none'><span>����������������� </span>vars[0] = "sct";rslts
= <span
style='color:blue'>this</span>.grabData(theBody,sctPtn,vars,<span
style='color:blue'>ref</span> searchoffset);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>if</span>(rslts
!= <span
style='color:blue'>null</span>)</p>
<p style='text-autospace:none'><span>����������������������� </span>sctStr = rslts[0].Trim();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>else</span></p>
<p style='text-autospace:none'><span>����������������������� </span>sctStr = "Unknown";</p>
<p style='text-autospace:none'><span>����������������� </span>vars[0] = "inst";rslts
= <span
style='color:blue'>this</span>.grabData(theBody,instPtn,vars,<span
style='color:blue'>ref</span> searchoffset);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>if</span>(rslts
!= <span
style='color:blue'>null</span>)</p>
<p style='text-autospace:none'><span>����������������������� </span>instStr =
rslts[0].Trim();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>else</span></p>
<p style='text-autospace:none'><span>����������������������� </span>instStr =
"0";</p>
<p style='text-autospace:none'><span>����������������� </span>vars[0] = "so";rslts
= <span
style='color:blue'>this</span>.grabData(theBody,soPtn,vars,<span
style='color:blue'>ref</span> searchoffset);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>if</span>(rslts
!= <span
style='color:blue'>null</span>)</p>
<p style='text-autospace:none'><span>����������������������� </span>soStr = rslts[0].Trim();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>else</span></p>
<p style='text-autospace:none'><span>����������������������� </span>soStr = "0";</p>
<p style='text-autospace:none'><span>����������������� </span>vars[0] = "ls";rslts
= <span
style='color:blue'>this</span>.grabData(theBody,lsPtn,vars,<span
style='color:blue'>ref</span> searchoffset);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>if</span>(rslts
!= <span
style='color:blue'>null</span>)</p>
<p style='text-autospace:none'><span>����������������������� </span>lsStr = rslts[0].Trim();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>else</span></p>
<p style='text-autospace:none'><span>����������������������� </span>lsStr = "NONE";</p>
<p style='text-autospace:none'><span>����������������� </span>vars[0] = "ft";rslts
= <span
style='color:blue'>this</span>.grabData(theBody,ftPtn,vars,<span
style='color:blue'>ref</span> searchoffset);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>if</span>(rslts
!= <span
style='color:blue'>null</span>)</p>
<p style='text-autospace:none'><span>����������������������� </span>ftStr = rslts[0].Trim();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>else</span></p>
<p style='text-autospace:none'><span>����������������������� </span>ftStr = "0";</p>
<p style='text-autospace:none'><span>����������������� </span>vars[0] = "ss";rslts
= <span
style='color:blue'>this</span>.grabData(theBody,stPtn,vars,<span
style='color:blue'>ref</span> searchoffset);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>if</span>(rslts
!= <span
style='color:blue'>null</span>)</p>
<p style='text-autospace:none'><span>����������������������� </span>ssStr = rslts[0].Trim();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>else</span></p>
<p style='text-autospace:none'><span>����������������������� </span>ssStr = "0";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
convert the financial values</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>float</span>
numEmpVal = <span
style='color:blue'>new</span> FinancialValue(empStr).Value;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>float</span>
instOwnVal = (<span style='color:blue'>float</span>) (<span style='color:blue'>new</span>
FinancialValue(instStr).Value / 100.0);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>float</span>
sharesOutVal = <span style='color:blue'>new</span> FinancialValue(soStr).Value;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>float</span>
floatVal = (<span
style='color:blue'>float</span>) <span style='color:blue'>new</span> FinancialValue(ftStr).Value;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>float</span>
shortVal = <span
style='color:blue'>new</span> FinancialValue(ssStr).Value;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
deal with any reported split</span></p>
<p style='text-autospace:none'><span>����������������� </span>DateTime splitDate
= <span style='color:blue'>new</span> DateTime(1970,1,1);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>float</span>
splitFactor = 1;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>if</span>(lsStr.ToUpper()
!= "NONE")</p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>int</span>
lsso = 0;</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>string</span>
facPtn = @"factor\s(?<fct>.+)\son\s(?<dat>.+)";</p>
<p style='text-autospace:none'><span>����������������������� </span>vars = <span style='color:blue'>new</span>
String[2];</p>
<p style='text-autospace:none'><span>����������������������� </span>vars[0] =
"fct";vars[1] = "dat";</p>
<p style='text-autospace:none'><span>����������������������� </span>rslts = <span style='color:blue'>this</span>.grabData(lsStr,facPtn,vars,<span
style='color:blue'>ref</span> lsso);</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>string</span>
fctStr = rslts[0].Trim();</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>string</span>
datStr = rslts[1].Trim();</p>
<p style='text-autospace:none'><span>����������������������� </span>splitFactor
= <span style='color:blue'>new</span> FinancialValue(fctStr).Value;</p>
<p style='text-autospace:none'><span>����������������������� </span>splitDate
= DateTime.Parse(datStr);</p>
<p style='text-autospace:none'><span>����������������� </span>} </p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
update the database</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
we know this is a hack for the moment, and we're providing records for</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
1/1/2000,4/1/2000,7/1/200,10/1/2000 ... 2001 (4) 2002 (4)</span></p>
<p style='text-autospace:none'><span>����������������� </span>DateTime writeDate
= DateTime.Now;</p>
<p style='text-autospace:none'><span>����������������� </span>DateTime limDate
= <span style='color:blue'>new</span> DateTime(2003,1,1);</p>
<p style='text-autospace:none'><span>����������������� </span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>while</span>(writeDate
< limDate)</p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span>DateTime nxtWriteDate
= writeDate.AddMonths(3);</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>float</span>
dtoffset = -1;</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>float</span>
sout;</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>if</span>(writeDate
> splitDate)</p>
<p style='text-autospace:none'><span>����������������������������� </span>sout
= sharesOutVal;</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>else</span></p>
<p style='text-autospace:none'><span>����������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������� </span>sout
= sharesOutVal / splitFactor;</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>if</span>(nxtWriteDate
> splitDate)</p>
<p style='text-autospace:none'><span>����������������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������������� </span>System.TimeSpan
ts = splitDate - writeDate;</p>
<p style='text-autospace:none'><span>����������������������������������� </span>dtoffset
= ts.Days;</p>
<p style='text-autospace:none'><span>����������������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������� </span>����� writeCustomEquityRecord(sym,writeDate,dtoffset,numEmpVal,instOwnVal,sout,floatVal,shortVal,sctStr);</p>
<p style='text-autospace:none'><span>����������������������� </span>writeDate
= nxtWriteDate;</p>
<p style='text-autospace:none'><span>����������������� </span>}</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>return</span>
<span
style='color:blue'>true</span>;</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Convert one or more dates in a string to their corresponding
internal form</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="datastring"></span><span style='color:green'>The
raw string of dates</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="nCols"></span><span style='color:green'>The
number of dates in the string</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><returns></span><span
style='color:green'>A DateTime array containing the dates parsed into internal
form</span><span style='color:gray'></returns></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
DateTime[] parseDateData<a name="parseDateData"></a>(<span style='color:blue'>string</span>
datastring,<span
style='color:blue'>int</span> nCols)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>int</span>
len = datastring.Length;</p>
<p style='text-autospace:none'><span>����������������� </span>System.Text.RegularExpressions.Regex
re = <span
style='color:blue'>new</span> System.Text.RegularExpressions.Regex(@"\w+\s+\d+,\s+\d+");</p>
<p style='text-autospace:none'><span>����������������� </span>MatchCollection
theMatch = re.Matches(datastring);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>if</span>(theMatch.Count
== 0)</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>return</span>
<span
style='color:blue'>null</span>;</p>
<p style='text-autospace:none'><span>����������������� </span>DateTime[] a = <span style='color:blue'>new</span>
DateTime[theMatch.Count];</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>for</span>(<span
style='color:blue'>int</span> i = 0;i < theMatch.Count;i++)</p>
<p style='text-autospace:none'><span>����������������������� </span>a[i] = DateTime.Parse(theMatch[i].Value);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>return</span>
a;</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Convert one or more numeric values, possible with various
financial symbols or specialized markers to numeric information</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="datastring"></span><span style='color:green'>The
raw data to parse</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="nCols"></span><span style='color:green'>The
number of distinct items expected</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><returns></span><span
style='color:green'>An array of doubles representing the data recovered</span><span
style='color:gray'></returns></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>double</span>[] parseNumericData<a name="parseNumericData"></a>(<span style='color:blue'>string</span>
datastring,<span style='color:blue'>int</span> nCols)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span>System.Text.RegularExpressions.Regex
re;</p>
<p style='text-autospace:none'><span>����������������� </span>re = <span style='color:blue'>new</span>
System.Text.RegularExpressions.Regex("N/A");</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>int</span>
offset = 0;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>bool</span>
isNegative = <span
style='color:blue'>false</span>;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>bool</span>
usingParens = <span
style='color:blue'>false</span>;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>bool</span>
dollarValue = <span
style='color:blue'>false</span>;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>double</span>[]
results = <span
style='color:blue'>new</span> <span style='color:blue'>double</span>[nCols];</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
match N/A</span></p>
<p style='text-autospace:none'><span>����������������� </span>//��������� [(][$]digits,commas[)]</p>
<p style='text-autospace:none'><span>����������������� </span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>
formnum = "";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>for</span>(<span
style='color:blue'>int</span> i = 0;i < nCols;i++)</p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>if</span>(offset
>= datastring.Length)</p>
<p style='text-autospace:none'><span>����������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������� </span>results[i]
= 0.0;</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>continue</span>;</p>
<p style='text-autospace:none'><span>����������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>if</span>(datastring[offset]
== '(')</p>
<p style='text-autospace:none'><span>����������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������� </span>isNegative
= <span style='color:blue'>true</span>;</p>
<p style='text-autospace:none'><span>����������������������������� </span>usingParens
= <span style='color:blue'>true</span>;</p>
<p style='text-autospace:none'><span>����������������������������� </span>offset++;</p>
<p style='text-autospace:none'><span>����������������������� </span>} </p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>else</span>
<span
style='color:blue'>if</span>(datastring[offset] == '-')</p>
<p style='text-autospace:none'><span>����������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������� </span>isNegative
= <span style='color:blue'>true</span>;</p>
<p style='text-autospace:none'><span>����������������������������� </span>usingParens
= <span style='color:blue'>false</span>;</p>
<p style='text-autospace:none'><span>����������������������������� </span>offset++;</p>
<p style='text-autospace:none'><span>����������������������� </span>} </p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>else</span>
<span
style='color:blue'>if</span>(datastring[offset] == 'N')</p>
<p style='text-autospace:none'><span>����������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>if</span>(datastring[offset
+ 1] == '/' && datastring[offset + 2] == 'A')</p>
<p style='text-autospace:none'><span>����������������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������������� </span>results[i]
= 0.0;</p>
<p style='text-autospace:none'><span>����������������������������������� </span>offset
+= 3;</p>
<p style='text-autospace:none'><span>����������������������������������� </span><span style='color:blue'>continue</span>;</p>
<p style='text-autospace:none'><span>����������������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>if</span>(datastring[offset]
== '$') </p>
<p style='text-autospace:none'><span>����������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������� </span>dollarValue
= <span style='color:blue'>true</span>;</p>
<p style='text-autospace:none'><span>����������������������������� </span>offset++;</p>
<p style='text-autospace:none'><span>����������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������������� </span>// now iterate
forward to pick up the number.� It may contain commas and decimal points</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:green'>//
it may be neccessary to end on the first illegal char, or because the comma
ordering </span></p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:green'>//
is wrong</span></p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>int</span>
lastcomma = -1;</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>bool</span>
keepscanning = <span style='color:blue'>true</span>;</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>while</span>(keepscanning)</p>
<p style='text-autospace:none'><span>����������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>if</span>(offset
>= datastring.Length || ((dollarValue && datastring[offset] == '$')
|| datastring[offset] == '(' || datastring[offset] == 'N'))</p>
<p style='text-autospace:none'><span>����������������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������������� </span>keepscanning
= <span
style='color:blue'>false</span>;</p>
<p style='text-autospace:none'><span>����������������������������������� </span><span style='color:blue'>continue</span>;</p>
<p style='text-autospace:none'><span>����������������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>if</span>(datastring[offset]
== ',')</p>
<p style='text-autospace:none'><span>����������������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������������� </span><span style='color:blue'>if</span>(lastcomma
!= -1)</p>
<p style='text-autospace:none'><span>�����������������������������������������
</span><span style='color:blue'>if</span>(offset - lastcomma > 4) </p>
<p style='text-autospace:none'><span>�����������������������������������������
</span>{</p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span><span
style='color:green'>// need to figure this out still, theres two numbers run together</span></p>
<p style='text-autospace:none'><span>�����������������������������������������������
</span>Debug.Assert(<span
style='color:blue'>false</span>);</p>
<p style='text-autospace:none'><span>�����������������������������������������
</span>}</p>
<p style='text-autospace:none'><span>����������������������������������� </span>lastcomma
= offset++;</p>
<p style='text-autospace:none'><span>����������������������������� </span>} </p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>else</span>
<span
style='color:blue'>if</span>(datastring[offset] == '.')</p>
<p style='text-autospace:none'><span>����������������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������������� </span>Debug.Assert(<span
style='color:blue'>false</span>);</p>
<p style='text-autospace:none'><span>����������������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>else</span>
<span
style='color:blue'>if</span>(datastring[offset] >= '0' && datastring[offset]
<= '9')</p>
<p style='text-autospace:none'><span>����������������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������������� </span>formnum
= formnum + datastring[offset++];</p>
<p style='text-autospace:none'><span>����������������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>else</span>
<span
style='color:blue'>if</span>(datastring[offset] == ')' && usingParens)</p>
<p style='text-autospace:none'><span>����� </span>����������������������� {</p>
<p style='text-autospace:none'><span>����������������������������������� </span>++offset;</p>
<p style='text-autospace:none'><span>����������������������������������� </span>keepscanning
= <span
style='color:blue'>false</span>;</p>
<p style='text-autospace:none'><span>����������������������������������� </span><span style='color:blue'>continue</span>;</p>
<p style='text-autospace:none'><span>����������������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>else</span></p>
<p style='text-autospace:none'><span>����������������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������������� </span><span style='color:green'>//
wtf</span></p>
<p style='text-autospace:none'><span>����������������������������������� </span>Debug.Assert(<span
style='color:blue'>false</span>);</p>
<p style='text-autospace:none'><span>����������������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������������� </span>results[i]
= <span style='color:blue'>double</span>.Parse(formnum) * (isNegative ? -1.0
: 1.0);</p>
<p style='text-autospace:none'><span>����������������������� </span>formnum =
"";</p>
<p style='text-autospace:none'><span>����������������� </span>}</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>return</span>
results;</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> This is the generic mechanism used by all parsing components,
generic and custom, to extract</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span>
a single item from the source text being processed.� It</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="bulkText"></span><span style='color:green'>The
text to be scanned for the pattern</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="keyString"></span><span style='color:green'>The
regular expression used to define the pattern</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="vars"></span><span style='color:green'>A
string array to receive the extracted matches</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="offset"></span><span style='color:green'>The
location to start scanning, passed as a reference and updated to the next</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> unscanned position on return</span><span style='color:
gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><returns></span><span
style='color:green'>The extracted matches, same as 'vars'</span><span
style='color:gray'></returns></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>string</span>[] grabData<a name="grabData"></a>(<span style='color:blue'>string</span>
bulkText,<span style='color:blue'>string</span> keyString,<span
style='color:blue'>string</span>[] vars,<span style='color:blue'>ref</span> <span
style='color:blue'>int</span> offset)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span>System.Text.RegularExpressions.Regex
re = <span
style='color:blue'>new</span> System.Text.RegularExpressions.Regex(keyString);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>
substr = bulkText.Substring(offset);</p>
<p style='text-autospace:none'><span>����������������� </span>Match theMatch =
re.Match(bulkText,offset,bulkText.Length - offset);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>if</span>(theMatch
== <span
style='color:blue'>null</span>)</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>return</span>
<span
style='color:blue'>null</span>;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>if</span>(!theMatch.Success)</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>return</span>
<span
style='color:blue'>null</span>;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>[]
rslt = <span
style='color:blue'>new</span> String[vars.Length];</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>for</span>(<span
style='color:blue'>int</span> i = 0;i < vars.Length;i++)</p>
<p style='text-autospace:none'><span>����������������������� </span>rslt[i] =
theMatch.Result("${" + vars[i] + "}");</p>
<p style='text-autospace:none'><span>����������������� </span>offset = theMatch.Index
+ theMatch.Length;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>return</span>
rslt;</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Write a record to the database based on the results of a
generic parsing operation</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="theTable"></span><span style='color:green'>Name
of the table to write the data to</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="sym"></span><span style='color:green'>The
ticker symbol used as a unique key for the record</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="databucket"></span><span style='color:green'>The
set of item and value pairs</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>void</span> writeGenericRecord<a name="writeGenericRecord"></a>(<span style='color:blue'>string</span>
theTable,<span style='color:blue'>string</span> sym,Hashtable databucket,<span
style='color:blue'>int</span> columnsRead)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>[]
kz = <span
style='color:blue'>new</span> String[databucket.Count];</p>
<p style='text-autospace:none'><span>����������������� </span>IDictionaryEnumerator
de = databucket.GetEnumerator();</p>
<p style='text-autospace:none'><span>����������������� </span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
generate the parameterized SQL INSERT statement</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>int</span>
ki = 0;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>while</span>(de.MoveNext())</p>
<p style='text-autospace:none'><span>����������������������� </span>kz[ki++] =
(<span style='color:blue'>string</span>) de.Key;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>
myInsertQuery<a name="genericSQLleader"></a> = "INSERT INTO " + theTable
+ " ";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>
myValStr = "";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>for</span>(<span
style='color:blue'>int</span> i = 0;i < kz.Length;i++) <a name="genericSQLIterator"></a></p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>if</span>(i
== 0) </p>
<p style='text-autospace:none'><span>����������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������� </span>myInsertQuery
= myInsertQuery+ " (SYMBOL,";</p>
<p style='text-autospace:none'><span>����������������������������� </span>myValStr
= myValStr + "Values(\"" + sym + "\",";</p>
<p style='text-autospace:none'><span>����������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>else</span>
</p>
<p style='text-autospace:none'><span>����������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������� </span>myInsertQuery
= myInsertQuery + ",";</p>
<p style='text-autospace:none'><span>����������������������������� </span>myValStr
= myValStr + ",";</p>
<p style='text-autospace:none'><span>����������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������������� </span>myInsertQuery
= myInsertQuery + kz[i];</p>
<p style='text-autospace:none'><span>����������������������� </span>myValStr =
myValStr + "@" + kz[i].ToLower();</p>
<p style='text-autospace:none'><span>����������������� </span>}</p>
<p style='text-autospace:none'><span>����������������� </span></p>
<p style='text-autospace:none'><span>����������������� </span>myInsertQuery =
myInsertQuery + ")" + myValStr + ")";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
set parameter values and perform database update for each information column
provided</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>for</span>(<span
style='color:blue'>int</span> c = 0;c < columnsRead;c++)<a name="genericSQLParameters"></a></p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span>System.Data.OleDb.OleDbCommand
myCommand = <span
style='color:blue'>new</span> System.Data.OleDb.OleDbCommand(myInsertQuery);</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>for</span>(<span
style='color:blue'>int</span> i = 0;i < kz.Length;i++)</p>
<p style='text-autospace:none'><span>����������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>string</span>
ky = "@" + kz[i].ToLower();</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>if</span>(kz[i].Equals("POSTDATE")
&& !(databucket[kz[i]] <span style='color:blue'>is</span> <span
style='color:blue'>string</span>))</p>
<p style='text-autospace:none'><span>����������������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������������� </span>DateTime[]
dt = (DateTime[]) databucket[kz[i]];</p>
<p style='text-autospace:none'><span>����������������������������������� </span>DateTime
theDate = dt[c];</p>
<p style='text-autospace:none'><span>����������������������������������� </span>Debug.Assert(theDate
> <span
style='color:blue'>new</span> DateTime(1970,1,1));</p>
<p style='text-autospace:none'><span>����������������������������������� </span>myCommand.Parameters.Add(ky,theDate.ToShortDateString());</p>
<p style='text-autospace:none'><span>����������������������������� </span>} </p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>else</span>
<span
style='color:blue'>if</span>(!(databucket[kz[i]] <span style='color:blue'>is</span>
<span style='color:blue'>string</span>))</p>
<p style='text-autospace:none'><span>����������������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������������� </span><span style='color:blue'>double</span>[]
fd = (<span style='color:blue'>double</span>[]) databucket[kz[i]];</p>
<p style='text-autospace:none'><span>����������������������������������� </span><span style='color:blue'>double</span>
thefloat = fd[c];</p>
<p style='text-autospace:none'><span>����������������������������������� </span>myCommand.Parameters.Add(ky,thefloat.ToString());</p>
<p style='text-autospace:none'><span>����������������������������� </span>} </p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>else</span></p>
<p style='text-autospace:none'><span>����������������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������������� </span><span style='color:blue'>string</span>
p = (<span style='color:blue'>string</span>) databucket[kz[i]];</p>
<p style='text-autospace:none'><span>����������������������������������� </span>myCommand.Parameters.Add(ky,p);</p>
<p style='text-autospace:none'><span>����������������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>try</span>
</p>
<p style='text-autospace:none'><span>����������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������� </span>myCommand.Connection
= MarketDBMS;</p>
<p style='text-autospace:none'><span>����������������������������� </span>myCommand.ExecuteNonQuery();</p>
<p style='text-autospace:none'><span>����������������������� </span>} </p>
<p style='text-autospace:none'><span>����������������� </span>����� <span
style='color:blue'>catch</span>(OleDbException e)</p>
<p style='text-autospace:none'><span>����������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:green'>//
silently ignore duplicate record errors</span></p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>if</span>(e.ErrorCode
== -2147467259)<a name="ignoreDuplicateError"></a></p>
<p style='text-autospace:none'><span>����������������������������������� </span><span style='color:blue'>continue</span>;</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>string</span>
msg = e.ToString();</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>if</span>(MessageBox.Show
(msg, "Database Error",MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk)
== DialogResult.Cancel)</p>
<p style='text-autospace:none'><span>����������������������������������� </span>Application.Exit();</p>
<p style='text-autospace:none'><span>����������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>catch</span>(Exception
e)</p>
<p style='text-autospace:none'><span>����������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������� </span></p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>string</span>
msg = e.ToString();</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>if</span>(MessageBox.Show
(msg, "Generic Error",MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk)
== DialogResult.Cancel)</p>
<p style='text-autospace:none'><span>����������� </span>�����������������������
Application.Exit();</p>
<p style='text-autospace:none'><span>����������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span>
Write a custom record to the database containing extracted equity information.�
Over time, this</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> logic can be rewritten to use the generic record writing
method (writeGenericRecord)</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="sym"></span><span style='color:green'>The
unique ticker symbol to use as a part of the record key</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="forDate"></span><span style='color:green'>The
date to use as the other part of the record key</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="chgDateOffset"></span><span style='color:green'>A
floating point representation of the date change</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="empcount"></span><span style='color:green'>Number
of employees</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="instown"></span><span style='color:green'>Institutional
ownership percentage</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="sout"></span><span style='color:green'>Shares
outstanding</span><span
style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="thefloat"></span><span
style='color:green'>Share Float</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="shorts"></span><span style='color:green'>Number
of short sales</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="sector"></span><span style='color:green'>Sector,
not currently written</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>void</span> writeCustomEquityRecord<a name="writeCustomEquityRecord"></a>(<span style='color:blue'>string</span>
sym,DateTime forDate,<span style='color:blue'>float</span> chgDateOffset,<span
style='color:blue'>float</span> empcount,<span style='color:blue'>float</span>
instown,<span style='color:blue'>float</span> sout,<span style='color:blue'>float</span>
thefloat,<span style='color:blue'>float</span> shorts,<span style='color:blue'>string</span>
sector)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>
myInsertQuery<a name="customInsertQuery"></a> = </p>
<p style='text-autospace:none'><span>����������������������� </span>"INSERT
INTO QuarterlyEquity (SYMBOL,POSTDATE,CHGDATE,SHARESOUT,FLOATOUT,SHORTED,EMPLOYEES,INSTOWN)
Values(@sym,@pdt,@cdt,@sot,@flt,@srt,@emp,@ion)";</p>
<p style='text-autospace:none'><span>����������������� </span>System.Data.OleDb.OleDbCommand
myCommand = <span
style='color:blue'>new</span> System.Data.OleDb.OleDbCommand(myInsertQuery);</p>
<p style='text-autospace:none'><span>����������������� </span>myCommand.Parameters.Add<a name="myCommandParametersAdd"></a>("@sym",sym);</p>
<p style='text-autospace:none'><span>����������������� </span>myCommand.Parameters.Add("@pdt",forDate.ToShortDateString());</p>
<p style='text-autospace:none'><span>����������������� </span>myCommand.Parameters.Add("@cdt",chgDateOffset.ToString());</p>
<p style='text-autospace:none'><span>����������������� </span>myCommand.Parameters.Add("@sot",sout.ToString());</p>
<p style='text-autospace:none'><span>����������������� </span>myCommand.Parameters.Add("@flt",thefloat.ToString());</p>
<p style='text-autospace:none'><span>����������������� </span>myCommand.Parameters.Add("@srt",shorts.ToString());</p>
<p style='text-autospace:none'><span>����������������� </span>myCommand.Parameters.Add("@emp",empcount.ToString());</p>
<p style='text-autospace:none'><span>����������������� </span>myCommand.Parameters.Add("@ion",instown.ToString());</p>
<p style='text-autospace:none'><span>����������������� </span>myCommand.Connection
= MarketDBMS;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>try</span>
</p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span>myCommand.ExecuteNonQuery<a name="customEquityRecordExecuteNonQuery"></a>();</p>
<p style='text-autospace:none'><span>����������������� </span>} </p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>catch</span>(OleDbException
e)<a name="catchCustomError"></a></p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:green'>//
silently ignore duplicate record errors</span></p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>if</span>(e.ErrorCode
== -2147467259)</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>return</span>;</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>string</span>
msg = e.ToString();</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>if</span>(MessageBox.Show
(msg, "Database Error",MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk)
== DialogResult.Cancel)</p>
<p style='text-autospace:none'><span>����������������������������� </span>Application.Exit();</p>
<p style='text-autospace:none'><span>����������������� </span>}</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>catch</span>(Exception
e)</p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������� </span></p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>string</span>
msg = e.ToString();</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>if</span>(MessageBox.Show
(msg, "Generic Error",MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk)
== DialogResult.Cancel)</p>
<p style='text-autospace:none'><span>����������������������������� </span>Application.Exit();</p>
<p style='text-autospace:none'><span>����������������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> User interface support method used to express a timespan
in a string representing hours, minutes, and seconds</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="theSpan"></span><span style='color:green'>Timespan
to convert to a string</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><returns></span><span
style='color:green'>String in HH:MM:SS form</span><span style='color:gray'></returns></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>string</span> timespanString(TimeSpan theSpan)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>int</span>
hrs = theSpan.Hours;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>int</span>
mins = theSpan.Minutes;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>int</span>
sec = theSpan.Seconds;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>return</span>
hrs.ToString("00") + ":" + mins.ToString("00")
+ ":" + sec.ToString("00");</p>
<p style='text-autospace:none'><span>����������� </span>}���� </p>
<p style='text-autospace:none'><span>����� </span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span>
Ensure that a field updates its visible display contents right now.� The fact
this function exists at</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> all is deplorable, as C# should provide some facility for
constructing basic macros for operations</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span>
like this.� As the C# doesn't have a preprocessor for reasons I can't begin
to fathom, that isn't an</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> option.</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="c"></span><span style='color:green'>The
control that is to be updated</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>void</span> forceFieldUpdate(Control c)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span>c.Invalidate();c.Update();</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>int</span> m_statusScrollOffset = 0;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>void</span> updateMessage(<span style='color:blue'>string</span>
msgtext)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>int</span>
padlen = 60 - msgtext.Length;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>
fullmsg = msgtext.PadLeft(padlen - m_statusScrollOffset,' ').PadRight(m_statusScrollOffset);</p>
<p style='text-autospace:none'><span>����������������� </span>performanceMsg.Text
= fullmsg;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>if</span>(++m_statusScrollOffset
+ msgtext.Length >= 60)</p>
<p style='text-autospace:none'><span>����������������������� </span>m_statusScrollOffset
= 0;</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Clean up any resources being used.</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>protected</span>
<span
style='color:blue'>override</span> <span style='color:blue'>void</span> Dispose(
<span style='color:blue'>bool</span> disposing )</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>if</span>(
disposing )</p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>if</span>(components
!= <span style='color:blue'>null</span>)</p>
<p style='text-autospace:none'><span>����������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������� </span>components.Dispose();</p>
<p style='text-autospace:none'><span>����������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������� </span>}</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>base</span>.Dispose(
disposing );</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span>#region<span
style='font-size:10.0pt;font-family:"Courier New"'> Windows Form Designer generated
code</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Required method for Designer support - do not modify</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> the contents of this method with the code editor.</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>void</span> InitializeComponent()</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.components
= <span
style='color:blue'>new</span> System.ComponentModel.Container();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.CurrentTickerDisplay
= <span style='color:blue'>new</span> System.Windows.Forms.Label();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.progressBar1
= <span style='color:blue'>new</span> System.Windows.Forms.ProgressBar();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.performanceMsg
= <span style='color:blue'>new</span> System.Windows.Forms.Label();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.startButton
= <span
style='color:blue'>new</span> System.Windows.Forms.Button();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.MarketDBMS
= <span
style='color:blue'>new</span> System.Data.OleDb.OleDbConnection();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.timer1
= <span
style='color:blue'>new</span> System.Windows.Forms.Timer(<span
style='color:blue'>this</span>.components);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.groupBox1
= <span
style='color:blue'>new</span> System.Windows.Forms.GroupBox();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetBalanceSheet
= <span style='color:blue'>new</span> System.Windows.Forms.CheckBox();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetCashFlow
= <span
style='color:blue'>new</span> System.Windows.Forms.CheckBox();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetEquityInfo
= <span style='color:blue'>new</span> System.Windows.Forms.CheckBox();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetIncomeStatement
= <span style='color:blue'>new</span> System.Windows.Forms.CheckBox();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1
= <span
style='color:blue'>new</span> System.Windows.Forms.ToolTip(<span
style='color:blue'>this</span>.components);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.CurrentRecordDisplay
= <span style='color:blue'>new</span> System.Windows.Forms.Label();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.TotalRecordsDisplay
= <span style='color:blue'>new</span> System.Windows.Forms.Label();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.TotalRecoveryDisplay
= <span style='color:blue'>new</span> System.Windows.Forms.Label();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.SuccessPercentage
= <span style='color:blue'>new</span> System.Windows.Forms.Label();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.SecondsPerRecord
= <span style='color:blue'>new</span> System.Windows.Forms.Label();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.ElapsedTimeDisplay
= <span style='color:blue'>new</span> System.Windows.Forms.Label();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.RemainingTimeDisplay
= <span style='color:blue'>new</span> System.Windows.Forms.Label();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.stopButton
= <span
style='color:blue'>new</span> System.Windows.Forms.Button();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.exitButton
= <span
style='color:blue'>new</span> System.Windows.Forms.Button();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label2
= <span
style='color:blue'>new</span> System.Windows.Forms.Label();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label1
= <span
style='color:blue'>new</span> System.Windows.Forms.Label();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label3
= <span
style='color:blue'>new</span> System.Windows.Forms.Label();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label5
= <span
style='color:blue'>new</span> System.Windows.Forms.Label();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label4
= <span
style='color:blue'>new</span> System.Windows.Forms.Label();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label6
= <span
style='color:blue'>new</span> System.Windows.Forms.Label();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label9
= <span
style='color:blue'>new</span> System.Windows.Forms.Label();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.groupBox1.SuspendLayout();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.SuspendLayout();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
CurrentTickerDisplay</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.CurrentTickerDisplay.Location
= <span style='color:blue'>new</span> System.Drawing.Point(8, 200);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.CurrentTickerDisplay.Name
= "CurrentTickerDisplay";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.CurrentTickerDisplay.Size
= <span style='color:blue'>new</span> System.Drawing.Size(48, 23);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.CurrentTickerDisplay.TabIndex
= 0;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.CurrentTickerDisplay.Text
= "TICKER";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.CurrentTickerDisplay.TextAlign
= System.Drawing.ContentAlignment.MiddleLeft;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.CurrentTickerDisplay, "Current record ticker
symbol");</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
progressBar1</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.progressBar1.Location
= <span style='color:blue'>new</span> System.Drawing.Point(56, 200);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.progressBar1.Maximum
= 1000;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.progressBar1.Name
= "progressBar1";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.progressBar1.Size
= <span style='color:blue'>new</span> System.Drawing.Size(232, 23);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.progressBar1.TabIndex
= 1;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.progressBar1, "Record download progress display");</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
performanceMsg</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.performanceMsg.Location
= <span style='color:blue'>new</span> System.Drawing.Point(16, 240);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.performanceMsg.Name
= "performanceMsg";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.performanceMsg.Size
= <span style='color:blue'>new</span> System.Drawing.Size(272, 18);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.performanceMsg.TabIndex
= 0;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.performanceMsg, "Informational Messages");</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
startButton</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.startButton.Enabled
= <span style='color:blue'>false</span>;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.startButton.Location
= <span style='color:blue'>new</span> System.Drawing.Point(16, 272);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.startButton.Name
= "startButton";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.startButton.TabIndex
= 3;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.startButton.Text
= "Start";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.startButton, "Start/Pause Scraping");</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.startButton.Click
+= <span style='color:blue'>new</span> System.EventHandler(<span
style='color:blue'>this</span>.startButton_Click);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
timer1</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.timer1.Tick
+= <span style='color:blue'>new</span> System.EventHandler(<span style='color:
blue'>this</span>.timer1_Tick);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
groupBox1</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.groupBox1.Controls.AddRange(<span
style='color:blue'>new</span> System.Windows.Forms.Control[] {</p>
<p style='text-autospace:none'><span>�����������������������������������������������������������������������������������������
</span>����������������������������������� <span
style='color:blue'>this</span>.GetBalanceSheet,</p>
<p style='text-autospace:none'><span>�����������������������������������������������������������������������������������������
</span>����������������������������������� <span
style='color:blue'>this</span>.GetCashFlow,</p>
<p style='text-autospace:none'><span>�����������������������������������������������������������������������������������������
</span>����������������������������������� <span
style='color:blue'>this</span>.GetEquityInfo,</p>
<p style='text-autospace:none'><span>�����������������������������������������������������������������������������������������
</span>����������������������������������� <span
style='color:blue'>this</span>.GetIncomeStatement});</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.groupBox1.Location
= <span style='color:blue'>new</span> System.Drawing.Point(8, 8);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.groupBox1.Name
= "groupBox1";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.groupBox1.Size
= <span style='color:blue'>new</span> System.Drawing.Size(272, 88);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.groupBox1.TabIndex
= 5;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.groupBox1.TabStop
= <span style='color:blue'>false</span>;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.groupBox1.Text
= "Select Data for Scavenging";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
GetBalanceSheet</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetBalanceSheet.Location
= <span style='color:blue'>new</span> System.Drawing.Point(16, 24);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetBalanceSheet.Name
= "GetBalanceSheet";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetBalanceSheet.TabIndex
= 0;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetBalanceSheet.Text
= "Balance Sheet";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.GetBalanceSheet, "Get Balance Sheet Information");</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetBalanceSheet.CheckedChanged
+= <span style='color:blue'>new</span> System.EventHandler(<span
style='color:blue'>this</span>.GetFinancialStatement_CheckedChanged);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
GetCashFlow</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetCashFlow.Location
= <span style='color:blue'>new</span> System.Drawing.Point(136, 24);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetCashFlow.Name
= "GetCashFlow";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetCashFlow.Size
= <span style='color:blue'>new</span> System.Drawing.Size(120, 24);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetCashFlow.TabIndex
= 0;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetCashFlow.Text
= "Cash Flow";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.GetCashFlow, "Get Cash Flow Statement Information");</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetCashFlow.CheckedChanged
+= <span style='color:blue'>new</span> System.EventHandler(<span
style='color:blue'>this</span>.GetFinancialStatement_CheckedChanged);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
GetEquityInfo</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetEquityInfo.Location
= <span style='color:blue'>new</span> System.Drawing.Point(16, 56);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetEquityInfo.Name
= "GetEquityInfo";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetEquityInfo.TabIndex
= 0;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetEquityInfo.Text
= "Equity Info";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.GetEquityInfo, "Get Equity Information");</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetEquityInfo.CheckedChanged
+= <span style='color:blue'>new</span> System.EventHandler(<span
style='color:blue'>this</span>.GetFinancialStatement_CheckedChanged);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
GetIncomeStatement</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetIncomeStatement.Location
= <span style='color:blue'>new</span> System.Drawing.Point(136, 56);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetIncomeStatement.Name
= "GetIncomeStatement";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetIncomeStatement.Size
= <span style='color:blue'>new</span> System.Drawing.Size(120, 24);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetIncomeStatement.TabIndex
= 0;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetIncomeStatement.Text
= "Income Statement";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.GetIncomeStatement, "Get Income Statement
Information");</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.GetIncomeStatement.CheckedChanged
+= <span style='color:blue'>new</span> System.EventHandler(<span
style='color:blue'>this</span>.GetFinancialStatement_CheckedChanged);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
CurrentRecordDisplay</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.CurrentRecordDisplay.Location
= <span style='color:blue'>new</span> System.Drawing.Point(16, 104);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.CurrentRecordDisplay.Name
= "CurrentRecordDisplay";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.CurrentRecordDisplay.Size
= <span style='color:blue'>new</span> System.Drawing.Size(64, 16);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.CurrentRecordDisplay.TabIndex
= 6;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.CurrentRecordDisplay.Text
= "0";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.CurrentRecordDisplay.TextAlign
= System.Drawing.ContentAlignment.MiddleRight;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.CurrentRecordDisplay, "Number of records checked");</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
TotalRecordsDisplay</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.TotalRecordsDisplay.Location
= <span style='color:blue'>new</span> System.Drawing.Point(128, 104);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.TotalRecordsDisplay.Name
= "TotalRecordsDisplay";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.TotalRecordsDisplay.Size
= <span style='color:blue'>new</span> System.Drawing.Size(72, 16);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.TotalRecordsDisplay.TabIndex
= 6;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.TotalRecordsDisplay.Text
= "0";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.TotalRecordsDisplay.TextAlign
= System.Drawing.ContentAlignment.MiddleLeft;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.TotalRecordsDisplay, "Total number of records
to check");</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
TotalRecoveryDisplay</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.TotalRecoveryDisplay.Location
= <span style='color:blue'>new</span> System.Drawing.Point(16, 128);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.TotalRecoveryDisplay.Name
= "TotalRecoveryDisplay";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.TotalRecoveryDisplay.Size
= <span style='color:blue'>new</span> System.Drawing.Size(64, 16);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.TotalRecoveryDisplay.TabIndex
= 6;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.TotalRecoveryDisplay.Text
= "0";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.TotalRecoveryDisplay.TextAlign
= System.Drawing.ContentAlignment.MiddleRight;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.TotalRecoveryDisplay, "Number of records successfully
updated");</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
SuccessPercentage</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.SuccessPercentage.Location
= <span style='color:blue'>new</span> System.Drawing.Point(168, 128);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.SuccessPercentage.Name
= "SuccessPercentage";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.SuccessPercentage.Size
= <span style='color:blue'>new</span> System.Drawing.Size(48, 16);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.SuccessPercentage.TabIndex
= 6;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.SuccessPercentage.Text
= "0";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.SuccessPercentage.TextAlign
= System.Drawing.ContentAlignment.MiddleRight;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.SuccessPercentage, "% Successfully Retrieved");</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
SecondsPerRecord</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.SecondsPerRecord.Location
= <span style='color:blue'>new</span> System.Drawing.Point(96, 184);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.SecondsPerRecord.Name
= "SecondsPerRecord";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.SecondsPerRecord.Size
= <span style='color:blue'>new</span> System.Drawing.Size(32, 16);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.SecondsPerRecord.TabIndex
= 6;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.SecondsPerRecord.Text
= "0.00";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.SecondsPerRecord, "Time to download a single
record");</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
ElapsedTimeDisplay</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.ElapsedTimeDisplay.Location
= <span style='color:blue'>new</span> System.Drawing.Point(16, 160);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.ElapsedTimeDisplay.Name
= "ElapsedTimeDisplay";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.ElapsedTimeDisplay.Size
= <span style='color:blue'>new</span> System.Drawing.Size(72, 16);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.ElapsedTimeDisplay.TabIndex
= 6;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.ElapsedTimeDisplay.Text
= "00.00.00";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.ElapsedTimeDisplay, "Current Run Time of Scraper");</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
RemainingTimeDisplay</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.RemainingTimeDisplay.Location
= <span style='color:blue'>new</span> System.Drawing.Point(152, 160);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.RemainingTimeDisplay.Name
= "RemainingTimeDisplay";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.RemainingTimeDisplay.Size
= <span style='color:blue'>new</span> System.Drawing.Size(64, 16);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.RemainingTimeDisplay.TabIndex
= 6;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.RemainingTimeDisplay.Text
= "00.00.00";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.RemainingTimeDisplay, "Estimated Remaining
Time for current record");</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
stopButton</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.stopButton.Enabled
= <span style='color:blue'>false</span>;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.stopButton.Location
= <span style='color:blue'>new</span> System.Drawing.Point(104, 272);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.stopButton.Name
= "stopButton";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.stopButton.TabIndex
= 3;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.stopButton.Text
= "Stop";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.stopButton, "Stop Scraping and Reset");</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.stopButton.Click
+= <span style='color:blue'>new</span> System.EventHandler(<span
style='color:blue'>this</span>.stopButton_Click);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
exitButton</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.exitButton.Location
= <span style='color:blue'>new</span> System.Drawing.Point(200, 272);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.exitButton.Name
= "exitButton";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.exitButton.TabIndex
= 3;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.exitButton.Text
= "Exit";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.exitButton, "Exit Scraper");</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.exitButton.Click
+= <span style='color:blue'>new</span> System.EventHandler(<span
style='color:blue'>this</span>.exitButton_Click);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
label2</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label2.Location
= <span style='color:blue'>new</span> System.Drawing.Point(96, 104);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label2.Name
= "label2";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label2.Size
= <span
style='color:blue'>new</span> System.Drawing.Size(24, 16);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label2.TabIndex
= 6;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label2.Text
= "of";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
label1</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label1.Location
= <span style='color:blue'>new</span> System.Drawing.Point(208, 104);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label1.Name
= "label1";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label1.Size
= <span
style='color:blue'>new</span> System.Drawing.Size(64, 16);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label1.TabIndex
= 6;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label1.Text
= "processed.";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
label3</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label3.Location
= <span style='color:blue'>new</span> System.Drawing.Point(88, 128);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label3.Name
= "label3";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label3.Size
= <span
style='color:blue'>new</span> System.Drawing.Size(64, 16);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label3.TabIndex
= 6;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label3.Text
= "recovered";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
label5</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label5.Location
= <span style='color:blue'>new</span> System.Drawing.Point(232, 128);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label5.Name
= "label5";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label5.Size
= <span
style='color:blue'>new</span> System.Drawing.Size(72, 16);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label5.TabIndex
= 6;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label5.Text
= "% success";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
label4</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label4.Location
= <span style='color:blue'>new</span> System.Drawing.Point(136, 184);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label4.Name
= "label4";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label4.Size
= <span
style='color:blue'>new</span> System.Drawing.Size(64, 16);</p>
<p style='text-autospace:none'><span>����������� </span>����� <span
style='color:blue'>this</span>.label4.TabIndex = 6;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label4.Text
= "secs/record";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
label6</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label6.Location
= <span style='color:blue'>new</span> System.Drawing.Point(96, 160);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label6.Name
= "label6";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label6.Size
= <span
style='color:blue'>new</span> System.Drawing.Size(48, 16);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label6.TabIndex
= 6;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label6.Text
= "elapsed";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
label9</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label9.Location
= <span style='color:blue'>new</span> System.Drawing.Point(232, 160);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label9.Name
= "label9";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label9.Size
= <span
style='color:blue'>new</span> System.Drawing.Size(56, 16);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label9.TabIndex
= 6;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.label9.Text
= "remaining";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
WebScraper</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.AutoScaleBaseSize
= <span style='color:blue'>new</span> System.Drawing.Size(5, 13);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.ClientSize
= <span
style='color:blue'>new</span> System.Drawing.Size(296, 302);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.Controls.AddRange(<span
style='color:blue'>new</span> System.Windows.Forms.Control[] {</p>
<p style='text-autospace:none'><span>�����������������������������������������������������������������������������������
</span>����� ����������������� � <span style='color:blue'>this</span>.CurrentRecordDisplay,</p>
<p style='text-autospace:none'><span>�����������������������������������������������������������������������������������������
</span>����������������� � <span style='color:blue'>this</span>.groupBox1,</p>
<p style='text-autospace:none'><span>�����������������������������������������������������������������������������������������
</span>����������������� � <span style='color:blue'>this</span>.progressBar1,</p>
<p style='text-autospace:none'><span>�����������������������������������������������������������������������������������������
</span>����������������� � <span style='color:blue'>this</span>.CurrentTickerDisplay,</p>
<p style='text-autospace:none'><span>�����������������������������������������������������������������������������������������
</span>����������������� � <span style='color:blue'>this</span>.performanceMsg,</p>
<p style='text-autospace:none'><span>�����������������������������������������������������������������������������������������
</span>����������������� � <span style='color:blue'>this</span>.startButton,</p>
<p style='text-autospace:none'><span>�����������������������������������������������������������������������������������������
</span>����������������� � <span style='color:blue'>this</span>.label2,</p>
<p style='text-autospace:none'><span>�����������������������������������������������������������������������������������������
</span>����������������� � <span style='color:blue'>this</span>.TotalRecordsDisplay,</p>
<p style='text-autospace:none'><span>�����������������������������������������������������������������������������������������
</span>����������������� � <span style='color:blue'>this</span>.label1,</p>
<p style='text-autospace:none'><span>�����������������������������������������������������������������������������������������
</span>����������������� � <span style='color:blue'>this</span>.TotalRecoveryDisplay,</p>
<p style='text-autospace:none'><span>�����������������������������������������������������������������������������������������
</span>����������������� � <span style='color:blue'>this</span>.label3,</p>
<p style='text-autospace:none'><span>�����������������������������������������������������������������������������������������
</span>����������������� � <span style='color:blue'>this</span>.SuccessPercentage,</p>
<p style='text-autospace:none'><span>�����������������������������������������������������������������������������������������
</span>����������������� � <span style='color:blue'>this</span>.label5,</p>
<p style='text-autospace:none'><span>�����������������������������������������
</span>����������������������������������������������� ����������������� � <span style='color:blue'>this</span>.label4,</p>
<p style='text-autospace:none'><span>�����������������������������������������������������������������������������������������
</span>����������������� � <span style='color:blue'>this</span>.SecondsPerRecord,</p>
<p style='text-autospace:none'><span>�����������������������������������������������������������������������������������������
</span>����������������� � <span style='color:blue'>this</span>.label6,</p>
<p style='text-autospace:none'><span>�����������������������������������������������������������������������������������������
</span>����������������� � <span style='color:blue'>this</span>.ElapsedTimeDisplay,</p>
<p style='text-autospace:none'><span>�����������������������������������������������������������������������������������������
</span>����������������� � <span style='color:blue'>this</span>.RemainingTimeDisplay,</p>
<p style='text-autospace:none'><span>�����������������������������������������������������������������������������������������
</span>����������������� � <span style='color:blue'>this</span>.label9,</p>
<p style='text-autospace:none'><span>�����������������������������������������������������������������������������������������
</span>����������������� � <span style='color:blue'>this</span>.stopButton,</p>
<p style='text-autospace:none'><span>�����������������������������������������������������������������������������������������
</span>����������������� � <span style='color:blue'>this</span>.exitButton});</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.FormBorderStyle
= System.Windows.Forms.FormBorderStyle.Fixed3D;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.Name
= "WebScraper";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.Text
= "WebScraper";</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.groupBox1.ResumeLayout(<span
style='color:blue'>false</span>);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.ResumeLayout(<span
style='color:blue'>false</span>);</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span>#endregion</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span>
Method to throw an exception if the page retrieval times out.� This prevents
the system</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span>
from waiting indefinitely for a page return.� This logic could be extended to
retry page</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> requests a finite number of times before timing out</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="sender"></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="e"></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>void</span> timer1_Tick<a name="timer1_Tick"></a>(<span style='color:blue'>object</span>
sender, System.EventArgs e)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>throw</span>
<span
style='color:blue'>new</span> Exception("timed out");</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span>
User interface support routine that controls enabling of the start button.�
It will</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> enable the start button whenever one or more financial statements
are selected for</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> retrieval</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="sender"></span><span style='color:green'>Control
that changed</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="e"></span><span style='color:green'>Control
event information, ignored</span><span style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>void</span> GetFinancialStatement_CheckedChanged<a name="GetFinancialStatement_CheckedChanged"></a>(<span
style='color:blue'>object</span> sender, System.EventArgs e)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>if</span>(((CheckBox)
sender).Checked)</p>
<p style='text-autospace:none'><span>����������������������� </span>++m_numStatementsToScrape;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>else</span>
</p>
<p style='text-autospace:none'><span>����������������������� </span>--m_numStatementsToScrape;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>if</span>(m_numStatementsToScrape
> 0)</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>this</span>.startButton.Enabled
= <span style='color:blue'>true</span>;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>else</span></p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>this</span>.startButton.Enabled
= <span style='color:blue'>false</span>;</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> Read in the set of ticker symbols from a file</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="theFile"></span><span
style='color:green'>The name of the file containing the ticker symbols</span><span
style='color:gray'></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><returns></span><span
style='color:green'>An ArrayList of strings representing the ticker symbols</span><span
style='color:gray'></returns></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
ArrayList loadTickerSymbols<a name="loadTickerSymbols"></a>(<span style='color:blue'>string</span>
theFile)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
get a filestream for pulling in the ticker data</span></p>
<p style='text-autospace:none'><span>����������������� </span>FileStream tickerData
= File.Open("Tickers.txt",FileMode.Open,FileAccess.Read);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
initialize the ticker symbol array</span></p>
<p style='text-autospace:none'><span>����������������� </span>ArrayList syms�
= <span style='color:blue'>new</span> ArrayList();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
get a stream reader to suck the data in from</span></p>
<p style='text-autospace:none'><span>����������������� </span>StreamReader sr
= <span style='color:blue'>new</span> StreamReader(tickerData);</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span>
theLine;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
read in the set of ticker symbols, one per line. Use</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
the trim function to drop any whitespace trying to</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
sneak in</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>while</span>((theLine
= sr.ReadLine()) != <span style='color:blue'>null</span>) </p>
<p style='text-autospace:none'><span>����������� </span>����� {</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>string</span>
s = theLine.Trim();</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:green'>//
make sure we don't put any blank lines into the array, that would</span></p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:green'>//
break various future assumptions</span></p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>if</span>(s.Length
> 0)</p>
<p style='text-autospace:none'><span>����������������������������� </span>syms.Add(s);</p>
<p style='text-autospace:none'><span>����������������� </span>}</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>return</span>
syms;</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span>
Randomize the ordering of the ticker symbols.� This addresses the fact that</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> some sites may be suspicious of large numbers of queries
coming in from a</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span>
single IP address in sorted order.� They may also be suspicious of large numbers</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> of requests from a single IP in any order, but thats another
issue that this</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> code does not deal with.</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="sourceList"></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><returns></returns></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
ArrayList randomizeList<a name="randomizeList"></a>(ArrayList sourceList)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
create a new list to receive the randomized entries</span></p>
<p style='text-autospace:none'><span>����������������� </span>ArrayList reorderedList
= <span style='color:blue'>new</span> ArrayList();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
fire up a random number generator</span></p>
<p style='text-autospace:none'><span>����������������� </span>Random r = <span style='color:blue'>new</span>
Random();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
iterate over the collection of items</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>while</span>(sourceList.Count
> 0)</p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>if</span>(sourceList.Count
== 1) </p>
<p style='text-autospace:none'><span>����������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������� </span>reorderedList.Add(sourceList[0]);</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:green'>//
we could force the while to terminate appropriately, but it's</span></p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:green'>//
easier just to bail out</span></p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>break</span>;</p>
<p style='text-autospace:none'><span>����������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>else</span>
</p>
<p style='text-autospace:none'><span>����������������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:green'>//
this is somewhat sloppy, because we're forcing a large number</span></p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:green'>//
of list reallocations, but it makes the logic pretty straightforward.</span></p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:green'>//
get a random value between 0 and the number of elements remaining to be randomized</span></p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>int</span>
i = r.Next(sourceList.Count);</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:green'>//
use that value to pull a value out of the ordered list and stick it in the </span></p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:green'>//
randomized list</span></p>
<p style='text-autospace:none'><span>����������������������������� </span>reorderedList.Add(sourceList[i]);</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:green'>//
strip the moved item from the source list so we can use our simpleminded</span></p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:green'>//
random index approach</span></p>
<p style='text-autospace:none'><span>����������������� </span>����������� sourceList.RemoveAt(i);</p>
<p style='text-autospace:none'><span>����������������������������� </span>sourceList.TrimToSize();</p>
<p style='text-autospace:none'><span>����������������������� </span>}</p>
<p style='text-autospace:none'><span>����������������� </span>}</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>return</span>
reorderedList;</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>static</span>
<span
style='color:blue'>void</span> Main() </p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
This combined conditional build and exception handler is a technique I saw</span></p>
<p style='text-autospace:none'><span>����������������� </span>// and like very
much.� If you're debugging, it just blows up in the debugger, but</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
if you're running a retail version, uncaught/unhandled errors get snagged and</span></p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:green'>//
something reasonable appears</span></p>
<p style='text-autospace:none'><span
style='font-size:10.0pt;font-family:"Courier New";color:blue'>#if</span><span
style='font-size:10.0pt;font-family:"Courier New"'> DEBUG</span></p>
<p style='text-autospace:none'><span>����������������� </span>Application.Run(<span style='color:blue'>new</span>
WebScraper());</p>
<p style='text-autospace:none'><span
style='font-size:10.0pt;font-family:"Courier New";color:blue'>#else</span></p>
<p style='text-autospace:none'><span>����������������� </span>try </p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span>Application.Run(new
WebScraper());</p>
<p style='text-autospace:none'><span>����������������� </span>}</p>
<p style='text-autospace:none'><span>����������������� </span>catch (Exception
e)</p>
<p style='text-autospace:none'><span>����������������� </span>{ </p>
<p style='text-autospace:none'><span>����������������������� </span>MessageBox.Show("Something
unexpected has happened. Please email " + ProgramSupportEmail + "
with this information. \n\n\n" + e.ToString());</p>
<p style='text-autospace:none'><span>����������������� </span>}</p>
<p style='text-autospace:none'><span
style='font-size:10.0pt;font-family:"Courier New";color:blue'>#endif</span></p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span>
Handle user stop operations.� Dispatches to internal stopScraper function as
this isn't the</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> only way in which the scraper may be stopped</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="sender"></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'><param name="e"></param></span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>void</span> stopButton_Click(<span style='color:blue'>object</span>
sender, System.EventArgs e)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span>stopScraper();</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>void</span> stopScraper()</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span>MarketDBMS.Close();</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.performanceMsg.Text
= "";</p>
<p style='text-autospace:none'><span>����������������� </span>m_scraperOperatingMode
= ScraperOperatingMode.Stopped;</p>
<p style='text-autospace:none'><span>����������������� </span>stopButton.Enabled
= <span style='color:blue'>false</span>;</p>
<p style='text-autospace:none'><span>����������������� </span>startButton.Text
= "Start";</p>
<p style='text-autospace:none'><span>����������������� </span>startButton.Enabled
= (</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>this</span>.GetBalanceSheet.Checked
|| </p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>this</span>.GetCashFlow.Checked
|| </p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>this</span>.GetEquityInfo.Checked
||</p>
<p style='text-autospace:none'><span>����������������������� </span><span style='color:blue'>this</span>.GetIncomeStatement.Checked);</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>private</span>
<span
style='color:blue'>void</span> exitButton_Click(<span style='color:blue'>object</span>
sender, System.EventArgs e)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span>Application.Exit();</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����� </span>}</p>
<p style='text-autospace:none'><span>����� </span><span style='color:gray'>///</span><span style='color:green'>
</span><span
style='color:gray'><summary></span></p>
<p style='text-autospace:none'><span>����� </span><span style='color:gray'>///</span><span style='color:green'>
Data structure that carries information neccessary to parse an individual datum
recovered</span></p>
<p style='text-autospace:none'><span>����� </span><span style='color:gray'>///</span><span style='color:green'>
from a scraped web page</span></p>
<p style='text-autospace:none'><span>����� </span><span style='color:gray'>///</span><span style='color:green'>
</span><span
style='color:gray'></summary></span></p>
<p style='text-autospace:none'><span>����� </span><span style='color:blue'>public</span>
<span style='color:blue'>class</span> ItemParseDirective<a name="ItemParseDirective"></a></p>
<p style='text-autospace:none'><span>����� </span>{</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>public</span>
ItemParseDirective(WebScraper.FinancialStatements rt,<span style='color:blue'>string</span>
k,<span style='color:blue'>string</span> p,WebScraper.ScrapeDataType dt,<span
style='color:blue'>int</span> nc)</p>
<p style='text-autospace:none'><span>����������� </span>{</p>
<p style='text-autospace:none'><span>����������������� </span>m_recordType = rt;</p>
<p style='text-autospace:none'><span>����������������� </span>m_key = k;</p>
<p style='text-autospace:none'><span>����������������� </span>m_pattern = p;</p>
<p style='text-autospace:none'><span>����������������� </span>m_dataType = dt;</p>
<p style='text-autospace:none'><span>����������������� </span>m_numColumns = nc;</p>
<p style='text-autospace:none'><span>����������� </span>}</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:green'>//
statement</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>public</span>
WebScraper.FinancialStatements m_recordType;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:green'>//
column</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>public</span>
<span
style='color:blue'>int</span> m_recordID;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:green'>//
variable key</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>public</span>
<span
style='color:blue'>string</span> m_key<a name="ItemParseDirectivem_key"></a>;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:green'>//
parse string</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>public</span>
<span
style='color:blue'>string</span> m_pattern;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:green'>//
information type</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>public</span>
WebScraper.ScrapeDataType m_dataType;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:green'>//
how many columns of data</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>public</span>
<span
style='color:blue'>int</span> m_numColumns;</p>
<p style='text-autospace:none'><span>����� </span>}</p>
<p style='text-autospace:none'><span
style='font-size:10.0pt;font-family:"Courier New"'>}</span></p>
</body>
</html>