°Ë±¦Êé¿â > ÎÄѧÆäËûµç×ÓÊé > VB2008´ÓÈëÃŵ½¾«Í¨(PDF¸ñʽӢÎÄ°æ) >

µÚ111²¿·Ö

VB2008´ÓÈëÃŵ½¾«Í¨(PDF¸ñʽӢÎÄ°æ)-µÚ111²¿·Ö

С˵£º VB2008´ÓÈëÃŵ½¾«Í¨(PDF¸ñʽӢÎÄ°æ) ×ÖÊý£º ÿҳ4000×Ö

°´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·­Ò³£¬°´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ£¬°´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿£¡
¡ª¡ª¡ª¡ªÎ´ÔĶÁÍꣿ¼ÓÈëÊéÇ©ÒѱãÏ´μÌÐøÔĶÁ£¡



T¡¡A¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡öNote¡¡¡¡Generated¡¡code¡¡is¡¡both¡¡a¡¡blessing¡¡and¡¡a¡¡curse¡£¡¡Generated¡¡code¡¡hides¡¡plexity¡¡and¡¡makes¡¡it¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡simpler¡¡for¡¡you¡¡to¡¡get¡¡your¡¡job¡¡done¡£¡¡But¡¡as¡¡you¡¡saw¡¡in¡¡the¡¡code¡¡excerpts£»¡¡there¡¡is¡¡quite¡¡a¡¡bit¡¡going¡¡on¡¡behind¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡the¡¡scenes£»¡¡and¡¡if¡¡you¡¡don¡¯t¡¡understand¡¡ADO£»¡¡you¡¡will¡¡not¡¡know¡¡what¡¡to¡¡do¡¡when¡¡things¡¡go¡¡wrong¡£¡¡For¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡example£»¡¡when¡¡is¡¡a¡¡connection¡¡to¡¡the¡¡database¡¡made£¿¡¡The¡¡only¡¡way¡¡to¡¡know¡¡that¡¡is¡¡to¡¡look¡¡at¡¡the¡¡generated¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡source¡¡code¡¡and¡¡follow¡¡the¡¡ADO¡¡calls¡£¡¡A¡¡connection¡¡to¡¡a¡¡database¡¡is¡¡made¡¡the¡¡first¡¡time¡¡you¡¡call¡¡one¡¡of¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡the¡¡SQL¡¡methods¡¡£¨for¡¡example£»¡¡¡¡Insert£¨£©£©£»¡¡not¡¡when¡¡the¡¡adapter¡¡is¡¡initialized¡£¡¡¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡To¡¡retrieve¡¡and¡¡iterate¡¡the¡¡data¡¡in¡¡the¡¡table£»¡¡use¡¡the¡¡following¡¡code¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡dataset¡¡As¡¡DatabaseConsoleEx¡£lotteryDataSet¡¡=¡¡_¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡New¡¡DatabaseConsoleEx¡£lotteryDataSet£¨£©¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡table¡¡As¡¡DatabaseConsoleEx¡£lotteryDataSetTableAdapters¡£drawsTableAdapter¡¡=¡¡_¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡New¡¡DatabaseConsoleEx¡£lotteryDataSetTableAdapters¡£drawsTableAdapter£¨£©¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡count¡¡As¡¡Integer¡¡=¡¡table¡£Fill£¨dataset¡£draws£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Console¡£WriteLine£¨¡¨Record¡¡count¡¡is¡¡£¨¡¨¡¡&¡¡dataset¡£draws¡£Count¡¡&¡¡¡¨£©£¨¡¨¡¡&¡¡count¡¡&¡¡¡¨£©¡¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡For¡¡Each¡¡row¡¡As¡¡DatabaseConsoleEx¡£lotteryDataSet¡£drawsRow¡¡In¡¡dataset¡£draws¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Console¡£WriteLine£¨¡¨Date¡¡£¨¡¨¡¡£«¡¡row¡£draw_date¡£ToString£¨£©¡¡&¡¡¡¨£©¡¡£¨¡¨¡¡_¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡&¡¡row¡£first_number¡¡&¡¡¡¨£©¡¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Next¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡variable¡¡table¡¡is¡¡initialized¡¡to¡¡an¡¡adapter¡¡that¡¡connects¡¡to¡¡the¡¡draws¡¡table¡£¡¡The¡¡variable¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡dataset¡¡is¡¡an¡¡empty¡¡collection¡¡ready¡¡for¡¡the¡¡draws¡¡table¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡To¡¡fill¡¡the¡¡data¡¡table¡¡in¡¡the¡¡dataset£»¡¡the¡¡method¡¡table¡£Fill£¨£©¡¡is¡¡called£»¡¡and¡¡the¡¡destination¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡is¡¡the¡¡dataset¡£draws¡¡data¡¡table¡£¡¡After¡¡having¡¡called¡¡¡¡Fill£¨£©£»¡¡the¡¡number¡¡of¡¡records¡¡read¡¡is¡¡returned¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡and¡¡assigned¡¡to¡¡count¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡To¡¡iterate¡¡the¡¡individual¡¡rows£»¡¡a¡¡For¡¡Each¡¡loop¡¡is¡¡used¡£¡¡It¡¡references¡¡the¡¡type¡¡drawsRow£»¡¡and¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡each¡¡instance¡¡of¡¡drawsRow¡¡has¡¡data¡¡members¡¡that¡¡represent¡¡the¡¡draw_date£»¡¡first_number£»¡¡and¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡other¡¡columns¡£¡¡The¡¡iteration¡¡of¡¡the¡¡individual¡¡rows¡¡resembles¡¡the¡¡iteration¡¡of¡¡a¡¡collection¡£¡¡The¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ADO¡¡example¡¡used¡¡a¡¡While¡¡loop¡¡and¡¡required¡¡you¡¡to¡¡know¡¡which¡¡column¡¡was¡¡associated¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡with¡¡which¡¡SELECT¡¡field¡£¡¡¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡Important¡¡Stuff¡¡to¡¡Remember¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡In¡¡this¡¡chapter£»¡¡you¡¡learned¡¡about¡¡the¡¡basics¡¡of¡¡ADO¡¡and¡¡the¡¡Dataset¡¡Designer¡£¡¡Here¡¡are¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡the¡¡main¡¡points¡¡to¡¡remember£º¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡The¡¡real¡¡problem¡¡when¡¡using¡¡a¡¡relational¡¡database¡¡and¡¡a¡¡programming¡¡language¡¡like¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Visual¡¡Basic¡¡is¡¡the¡¡mismatch¡¡of¡¡set¡­based¡¡operations¡¡and¡¡individual¡¡object¡¡operations¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡To¡¡access¡¡a¡¡relational¡¡database£»¡¡you¡¡can¡¡use¡¡ADO¡£¡¡There¡¡is¡¡an¡¡ADO¡¡database¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡driver¡¡for¡¡each¡¡relational¡¡database¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡The¡¡Dataset¡¡Designer¡¡code¡¡is¡¡based¡¡on¡¡ADO£»¡¡and¡¡thus¡¡if¡¡you¡¡understand¡¡ADO£»¡¡you¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡will¡¡be¡¡able¡¡to¡¡understand¡¡how¡¡the¡¡Dataset¡¡Designer¡¡works¡¡and¡¡how¡¡it¡¡can¡¡be¡¡optimized¡£¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡415¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡C¡¡HA¡¡P¡¡TE¡¡R¡¡¡¡¡¡1¡¡4¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡AR¡¡N¡¡I¡¡N¡¡G¡¡¡¡¡¡AB¡¡O¡¡U¡¡T¡¡¡¡R¡¡E¡¡L¡¡AT¡¡IO¡¡N¡¡A¡¡L¡¡¡¡¡¡D¡¡AT¡¡AB¡¡A¡¡SE¡¡¡¡¡¡D¡¡A¡¡TA¡¡393¡¡



¡¡¡¡¡¡¡¡¡¡o¡¡¡¡When¡¡using¡¡ADO£»¡¡the¡¡steps¡¡are¡¡typically¡¡to¡¡connect¡¡to¡¡a¡¡database£»¡¡create¡¡a¡¡mand£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡populate¡¡the¡¡parameters£»¡¡execute¡¡the¡¡mand£»¡¡retrieve¡¡the¡¡data¡¡£¨if¡¡necessary£©£»¡¡close¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡the¡¡mand£»¡¡and¡¡close¡¡the¡¡connection¡£¡¡



¡¡¡¡¡¡¡¡¡¡o¡¡¡¡SQL¡¡is¡¡a¡¡language¡¡used¡¡to¡¡manipulate¡¡the¡¡tables¡¡of¡¡a¡¡relational¡¡database¡£¡¡You¡¡need¡¡to¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡learn¡¡SQL¡¡on¡¡top¡¡of¡¡learning¡¡how¡¡to¡¡use¡¡ADO¡£¡¡



Some¡¡Things¡¡for¡¡You¡¡to¡¡Do¡¡



The¡¡following¡¡are¡¡two¡¡exercises¡¡for¡¡applying¡¡what¡¡you¡¯ve¡¡learned¡¡in¡¡this¡¡chapter¡£¡¡¡¡



¡¡¡¡¡¡¡¡¡¡1¡£¡¡¡¡The¡¡basis¡¡of¡¡the¡¡lottery¡¡application¡¡is¡¡defined¡¡in¡¡terms¡¡of¡¡a¡¡database£»¡¡tables£»¡¡and¡¡data¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Write¡¡a¡¡console¡¡application¡¡that¡¡populates¡¡the¡¡draws¡¡table¡¡using¡¡a¡¡lottery¡¡file¡£¡¡Write¡¡a¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡console¡¡application¡¡that¡¡dumps¡¡the¡¡contents¡¡of¡¡the¡¡draws¡¡table¡¡as¡¡a¡¡lottery¡¡file¡£¡¡¡¡



¡¡¡¡¡¡¡¡¡¡2¡£¡¡¡¡Create¡¡a¡¡console¡¡application¡¡that¡¡accepts¡¡as¡¡mand¡­line¡¡arguments¡¡a¡¡winner¡¡and¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡the¡¡date¡¡of¡¡the¡¡draw¡£¡¡Your¡¡console¡¡application¡¡must¡¡account¡¡for¡¡doubles¡¡and¡¡populate¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡both¡¡the¡¡persons¡¡and¡¡winners¡¡tables¡£¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡416¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡417¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

C¡¡¡¡H¡¡¡¡A¡¡¡¡P¡¡¡¡T¡¡¡¡E¡¡¡¡R¡¡¡¡¡¡¡¡¡¡1¡¡¡¡5¡¡



¡ö¡¡¡ö¡¡¡ö¡¡



Learning¡¡About¡¡LINQ¡¡



In¡¡the¡¡previous¡¡chapter£»¡¡you¡¡learned¡¡about¡¡how¡¡to¡¡access¡¡a¡¡database¡¡using¡¡the¡¡traditional¡¡¡¡

ADO¡¡technologies¡£¡¡When¡¡you¡¡make¡¡ADO¡¡requests£»¡¡you¡¡are¡¡making¡¡SQL¡¡calls¡¡and¡¡¡¡

organizing¡¡the¡¡result¡¡set¡¡data¡¡using¡¡SQL¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡Language¡¡Integrated¡¡Query¡¡£¨LINQ£©¡¡is¡¡a¡¡technology¡¡that¡¡lets¡¡you¡¡organize¡¡your¡¡results¡¡in¡¡a¡¡¡¡

consistent¡¡manner£»¡¡regardless¡¡of¡¡the¡¡underlying¡¡source¡¡of¡¡the¡¡data¡£¡¡Why¡¡yet¡¡another¡¡technology¡¡¡¡

to¡¡query¡¡information£¿¡¡The¡¡answer¡¡is¡¡related¡¡to¡¡XML¡£¡¡

¡¡¡¡¡¡¡¡¡¡XML¡¡is¡¡a¡¡technology¡¡used¡¡to¡¡represent¡¡information¡¡in¡¡a¡¡hierarchical¡¡manner¡£¡¡You¡¡saw¡¡an¡¡¡¡

example¡¡of¡¡XML¡¡in¡¡Chapter¡¡12¡£¡¡XML¡¡has¡¡solved¡¡many¡¡problems¡¡in¡¡an¡¡elegant¡¡and¡¡understand

able¡¡manner¡£¡¡One¡¡of¡¡the¡¡solutions¡¡proposed¡¡by¡¡XML¡¡is¡¡the¡¡ability¡¡to¡¡reference¡¡information¡¡in¡¡¡¡

an¡¡XML¡¡structure¡¡with¡¡XPath£»¡¡which¡¡is¡¡a¡¡way¡¡of¡¡referencing¡¡an¡¡object¡¡structure¡¡using¡¡a¡¡set¡¡of¡¡¡¡

filters¡£¡¡Using¡¡XPath£»¡¡you¡¡can¡¡find¡¡any¡¡node£»¡¡and¡¡the¡¡filters¡¡can¡¡include¡¡the¡¡presence¡¡of¡¡depen

dent¡¡elements£»¡¡which¡¡is¡¡not¡¡easily¡¡possible¡¡in¡¡other¡¡technologies¡£¡¡Put¡¡simply£»¡¡XPath¡¡and¡¡XML¡¡¡¡

are¡¡very¡¡powerful¡¡techniques¡¡used¡¡to¡¡find¡¡information¡£¡¡

¡¡¡¡¡¡¡¡¡¡You¡¡can¡¡consider¡¡XML¡¡and¡¡XPath¡¡as¡¡inspiration¡¡for¡¡LINQ¡£¡¡Where¡¡LINQ¡¡and¡¡XML¡¡XPath¡¡¡¡

deviate¡¡is¡¡that¡¡LINQ¡¡can¡¡be¡¡used¡¡to¡¡query¡¡Visual¡¡Basic¡¡collection¡¡objects£»¡¡XML¡¡documents£»¡¡and¡¡¡¡

relational¡¡databases¡£¡¡Think¡¡of¡¡LINQ¡¡as¡¡a¡¡general¡¡mechanism¡¡used¡¡to¡¡search¡¡a¡¡collection¡¡of¡¡¡¡

information¡£¡¡The¡¡focus¡¡of¡¡this¡¡chapter¡¡will¡¡be¡¡to¡¡explain¡¡the¡¡mechanics¡¡of¡¡LINQ£»¡¡and¡¡demon

strate¡¡how¡¡to¡¡write¡¡queries¡¡and¡¡use¡¡the¡¡methods¡¡associated¡¡with¡¡the¡¡LINQ¡¡library¡£¡¡¡¡



Finding¡¡the¡¡Frequency¡¡of¡¡Winning¡¡Numbers¡¡



The¡¡lottery¡¡application¡¡we¡¯ve¡¡been¡¡working¡¡with¡¡in¡¡previous¡¡chapters¡¡collects¡¡information¡¡¡¡

about¡¡lottery¡¡drawings¡¡to¡¡predict¡¡the¡¡next¡¡set¡¡of¡¡winning¡¡lottery¡¡numbers¡£¡¡The¡¡idea¡¡is¡¡to¡¡find¡¡¡¡

patterns¡£¡¡Again£»¡¡the¡¡reality¡¡is¡¡that¡¡lottery¡¡drawings¡¡are¡¡random£»¡¡so¡¡even¡¡if¡¡you¡¡could¡¡identify¡¡¡¡

patterns£»¡¡that¡¡wouldn¡¯t¡¡mean¡¡you¡¡could¡¡predict¡¡winning¡¡numbers¡£¡¡However£»¡¡what¡¡is¡¡interesting¡¡¡¡

about¡¡this¡¡problem¡¡is¡¡that¡¡you¡¡can¡¡use¡¡LINQ¡¡to¡¡slice¡¡and¡¡dice¡¡the¡¡data¡£¡¡LINQ¡¡lets¡¡you¡¡keep¡¡the¡¡¡¡

data¡¡as¡¡objects£»¡¡and¡¡to¡¡perform¡¡SQLand¡¡XPath¡­like¡¡operations£»¡¡as¡¡you¡¯ll¡¡see¡¡in¡¡this¡¡chapter¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡In¡¡Chapter¡¡10£»¡¡you¡¡saw¡¡a¡¡streaming¡¡architecture£»¡¡where¡¡a¡¡console¡¡application¡¡read¡¡in¡¡text¡¡¡¡

data¡¡and¡¡spat¡¡out¡¡text¡¡data¡£¡¡You¡¡also¡¡saw¡¡examples¡¡of¡¡text¡­to¡­binary¡¡and¡¡binary¡­to¡­text¡¡conver

sions¡£¡¡The¡¡application¡¡in¡¡this¡¡chapter¡¡£¨in¡¡the¡¡FrequencyProcessor¡¡project£©¡¡will¡¡read¡¡in¡¡text£»¡¡process¡¡¡¡

the¡¡data£»¡¡and¡¡then¡¡generate¡¡text¡¡describing¡¡the¡¡frequency¡¡of¡¡lottery¡¡numbers¡£¡¡Thus£»¡¡we¡¡need¡¡to¡¡¡¡

use¡¡the¡¡text¡­to¡­text¡¡interface£»¡¡which¡¡was¡¡defined¡¡in¡¡Chapter¡¡10¡¡as¡¡follows£º¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡395¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡418¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

396¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡1¡¡5¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡I¡¡N¡¡G¡¡¡¡¡¡A¡¡B¡¡OU¡¡T¡¡¡¡¡¡L¡¡I¡¡N¡¡Q¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Interface¡¡IProcessor¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Function¡¡Process£¨ByVal¡¡input¡¡As¡¡String£©¡¡As¡¡String¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Interface¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡input¡¡is¡¡a¡¡text¡¡stream¡¡that¡¡looks¡¡like¡¡this£º¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2006¡£03¡£11¡¡3¡¡7¡¡15¡¡28¡¡30¡¡38¡¡44¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2006¡£03¡£15¡¡10¡¡18¡¡30¡¡34¡¡41¡¡43¡¡5¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2006¡£03¡£18¡¡3¡¡11¡¡12¡¡16¡¡20¡¡40¡¡9¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2006¡£03¡£22¡¡2¡¡3¡¡7¡¡13¡¡42¡¡43¡¡41¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2006¡£03¡£25¡¡3¡¡10¡¡36¡¡40¡¡43¡¡44¡¡35¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2006¡£03¡£29¡¡3¡¡4¡¡8¡¡16¡¡34¡¡39¡¡45¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡If¡¡you¡¡want¡¡to¡¡find¡¡the¡¡frequency¡¡of¡¡the¡¡individual¡¡numbers£»¡¡you¡¡could¡¡parse¡¡each¡¡individual¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡number£»¡¡and¡¡then¡¡increment¡¡the¡¡count¡¡of¡¡the¡¡individual¡¡number¡¡as¡¡an¡¡array£»¡¡like¡¡this£º¡¡¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡frequency¡¡As¡¡Integer¡¡=¡¡0¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡splitUpText£¨£©¡¡As¡¡String¡¡=¡¡lineOfText¡£Split£¨New¡¡Char£¨£©¡¡£û¡¨¡¡¡¨c£ý£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡frequency£¨Integer¡£Parse£¨splitUpText£¨0£©£©£©¡¡£«=¡¡1¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡frequency£¨Integer¡£Parse£¨splitUpText£¨1£©£©£©¡¡£«=¡¡1¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£¡¡¡£¡¡¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡split¡¡line¡¡of¡¡text¡¡contains¡¡the¡¡list¡¡of¡¡numbers£»¡¡separated¡¡by¡¡spaces£»¡¡which¡¡is¡¡then¡¡converted¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡to¡¡a¡¡series¡¡of¡¡numbers£»¡¡each¡¡of¡¡which¡¡is¡¡used¡¡as¡¡an¡¡index¡¡for¡¡the¡¡frequency¡£¡¡The¡¡solution¡¡is¡¡fast¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡and¡¡works£»¡¡but¡¡it¡¡has¡¡a¡¡big¡¡problem£º¡¡it¡¡is¡¡not¡¡extendable¡£¡¡The¡¡solution¡¡solves¡¡a¡¡single¡¡problem¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡and¡¡only¡¡a¡¡single¡¡problem¡£¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡For¡¡example£»¡¡let¡¯s¡¡say¡¡that¡¡you¡¡want¡¡to¡¡figure¡¡out¡¡other¡¡statistical¡¡information£»¡¡such¡¡as¡¡which¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡numeric¡¡binations¡¡occur¡¡most¡¡often¡£¡¡Using¡¡the¡¡previous¡¡solution£»¡¡that¡¡would¡¡require¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡reparsing¡¡the¡¡text¡¡stream¡¡again¡£¡¡That¡¡is¡¡an¡¡expensive¡¡and¡¡tedious¡¡solution¡£¡¡The¡¡better¡¡solution¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡would¡¡be¡¡to¡¡convert¡¡the¡¡stream¡¡into¡¡a¡¡series¡¡of¡¡objects¡¡that¡¡could¡¡be¡¡processed¡£¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡However£»¡¡the¡¡problem¡¡at¡¡hand¡¡is¡¡calculating¡¡the¡¡frequency¡¡of¡¡individual¡¡numbers¡£¡¡So¡¡why¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡exert¡¡the¡¡extra¡¡effort¡¡if¡¡the¡¡solution¡¡that¡¡solves¡¡the¡¡single¡¡problem¡¡works£¿¡¡Writing¡¡good¡¡code¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡means¡¡solving¡¡problems¡¡using¡¡a¡¡generic¡¡but¡¡specific¡¡approach¡£¡¡You¡¡want¡¡to¡¡write¡¡specific¡¡code¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡so¡¡that¡¡you¡¡do¡¡not¡¡get¡¡bogged¡¡down¡¡in¡¡thinking¡¡about¡¡details¡¡in¡¡the¡¡future£»¡¡and¡¡you¡¡want¡¡to¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡write¡¡generic¡¡code¡¡so¡¡that¡¡any¡¡future¡¡requirement¡¡does¡¡not¡¡cause¡¡you¡¡to¡¡pletely¡¡rewrite¡¡the¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡old¡¡application¡£¡¡Knowing¡¡when¡¡to¡¡write¡¡specific¡¡code¡¡and¡¡when¡¡to¡¡write¡¡generic¡¡code¡¡is¡¡really¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡a¡¡matter¡¡of¡¡experience¡ªthe¡¡only¡¡way¡¡to¡¡learn¡¡is¡¡to¡¡write¡¡code¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Extending¡¡the¡¡Lottery¡­Prediction¡¡System¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡In¡¡Chapter¡¡10£»¡¡the¡¡IProce

·µ»ØĿ¼ ÉÏÒ»Ò³ ÏÂÒ»Ò³ »Øµ½¶¥²¿ ÔÞ£¨0£© ²È£¨1£©

Äã¿ÉÄÜϲ»¶µÄ