Click here to Skip to main content
15,891,951 members
Articles / Programming Languages / C#

Ripping Data on the Web

Rate me:
Please Sign up or sign in to vote.
4.90/5 (23 votes)
5 Mar 200346 min read 111.8K   1.2K   150  
How to recover and repackage information on the World Wide Web.
<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'>&lt;summary&gt;</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'>&lt;/summary&gt;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>const</span> 
  <span
style='color:blue'>string</span> DBMSConnection = @&quot;Provider=Microsoft.Jet.OLEDB.4.0;Password=&quot;&quot;&quot;&quot;;User 
  ID=Admin;Data Source=CorporateData.mdb;Mode=Share Deny None;Extended Properties=&quot;&quot;&quot;&quot;;Jet 
  OLEDB:System database=&quot;&quot;&quot;&quot;;Jet OLEDB:Registry Path=&quot;&quot;&quot;&quot;;Jet 
  OLEDB:Database Password=&quot;&quot;&quot;&quot;;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=&quot;&quot;&quot;&quot;;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&quot;;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>const</span> 
  <span
style='color:blue'>string</span> TickerSymbolFile = &quot;tickers.txt&quot;;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:blue'>const</span> 
  <span
style='color:blue'>string</span> ProgramSupportEmail = &quot;mark@vibrant3d.com&quot;;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;summary&gt;</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'>&lt;/summary&gt;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</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 
  = &quot;Pause&quot;;</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 
  = &quot;&quot;;</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 
  = &quot;Continue&quot;;</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 
  = &quot;Pause&quot;;</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 = &quot;STARTING&quot;;</p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;sender&quot;&gt;&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;e&quot;&gt;&lt;/param&gt;</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 
  = &quot;STARTING&quot;;</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 
  = &quot;0&quot;;</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 
  = &quot;0&quot;;</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 = &quot;BALANCE SHEET&quot;;</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 = &quot;CASH FLOW&quot;;</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 = &quot;INCOME STMNT&quot;;</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 = &quot;EQUITY INFO&quot;;</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 
  &gt;= 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 
  = &quot;FINISH STMNT&quot;;</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>if</span>(++m_scraperStatementIndex 
  &lt; 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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;ie&quot;&gt;</span><span style='color:green'>Browser 
  instance, used to download code and extract text from the DOM</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;scrapeSource&quot;&gt;</span><span style='color:green'>Specific 
  data type to be scraped</span><span style='color:gray'>&lt;/param&gt;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;ie&quot;&gt;</span><span style='color:green'>Reference 
  to web browser instance used to handle basic HTTP connection</span><span
style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;srt&quot;&gt;</span><span style='color:green'>The 
  type of financial statement being processed</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;sym&quot;&gt;</span><span style='color:green'>The 
  current symbol being processed</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;returns&gt;</span><span
style='color:green'>Boolean indicating whether or not a record was successfully 
  retrieved</span><span style='color:gray'>&lt;/returns&gt;</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 = &quot;&quot;;</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> &amp;&amp; theBody.Length &gt; 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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;currentIndex&quot;&gt;</span><span style='color:green'>Current 
  record index</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;lastResultSuccessful&quot;&gt;</span><span style='color:green'>true 
  if the last record was successfully retrieved</span><span style='color:gray'>&lt;/param&gt;</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(&quot;0.00&quot;);</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(&quot;0.00&quot;);</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;sym&quot;&gt;</span><span style='color:green'>Symbol 
  of equity to return data for</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;returns&gt;</span><span
style='color:green'>URL of balance sheet for given equity</span><span
style='color:gray'>&lt;/returns&gt;</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>� 
  &quot;http://biz.yahoo.com/fin/l/&quot; + firstLetter + &quot;/&quot; + sym 
  + &quot;_qb.html&quot;;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;sym&quot;&gt;</span><span style='color:green'>Symbol 
  of equity to return data for</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;returns&gt;</span><span
style='color:green'>URL of cash flow statement for given equity</span><span
style='color:gray'>&lt;/returns&gt;</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>� 
  &quot;http://biz.yahoo.com/fin/l/&quot; + firstLetter + &quot;/&quot; + sym 
  + &quot;_qc.html&quot;;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;sym&quot;&gt;</span><span
style='color:green'>Symbol of equity to return data for</span><span
style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;returns&gt;</span><span
style='color:green'>URL of income statement for given equity</span><span
style='color:gray'>&lt;/returns&gt;</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> 
  &quot;http://biz.yahoo.com/fin/l/&quot; + firstLetter + &quot;/&quot; + sym 
  + &quot;.html&quot;;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;sym&quot;&gt;</span><span style='color:green'>Symbol 
  of equity to return data for</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;returns&gt;</span><span
style='color:green'>URL of equity information page</span><span
style='color:gray'>&lt;/returns&gt;</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>� 
  &quot;http://biz.yahoo.com/p/&quot; + firstLetter + &quot;/&quot; + sym + &quot;.html&quot;;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;web_page_address&quot;&gt;</span><span style='color:green'>string 
  giving the URL the browser is to navigate to</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;ie&quot;&gt;</span><span style='color:green'>browser 
  instance</span><span
style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;returns&gt;</span><span
style='color:green'>String containing the text contents of the page or null</span><span
style='color:gray'>&lt;/returns&gt;</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 
  = &quot;&quot;;</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 
  &gt; 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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;sym&quot;&gt;</span><span style='color:green'>Symbol 
  of equity the page data is for</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;theBodyIn&quot;&gt;</span><span style='color:green'>The 
  raw page data</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;returns&gt;</span><span
style='color:green'>Boolean indicating whether parse and dbms update were successful</span><span style='color:gray'>&lt;/returns&gt;</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,&quot;POSTDATE&quot;,@&quot;\s*Period 
  Ending(?&lt;POSTDATE&gt;.+)&quot;,ScrapeDataType.Dates,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;CASH&quot;,@&quot;\s*Cash 
  And Cash Equivalents<a name="processBalanceSheetCash"></a>(?&lt;CASH&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;STI&quot;,@&quot;\s*Short 
  Term Investments(?&lt;STI&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;NR&quot;,@&quot;\s*Net 
  Receivables(?&lt;NR&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;I&quot;,@&quot;\s*Inventory(?&lt;I&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;OCA&quot;,@&quot;\s*Other 
  Current Assets(?&lt;OCA&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;LTI&quot;,@&quot;\s*Long 
  Term Investments(?&lt;LTI&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;TA&quot;,@&quot;\s*Property 
  Plant And Equipment(?&lt;TA&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;GW&quot;,@&quot;\s*Goodwill(?&lt;GW&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;IA&quot;,@&quot;\s*Intangible 
  Assets(?&lt;IA&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;AA&quot;,@&quot;\s*Accumulated 
  Amortization(?&lt;AA&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;OA&quot;,@&quot;\s*Other 
  Assets(?&lt;OA&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;DLTAC&quot;,@&quot;\s*Deferred 
  Long Term Asset Charges(?&lt;DLTAC&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;AP&quot;,@&quot;\s*Payables 
  And Accrued Expenses(?&lt;AP&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;DPAY&quot;,@&quot;\s*Short 
  Term And Current Long Term Debt(?&lt;DPAY&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;OCL&quot;,@&quot;\s*Other 
  Current Liabilities(?&lt;OCL&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;LTD&quot;,@&quot;\s*Long 
  Term Debt(?&lt;LTD&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;OL&quot;,@&quot;\s*Other 
  Liabilities(?&lt;OL&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;DLTLC&quot;,@&quot;\s*Deferred 
  Long Term Liability Charges(?&lt;DLTLC&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;MI&quot;,@&quot;\s*Minority 
  Interest(?&lt;MI&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;NG&quot;,@&quot;\s*Negative 
  Goodwill(?&lt;NG&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;OW&quot;,@&quot;\s*Misc 
  Stocks Options Warrants(?&lt;OW&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;RPS&quot;,@&quot;\s*Redeemable 
  Preferred Stock(?&lt;RPS&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������� </span>����������������������� 
  �<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;PS&quot;,@&quot;\s*Preferred 
  Stock(?&lt;PS&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;CS&quot;,@&quot;\s*Common 
  Stock(?&lt;CS&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������� 
  </span>����� �<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;RE&quot;,@&quot;\s*Retained 
  Earnings(?&lt;RE&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;TS&quot;,@&quot;\s*Treasury 
  Stock(?&lt;TS&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������� </span>����������� 
  �<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;CAPS&quot;,@&quot;\s*Capital 
  Surplus(?&lt;CAPS&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;OSE&quot;,@&quot;\s*Other 
  Stockholder Equity(?&lt;OSE&gt;.+)&quot;,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 
  &gt; 0) </p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span>writeGenericRecord(&quot;QuarterlyBalance&quot;,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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;sym&quot;&gt;</span><span style='color:green'>Symbol 
  of equity the page data is for</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;theBodyIn&quot;&gt;</span><span style='color:green'>The 
  raw page data</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;returns&gt;</span><span
style='color:green'>Boolean indicating whether parse and dbms update were successful</span><span style='color:gray'>&lt;/returns&gt;</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,&quot;POSTDATE&quot;,@&quot;\s*Period 
  Ending:(?&lt;POSTDATE&gt;.+)&quot;,ScrapeDataType.Dates,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;DEPR&quot;,@&quot;\s*Depreciation(?&lt;DEPR&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;ADNI&quot;,@&quot;\s*Adjustments 
  To Net Income(?&lt;ADNI&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;CAR&quot;,@&quot;\s*Changes 
  In Accounts Receivables(?&lt;CAR&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;CL&quot;,@&quot;\s*Changes 
  In Liabilities(?&lt;CL&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;CI&quot;,@&quot;\s*Changes 
  In Inventories(?&lt;CI&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;COOA&quot;,@&quot;\s*Changes 
  In Other Operating Activities(?&lt;COOA&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;CE&quot;,@&quot;\s*Capital 
  Expenditures(?&lt;CE&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;INV&quot;,@&quot;\s*Investments(?&lt;INV&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;OCFIA&quot;,@&quot;\s*Other 
  Cashflows From Investing Activities(?&lt;OCFIA&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;DP&quot;,@&quot;\s*Dividends 
  Paid(?&lt;DP&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;SPS&quot;,@&quot;\s*Sale 
  Purchase Of Stock(?&lt;SPS&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;NB&quot;,@&quot;\s*Net 
  Borrowings(?&lt;NB&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;OCFFA&quot;,@&quot;\s*Other 
  Cashflows From Financing Activities(?&lt;OCFFA&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;EER&quot;,@&quot;\s*Effect 
  Of Exchange Rate(?&lt;EER&gt;.+)&quot;,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 
  &gt; 0)</p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span>writeGenericRecord(&quot;QuarterlyCashFlow&quot;,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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;sym&quot;&gt;</span><span style='color:green'>Symbol 
  of equity the page data is for</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;theBodyIn&quot;&gt;</span><span style='color:green'>The 
  raw page data</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;returns&gt;</span><span
style='color:green'>Boolean indicating whether parse and dbms update were successful</span><span style='color:gray'>&lt;/returns&gt;</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,&quot;POSTDATE&quot;,@&quot;\s*Period 
  Ending:(?&lt;POSTDATE&gt;.+)&quot;,ScrapeDataType.Dates,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;REVENUES&quot;,@&quot;\s*Total 
  Revenue(?&lt;REVENUES&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;COGS&quot;,@&quot;\s*Cost 
  Of Revenue(?&lt;COGS&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;RD&quot;,@&quot;\s*Research 
  And Development(?&lt;RD&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������� </span>����������������� 
  �<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;SGA&quot;,@&quot;\s*Selling 
  General And Administrative Expenses(?&lt;SGA&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;NR&quot;,@&quot;\s*Non 
  Recurring(?&lt;NR&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;OX&quot;,@&quot;\s*Other 
  Operating Expenses(?&lt;OX&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;OIN&quot;,@&quot;\s*Total 
  Other Income And Expenses Net(?&lt;OIN&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;INTEREST&quot;,@&quot;\s*Interest 
  Expense(?&lt;INTEREST&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;IT&quot;,@&quot;\s*Income 
  Tax Expense(?&lt;IT&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;NIUC&quot;,@&quot;\s*Equity 
  Earnings Or Loss Unconsolidated Subsidiary(?&lt;NIUC&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;MINT&quot;,@&quot;\s*Minority 
  Interest(?&lt;MINT&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;DO&quot;,@&quot;\s*Discontinued 
  Operations(?&lt;DO&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;EI&quot;,@&quot;\s*Extraordinary 
  Items(?&lt;EI&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;AC&quot;,@&quot;\s*Effect 
  Of Accounting Changes(?&lt;AC&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;OTHER&quot;,@&quot;\s*Other 
  Items(?&lt;OTHER&gt;.+)&quot;,ScrapeDataType.Dollars,4),</p>
<p style='text-autospace:none'><span>����������������������������������������������� 
  </span>�<span style='color:blue'>new</span> ItemParseDirective(FinancialStatements.BalanceSheet,&quot;PSA&quot;,@&quot;\s*Preferred 
  Stock And Other Adjustments(?&lt;PSA&gt;.+)&quot;,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 
  &gt; 0)</p>
<p style='text-autospace:none'><span>����������������� </span>{</p>
<p style='text-autospace:none'><span>����������������������� </span>writeGenericRecord(&quot;QuarterlyIncome&quot;,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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;sym&quot;&gt;&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;theBodyIn&quot;&gt;&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;directives&quot;&gt;&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;returns&gt;&lt;/returns&gt;</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(&quot;\r&quot;,&quot;\r\n&quot;);</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 &lt; 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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;sym&quot;&gt;</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'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;theBodyIn&quot;&gt;</span><span style='color:green'>The 
  raw text recovered from the web page</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;returns&gt;&lt;/returns&gt;</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(&quot;\r&quot;,&quot;\r\n&quot;);</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 = @&quot;\s*Employees.+:(?&lt;emp&gt;.+)&quot;;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span> 
  sctPtn = @&quot;\s*Sector:(?&lt;sct&gt;.+)&quot;; </p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span> 
  instPtn = @&quot;\s*Institutional:(?&lt;inst&gt;\s*[0-9]+)%&quot;; </p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span> 
  soPtn = @&quot;Shares Outstanding(?&lt;so&gt;.+)&quot;;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span> 
  lsPtn = @&quot;Last Split(?&lt;ls&gt;.+)&quot;;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span> 
  ftPtn = @&quot;Float(?&lt;ft&gt;.+)&quot;;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span> 
  stPtn = @&quot;Shares Short(?&lt;ss&gt;.+)&quot;;</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>= 
  &quot;emp&quot;;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 = &quot;1&quot;;</p>
<p style='text-autospace:none'><span>����������������� </span>vars[0] = &quot;sct&quot;;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 = &quot;Unknown&quot;;</p>
<p style='text-autospace:none'><span>����������������� </span>vars[0] = &quot;inst&quot;;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 = 
  &quot;0&quot;;</p>
<p style='text-autospace:none'><span>����������������� </span>vars[0] = &quot;so&quot;;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 = &quot;0&quot;;</p>
<p style='text-autospace:none'><span>����������������� </span>vars[0] = &quot;ls&quot;;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 = &quot;NONE&quot;;</p>
<p style='text-autospace:none'><span>����������������� </span>vars[0] = &quot;ft&quot;;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 = &quot;0&quot;;</p>
<p style='text-autospace:none'><span>����������������� </span>vars[0] = &quot;ss&quot;;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 = &quot;0&quot;;</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() 
  != &quot;NONE&quot;)</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 = @&quot;factor\s(?&lt;fct&gt;.+)\son\s(?&lt;dat&gt;.+)&quot;;</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] = 
  &quot;fct&quot;;vars[1] = &quot;dat&quot;;</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 
  &lt; 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 
  &gt; 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 
  &gt; 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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;datastring&quot;&gt;</span><span style='color:green'>The 
  raw string of dates</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;nCols&quot;&gt;</span><span style='color:green'>The 
  number of dates in the string</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;returns&gt;</span><span
style='color:green'>A DateTime array containing the dates parsed into internal 
  form</span><span style='color:gray'>&lt;/returns&gt;</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(@&quot;\w+\s+\d+,\s+\d+&quot;);</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 &lt; 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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;datastring&quot;&gt;</span><span style='color:green'>The 
  raw data to parse</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;nCols&quot;&gt;</span><span style='color:green'>The 
  number of distinct items expected</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;returns&gt;</span><span
style='color:green'>An array of doubles representing the data recovered</span><span
style='color:gray'>&lt;/returns&gt;</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(&quot;N/A&quot;);</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 = &quot;&quot;;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>for</span>(<span
style='color:blue'>int</span> i = 0;i &lt; 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 
  &gt;= 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] == '/' &amp;&amp; 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 
  &gt;= datastring.Length || ((dollarValue &amp;&amp; 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 &gt; 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] &gt;= '0' &amp;&amp; datastring[offset] 
  &lt;= '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] == ')' &amp;&amp; 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 = 
  &quot;&quot;;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;bulkText&quot;&gt;</span><span style='color:green'>The 
  text to be scanned for the pattern</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;keyString&quot;&gt;</span><span style='color:green'>The 
  regular expression used to define the pattern</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;vars&quot;&gt;</span><span style='color:green'>A 
  string array to receive the extracted matches</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;offset&quot;&gt;</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'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;returns&gt;</span><span
style='color:green'>The extracted matches, same as 'vars'</span><span
style='color:gray'>&lt;/returns&gt;</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 &lt; vars.Length;i++)</p>
<p style='text-autospace:none'><span>����������������������� </span>rslt[i] = 
  theMatch.Result(&quot;${&quot; + vars[i] + &quot;}&quot;);</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;theTable&quot;&gt;</span><span style='color:green'>Name 
  of the table to write the data to</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;sym&quot;&gt;</span><span style='color:green'>The 
  ticker symbol used as a unique key for the record</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;databucket&quot;&gt;</span><span style='color:green'>The 
  set of item and value pairs</span><span style='color:gray'>&lt;/param&gt;</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> = &quot;INSERT INTO &quot; + theTable 
  + &quot; &quot;;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>string</span> 
  myValStr = &quot;&quot;;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>for</span>(<span
style='color:blue'>int</span> i = 0;i &lt; 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+ &quot; (SYMBOL,&quot;;</p>
<p style='text-autospace:none'><span>����������������������������� </span>myValStr 
  = myValStr + &quot;Values(\&quot;&quot; + sym + &quot;\&quot;,&quot;;</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 + &quot;,&quot;;</p>
<p style='text-autospace:none'><span>����������������������������� </span>myValStr 
  = myValStr + &quot;,&quot;;</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 + &quot;@&quot; + 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 + &quot;)&quot; + myValStr + &quot;)&quot;;</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 &lt; 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 &lt; 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 = &quot;@&quot; + kz[i].ToLower();</p>
<p style='text-autospace:none'><span>����������������������������� </span><span style='color:blue'>if</span>(kz[i].Equals(&quot;POSTDATE&quot;) 
  &amp;&amp; !(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 
  &gt; <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, &quot;Database Error&quot;,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, &quot;Generic Error&quot;,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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;sym&quot;&gt;</span><span style='color:green'>The 
  unique ticker symbol to use as a part of the record key</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;forDate&quot;&gt;</span><span style='color:green'>The 
  date to use as the other part of the record key</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;chgDateOffset&quot;&gt;</span><span style='color:green'>A 
  floating point representation of the date change</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;empcount&quot;&gt;</span><span style='color:green'>Number 
  of employees</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;instown&quot;&gt;</span><span style='color:green'>Institutional 
  ownership percentage</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;sout&quot;&gt;</span><span style='color:green'>Shares 
  outstanding</span><span
style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;thefloat&quot;&gt;</span><span
style='color:green'>Share Float</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;shorts&quot;&gt;</span><span style='color:green'>Number 
  of short sales</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;sector&quot;&gt;</span><span style='color:green'>Sector, 
  not currently written</span><span style='color:gray'>&lt;/param&gt;</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>&quot;INSERT 
  INTO QuarterlyEquity (SYMBOL,POSTDATE,CHGDATE,SHARESOUT,FLOATOUT,SHORTED,EMPLOYEES,INSTOWN) 
  Values(@sym,@pdt,@cdt,@sot,@flt,@srt,@emp,@ion)&quot;;</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>(&quot;@sym&quot;,sym);</p>
<p style='text-autospace:none'><span>����������������� </span>myCommand.Parameters.Add(&quot;@pdt&quot;,forDate.ToShortDateString());</p>
<p style='text-autospace:none'><span>����������������� </span>myCommand.Parameters.Add(&quot;@cdt&quot;,chgDateOffset.ToString());</p>
<p style='text-autospace:none'><span>����������������� </span>myCommand.Parameters.Add(&quot;@sot&quot;,sout.ToString());</p>
<p style='text-autospace:none'><span>����������������� </span>myCommand.Parameters.Add(&quot;@flt&quot;,thefloat.ToString());</p>
<p style='text-autospace:none'><span>����������������� </span>myCommand.Parameters.Add(&quot;@srt&quot;,shorts.ToString());</p>
<p style='text-autospace:none'><span>����������������� </span>myCommand.Parameters.Add(&quot;@emp&quot;,empcount.ToString());</p>
<p style='text-autospace:none'><span>����������������� </span>myCommand.Parameters.Add(&quot;@ion&quot;,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, &quot;Database Error&quot;,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, &quot;Generic Error&quot;,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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;theSpan&quot;&gt;</span><span style='color:green'>Timespan 
  to convert to a string</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;returns&gt;</span><span
style='color:green'>String in HH:MM:SS form</span><span style='color:gray'>&lt;/returns&gt;</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(&quot;00&quot;) + &quot;:&quot; + mins.ToString(&quot;00&quot;) 
  + &quot;:&quot; + sec.ToString(&quot;00&quot;);</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;c&quot;&gt;</span><span style='color:green'>The 
  control that is to be updated</span><span style='color:gray'>&lt;/param&gt;</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 &gt;= 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'>&lt;summary&gt;</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'>&lt;/summary&gt;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</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 
  = &quot;CurrentTickerDisplay&quot;;</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 
  = &quot;TICKER&quot;;</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, &quot;Current record ticker 
  symbol&quot;);</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 
  = &quot;progressBar1&quot;;</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, &quot;Record download progress display&quot;);</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 
  = &quot;performanceMsg&quot;;</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, &quot;Informational Messages&quot;);</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 
  = &quot;startButton&quot;;</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 
  = &quot;Start&quot;;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.startButton, &quot;Start/Pause Scraping&quot;);</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 
  = &quot;groupBox1&quot;;</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 
  = &quot;Select Data for Scavenging&quot;;</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 
  = &quot;GetBalanceSheet&quot;;</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 
  = &quot;Balance Sheet&quot;;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.GetBalanceSheet, &quot;Get Balance Sheet Information&quot;);</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 
  = &quot;GetCashFlow&quot;;</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 
  = &quot;Cash Flow&quot;;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.GetCashFlow, &quot;Get Cash Flow Statement Information&quot;);</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 
  = &quot;GetEquityInfo&quot;;</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 
  = &quot;Equity Info&quot;;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.GetEquityInfo, &quot;Get Equity Information&quot;);</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 
  = &quot;GetIncomeStatement&quot;;</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 
  = &quot;Income Statement&quot;;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.GetIncomeStatement, &quot;Get Income Statement 
  Information&quot;);</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 
  = &quot;CurrentRecordDisplay&quot;;</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 
  = &quot;0&quot;;</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, &quot;Number of records checked&quot;);</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 
  = &quot;TotalRecordsDisplay&quot;;</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 
  = &quot;0&quot;;</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, &quot;Total number of records 
  to check&quot;);</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 
  = &quot;TotalRecoveryDisplay&quot;;</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 
  = &quot;0&quot;;</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, &quot;Number of records successfully 
  updated&quot;);</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 
  = &quot;SuccessPercentage&quot;;</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 
  = &quot;0&quot;;</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, &quot;% Successfully Retrieved&quot;);</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 
  = &quot;SecondsPerRecord&quot;;</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 
  = &quot;0.00&quot;;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.SecondsPerRecord, &quot;Time to download a single 
  record&quot;);</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 
  = &quot;ElapsedTimeDisplay&quot;;</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 
  = &quot;00.00.00&quot;;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.ElapsedTimeDisplay, &quot;Current Run Time of Scraper&quot;);</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 
  = &quot;RemainingTimeDisplay&quot;;</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 
  = &quot;00.00.00&quot;;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.RemainingTimeDisplay, &quot;Estimated Remaining 
  Time for current record&quot;);</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 
  = &quot;stopButton&quot;;</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 
  = &quot;Stop&quot;;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.stopButton, &quot;Stop Scraping and Reset&quot;);</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 
  = &quot;exitButton&quot;;</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 
  = &quot;Exit&quot;;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.toolTip1.SetToolTip(<span
style='color:blue'>this</span>.exitButton, &quot;Exit Scraper&quot;);</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 
  = &quot;label2&quot;;</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 
  = &quot;of&quot;;</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 
  = &quot;label1&quot;;</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 
  = &quot;processed.&quot;;</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 
  = &quot;label3&quot;;</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 
  = &quot;recovered&quot;;</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 
  = &quot;label5&quot;;</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 
  = &quot;% success&quot;;</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 
  = &quot;label4&quot;;</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 
  = &quot;secs/record&quot;;</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 
  = &quot;label6&quot;;</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 
  = &quot;elapsed&quot;;</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 
  = &quot;label9&quot;;</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 
  = &quot;remaining&quot;;</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 
  = &quot;WebScraper&quot;;</p>
<p style='text-autospace:none'><span>����������������� </span><span style='color:blue'>this</span>.Text 
  = &quot;WebScraper&quot;;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;sender&quot;&gt;&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;e&quot;&gt;&lt;/param&gt;</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(&quot;timed out&quot;);</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;sender&quot;&gt;</span><span style='color:green'>Control 
  that changed</span><span style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;e&quot;&gt;</span><span style='color:green'>Control 
  event information, ignored</span><span style='color:gray'>&lt;/param&gt;</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 
  &gt; 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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;theFile&quot;&gt;</span><span
style='color:green'>The name of the file containing the ticker symbols</span><span
style='color:gray'>&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;returns&gt;</span><span
style='color:green'>An ArrayList of strings representing the ticker symbols</span><span
style='color:gray'>&lt;/returns&gt;</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(&quot;Tickers.txt&quot;,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 
  &gt; 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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;sourceList&quot;&gt;&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;returns&gt;&lt;/returns&gt;</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 
  &gt; 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(&quot;Something 
  unexpected has happened. Please email &quot; + ProgramSupportEmail + &quot; 
  with this information. \n\n\n&quot; + 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'>&lt;summary&gt;</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'>&lt;/summary&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;sender&quot;&gt;&lt;/param&gt;</span></p>
<p style='text-autospace:none'><span>����������� </span><span style='color:gray'>///</span><span
style='color:green'> </span><span style='color:gray'>&lt;param name=&quot;e&quot;&gt;&lt;/param&gt;</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 
  = &quot;&quot;;</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 
  = &quot;Start&quot;;</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'>&lt;summary&gt;</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'>&lt;/summary&gt;</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>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions