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

µÚ75²¿·Ö

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

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

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




actual¡¡object¡¡instances¡£¡¡There¡¡could¡¡be¡¡a¡¡case¡¡for¡¡adding¡¡code¡¡that¡¡verifies¡¡if¡¡processor¡¡references¡¡¡¡

an¡¡actual¡¡object¡¡instance£»¡¡but¡¡there¡¡is¡¡absolutely¡¡no¡¡point¡¡to¡¡adding¡¡code¡¡to¡¡verify¡¡if¡¡writer¡¡and¡¡¡¡

reader¡¡reference¡¡actual¡¡object¡¡instances¡£¡¡Doing¡¡so¡¡would¡¡imply¡¡that¡¡your¡¡truth¡¡test¡¡block¡¡is¡¡¡¡

inplete¡¡and¡¡you¡¡have¡¡not¡¡thought¡¡through¡¡all¡¡the¡¡permutations¡¡that¡¡assign¡¡writer¡¡and¡¡reader¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡Let¡¯s¡¡look¡¡at¡¡the¡¡next¡¡truth¡¡test£»¡¡which¡¡indicates¡¡that¡¡there¡¡is¡¡one¡¡mand¡­line¡¡argument¡£¡¡¡¡

When¡¡there¡¡is¡¡one¡¡mand¡­line¡¡argument£»¡¡you¡¡need¡¡to¡¡verify¡¡which¡¡of¡¡the¡¡two¡¡mand

line¡¡variations¡¡it¡¡is£º¡¡



TestProcessor¡£exe¡¡¡­help¡¡



or£º¡¡



TextProcessor¡£exe¡¡lotto¡£txt¡¡



¡¡¡¡¡¡¡¡¡¡The¡¡first¡¡variation¡¡has¡¡an¡¡explicit¡¡mand¡­line¡¡parameter¡¡¡­help¡£¡¡The¡¡second¡¡variation¡¡is¡¡¡¡

the¡¡identifier¡¡of¡¡a¡¡file¡¡that¡¡contains¡¡the¡¡input¡¡data¡£¡¡Thus£»¡¡the¡¡second¡¡If¡¡block¡¡contains¡¡another¡¡¡¡

If¡¡block¡¡to¡¡test¡¡another¡¡aspect¡¡of¡¡the¡¡truth¡¡test£º¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ElseIf¡¡args¡£Length¡¡=¡¡1¡¡Then¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡If¡¡args£¨0£©¡¡=¡¡¡¨¡­help¡¨¡¡Then¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Bootstrap¡£DisplayHelp£¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡If¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡reader¡¡=¡¡File¡£OpenText£¨args£¨0£©£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡writer¡¡=¡¡Console¡£Out¡¡



¡¡¡¡¡¡¡¡¡¡When¡¡testing¡¡for¡¡the¡¡¡¡¡­help¡¡argument£»¡¡immediately¡¡after¡¡calling¡¡DisplayHelp£¨£©£»¡¡you¡¡must¡¡¡¡

use¡¡the¡¡Return¡¡keyword¡£¡¡This¡¡is¡¡extremely¡¡important¡¡because£»¡¡when¡¡the¡¡console¡¡application¡¡¡¡

calls¡¡DisplayHelp£¨£©£»¡¡it¡¡is¡¡saying£»¡¡¡°I¡¡don¡¯t¡¡care¡¡where¡¡the¡¡input¡¡or¡¡output¡¡data¡¡is¡¡ing¡¡from¡¡¡¡

since¡¡I¡¡am¡¡doing¡¡something¡¡else¡¡and¡¡thus¡¡must¡¡stop¡¡processing¡£¡±¡¡If¡¡you¡¡were¡¡to¡¡continue¡¡¡¡

processing£»¡¡the¡¡writer¡¡and¡¡reader¡¡could¡¡reference¡¡invalid¡¡states¡¡and¡¡cause¡¡an¡¡exception¡¡to¡¡¡¡

be¡¡generated¡£¡¡

¡¡¡¡¡¡¡¡¡¡If¡¡all¡¡tests¡¡have¡¡been¡¡tried¡¡and¡¡failed£»¡¡then¡¡the¡¡final¡¡Else¡¡calls¡¡the¡¡method¡¡DisplayHelp£¨£©¡¡to¡¡¡¡

indicate¡¡that¡¡the¡¡mand¡¡line¡¡is¡¡incorrect£»¡¡and¡¡the¡¡help¡¡shows¡¡the¡¡correct¡¡mand¡¡line¡£¡¡

¡¡¡¡¡¡¡¡¡¡Doing¡¡a¡¡plete¡¡test¡¡and¡¡debug¡¡of¡¡the¡¡console¡¡application¡¡is¡¡difficult¡¡because¡¡of¡¡the¡¡¡¡

streaming¡¡facilities¡£¡¡When¡¡you¡¡stream¡¡data¡¡from¡¡one¡¡process¡¡to¡¡another£»¡¡a¡¡process¡¡is¡¡started¡¡¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡282¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

260¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡1¡¡0¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡I¡¡N¡¡G¡¡¡¡¡¡A¡¡B¡¡OU¡¡T¡¡¡¡¡¡P¡¡E¡¡R¡¡S¡¡IS¡¡TE¡¡N¡¡CE¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡and¡¡stopped¡¡without¡¡an¡¡easy¡¡way¡¡for¡¡the¡¡debugger¡¡to¡¡jump¡¡in¡¡between¡£¡¡Thus£»¡¡to¡¡be¡¡able¡¡to¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡debug¡¡and¡¡verify¡¡if¡¡everything¡¡works£»¡¡another¡¡strategy¡¡is¡¡needed¡£¡¡The¡¡solution¡¡is¡¡to¡¡use¡¡prepro

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡cessor¡¡directives¡¡£¨discussed¡¡in¡¡Chapter¡¡6£©£»¡¡like¡¡the¡¡following¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡#If¡¡DEBUG_OUTPUT¡¡Then¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Console¡£WriteLine£¨¡¨Argument¡¡count£¨¡¨¡¡&¡¡args¡£Length¡¡&¡¡¡¨£©¡¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡For¡¡Each¡¡argument¡¡as¡¡String¡¡in¡¡args¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Console¡£WriteLine£¨¡¨Argument¡¡£¨¡¨¡¡&¡¡argument¡¡&¡¡¡¨£©¡¨£©¡¡

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

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡#End¡¡If¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡directive¡¡code¡¡is¡¡executed¡¡if¡¡DEBUG_OUTPUT¡¡is¡¡defined¡£¡¡In¡¡the¡¡example£»¡¡the¡¡argument¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡count¡¡and¡¡arguments¡¡are¡¡output¡¡to¡¡the¡¡console¡£¡¡To¡¡activate¡¡the¡¡directive£»¡¡the¡¡item¡¡DEBUG_OUTPUT¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡is¡¡defined¡¡at¡¡the¡¡project¡¡level¡¡or¡¡near¡¡the¡¡top¡¡of¡¡the¡¡source¡¡code¡¡file¡£¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡shell¡¡is¡¡plete£»¡¡and¡¡all¡¡that¡¡remains¡¡is¡¡the¡¡implementation¡¡of¡¡the¡¡text¡¡processor¡£¡¡¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Implementing¡¡the¡¡TextProcessor¡¡Application¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡In¡¡implementing¡¡the¡¡text¡¡processor£»¡¡the¡¡problem¡¡that¡¡confronts¡¡us¡¡is¡¡how¡¡to¡¡fix¡¡a¡¡data¡¡stream¡¡so¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡that¡¡it¡¡is¡¡consistent¡£¡¡The¡¡main¡¡reasons¡¡for¡¡data¡¡inconsistencies¡¡are¡¡human¡¡error¡¡and¡¡carelessness¡£¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Figure¡¡10¡­3¡¡shows¡¡what¡¡is¡¡displayed¡¡when¡¡you¡¡load¡¡the¡¡lottery¡¡number¡¡text¡¡file¡¡in¡¡Notepad¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡It¡¡seems¡¡very¡¡obvious¡¡that¡¡something¡¡is¡¡not¡¡right¡¡with¡¡this¡¡file¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Figure¡¡10¡­3¡£¡¡¡¡The¡¡lottery¡¡text¡¡file¡¡loaded¡¡in¡¡Notepad¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡283¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡A¡¡PT¡¡E¡¡R¡¡¡¡¡¡1¡¡0¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡I¡¡N¡¡G¡¡¡¡¡¡A¡¡B¡¡O¡¡U¡¡T¡¡¡¡P¡¡E¡¡R¡¡S¡¡IS¡¡T¡¡E¡¡N¡¡CE¡¡261¡¡



¡¡¡¡¡¡¡¡¡¡¡¡However£»¡¡what¡¡appears¡¡wrong¡¡in¡¡the¡¡Notepad¡¡display¡¡is¡¡not¡¡the¡¡real¡¡problem¡£¡¡When¡¡the¡¡¡¡

text¡¡file¡¡is¡¡loaded¡¡using¡¡another¡¡text¡¡editor£»¡¡such¡¡as¡¡Vim£»¡¡the¡¡text¡¡is¡¡displayed¡¡as¡¡shown¡¡in¡¡¡¡

Figure¡¡10¡­4¡£¡¡As¡¡you¡¡can¡¡see£»¡¡Vim¡¡has¡¡loaded¡¡the¡¡text¡¡file¡¡without¡¡any¡¡formatting¡¡errors¡£¡¡



¡öNote¡¡¡¡Vim¡¡is¡¡available¡¡from¡¡¡¡http£º//vim¡£org¡£¡¡It¡¡is¡¡a¡¡vi¡­derived¡¡clone¡¡that¡¡can¡¡be¡¡used¡¡on¡¡¡¡

Windows¡¡systems¡£¡¡



Figure¡¡10¡­4¡£¡¡¡¡Vim¡¡loads¡¡the¡¡text¡¡file¡¡in¡¡a¡¡nicely¡¡formatted¡¡display¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡The¡¡real¡¡pressing¡¡problem¡¡lies¡¡in¡¡the¡¡structure¡¡of¡¡the¡¡data£»¡¡which¡¡is¡¡illustrated¡¡in¡¡Figure¡¡10¡­5¡£¡¡¡¡

Here£»¡¡the¡¡data¡¡has¡¡new¡¡formatting£»¡¡with¡¡extra¡¡columns£»¡¡and¡¡the¡¡first¡¡column¡¡is¡¡not¡¡always¡¡in¡¡¡¡

the¡¡proper¡¡data¡¡format¡£¡¡And¡¡to¡¡make¡¡matters¡¡worse£»¡¡the¡¡badly¡¡formatted¡¡data¡¡has¡¡repeating¡¡¡¡

information¡£¡¡

¡¡¡¡¡¡¡¡¡¡¡¡The¡¡challenge¡¡of¡¡the¡¡application¡¡is¡¡to¡¡read¡¡the¡¡stream¡¡and¡¡fix¡¡all¡¡of¡¡the¡¡problems¡£¡¡This¡¡requires¡¡¡¡

a¡¡thorough¡¡understanding¡¡of¡¡string¡¡processing¡¡and¡¡the¡¡different¡¡ways¡¡that¡¡text¡¡can¡¡be¡¡stored£»¡¡¡¡

as¡¡discussed¡¡in¡¡Chapter¡¡3¡£¡¡When¡¡you¡¡are¡¡processing¡¡data¡¡streams£»¡¡you¡¡need¡¡to¡¡be¡¡aware¡¡of¡¡the¡¡¡¡

format¡¡of¡¡the¡¡data¡¡stream¡£¡¡In¡¡this¡¡example£»¡¡we¡¡are¡¡processing¡¡ASCII¡¡text£»¡¡and¡¡thus¡¡will¡¡be¡¡manipu

lating¡¡bits¡¡according¡¡to¡¡the¡¡rules¡¡of¡¡the¡¡ASCII¡¡lookup¡¡table¡£¡¡

¡¡¡¡¡¡¡¡¡¡¡¡Whitespace¡¡characters¡¡are¡¡special¡¡characters¡¡in¡¡the¡¡text¡¡lookup¡¡table¡£¡¡They¡¡are¡¡associated¡¡¡¡

with¡¡numbers£»¡¡but¡¡their¡¡representation¡¡is¡¡in¡¡the¡¡form¡¡of¡¡an¡¡action¡¡that¡¡the¡¡user¡¡can¡¡see¡£¡¡For¡¡¡¡

example£»¡¡the¡¡character¡¡between¡¡single¡¡quotation¡¡marks¡¡£¨'¡¡'£©¡¡is¡¡a¡¡space£»¡¡the¡¡character¡¡t¡¡is¡¡a¡¡tab£»¡¡¡¡

and¡¡the¡¡character¡¡n¡¡is¡¡a¡¡newline¡£¡¡The¡¡reason¡¡Notepad¡¡does¡¡not¡¡format¡¡the¡¡lottery¡¡text¡¡file¡¡nicely¡¡¡¡

£¨Figure¡¡10¡­3£©¡¡is¡¡because¡¡of¡¡the¡¡whitespace¡¡characters¡¡used¡¡to¡¡indicate¡¡a¡¡newline¡£¡¡In¡¡Figure¡¡10¡­6£»¡¡the¡¡¡¡

highlighted¡¡buffer¡¡entry¡¡0A¡¡is¡¡the¡¡hexadecimal¡¡character¡¡that¡¡indicates¡¡a¡¡linefeed£»¡¡or¡¡newline£»¡¡in¡¡¡¡

the¡¡lottery¡¡text¡¡file¡£¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡284¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

¡¡262¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡1¡¡0¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡I¡¡N¡¡G¡¡¡¡¡¡A¡¡B¡¡OU¡¡T¡¡¡¡¡¡P¡¡E¡¡R¡¡S¡¡IS¡¡TE¡¡N¡¡CE¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Figure¡¡10¡­5¡£¡¡Structural¡¡problems¡¡of¡¡this¡¡data¡¡stream¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Figure¡¡10¡­6¡£¡¡Newline¡¡character¡¡used¡¡in¡¡lotto¡£txt¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Figure¡¡10¡­7¡¡is¡¡a¡¡file¡¡created¡¡by¡¡Notepad¡£¡¡Notepad¡¡expects¡¡not¡¡a¡¡single¡¡whitespace¡¡character£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡but¡¡two¡¡whitespace¡¡characters¡¡to¡¡indicate¡¡a¡¡newline£º¡¡0D¡¡and¡¡0A¡£¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡285¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡A¡¡PT¡¡E¡¡R¡¡¡¡¡¡1¡¡0¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡I¡¡N¡¡G¡¡¡¡¡¡A¡¡B¡¡O¡¡U¡¡T¡¡¡¡P¡¡E¡¡R¡¡S¡¡IS¡¡T¡¡E¡¡N¡¡CE¡¡263¡¡



Figure¡¡10¡­7¡£¡¡Newline¡¡characters¡¡used¡¡by¡¡Notepad¡¡



Deciphering¡¡the¡¡Format¡¡



The¡¡echo¡¡has¡¡served¡¡its¡¡purpose¡¡of¡¡providing¡¡a¡¡way¡¡to¡¡develop¡¡an¡¡application¡¡in¡¡a¡¡top¡­down¡¡¡¡

manner¡£¡¡The¡¡next¡¡step¡¡is¡¡to¡¡remove¡¡the¡¡echo¡¡code¡¡and¡¡start¡¡writing¡¡the¡¡code¡¡that¡¡will¡¡fix¡¡the¡¡¡¡

data¡¡stream¡£¡¡

¡¡¡¡¡¡¡¡¡¡Fixing¡¡the¡¡data¡¡stream¡¡is¡¡not¡¡a¡¡trivial¡¡undertaking£»¡¡because¡¡you¡¡are¡¡yet¡¡again¡¡faced¡¡with¡¡a¡¡¡¡

state¡¡problem¡£¡¡You¡¡don¡¯t¡¡want¡¡to¡¡fix¡¡one¡¡part¡¡of¡¡the¡¡stream£»¡¡only¡¡to¡¡end¡¡up¡¡with¡¡a¡¡problem¡¡in¡¡¡¡

another¡¡part¡¡of¡¡the¡¡stream¡£¡¡Thus£»¡¡you¡¡need¡¡to¡¡incrementally¡¡fix¡¡the¡¡stream¡¡and¡¡make¡¡sure¡¡at¡¡¡¡

each¡¡step¡¡that¡¡there¡¡are¡¡no¡¡ramifications¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡The¡¡first¡¡step¡¡is¡¡to¡¡break¡¡the¡¡data¡¡stream¡¡into¡¡individual¡¡fields¡¡£¨each¡¡value¡¡in¡¡a¡¡column¡¡is¡¡a¡¡¡¡

field¡¡in¡¡this¡¡case£©¡£¡¡In¡¡Figure¡¡10¡­5£»¡¡the¡¡data¡¡stream¡¡had¡¡two¡¡parts£»¡¡where¡¡the¡¡upper¡¡part¡¡seemed¡¡¡¡

to¡¡have¡¡a¡¡single¡¡space¡¡between¡¡the¡¡numbers¡¡and¡¡the¡¡lower¡¡part¡¡had¡¡the¡¡amount¡¡of¡¡space¡¡neces

sary¡¡to¡¡align¡¡the¡¡numbers¡£¡¡The¡¡difference¡¡between¡¡the¡¡upper¡¡and¡¡lower¡¡parts¡¡is¡¡the¡¡whitespace¡¡¡¡

characters¡¡used¡£¡¡So£»¡¡the¡¡first¡¡step¡¡will¡¡be¡¡to¡¡clean¡¡up¡¡the¡¡whitespace¡£¡¡

¡¡¡¡¡¡¡¡¡¡The¡¡following¡¡is¡¡the¡¡code¡¡that¡¡reads¡¡the¡¡buffer£»¡¡splits¡¡it¡¡up£»¡¡and¡¡reassembles¡¡the¡¡content¡¡¡¡

into¡¡a¡¡new¡¡buffer¡£¡¡The¡¡code¡¡is¡¡intermediate¡¡code¡¡that¡¡adds¡¡special¡¡bracket¡¡markers¡¡to¡¡indicate¡¡¡¡

what¡¡the¡¡text¡¡contains¡£¡¡



Imports¡¡System¡£IO¡¡

Imports¡¡System¡£Text¡¡



¡¡'¡¡TODO£º¡¡Fix¡¡up¡¡this¡¡class¡¡

Public¡¡Class¡¡LottoTicketProcessor¡¡£º¡¡Implements¡¡IProcessor¡¡

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

¡¡¡¡¡¡¡¡Implements¡¡IProcessor¡£Process¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡reader¡¡As¡¡TextReader¡¡=¡¡New¡¡StringReader£¨input£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡retval¡¡As¡¡New¡¡StringBuilder£¨£©¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡286¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

264¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡1¡¡0¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡I¡¡N¡¡G¡¡¡¡¡¡A¡¡B¡¡OU¡¡T¡¡¡¡¡¡P¡¡E¡¡R¡¡S¡¡IS¡¡TE¡¡N¡¡CE¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Do¡¡While¡¡reader¡£Peek£¨£©¡¡¡¡¡­1¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡splitUpText¡¡As¡¡String£¨£©¡¡=¡¡_¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡reader¡£ReadLine¡£Split£¨New¡¡Char£¨£©¡¡£û¡¨¡¡¡¨c£»¡¡ControlChars¡£Tab£ý£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡c1¡¡As¡¡Integer¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡For¡¡c1¡¡=¡¡0¡¡To¡¡splitUpText¡£Length¡¡1¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡retval¡£Append£¨£¨¡¨£¨¡¨¡¡&¡¡splitUpText£¨c1£©¡¡&¡¡¡¨£©¡¨£©£©¡¡

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

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡retval¡£Append£¨ControlChars¡£NewLine£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Loop¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡retval¡£ToString£¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Function¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Class¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡In¡¡the¡¡implementation¡¡of¡¡Process£¨£©£»¡¡the¡¡text¡¡will¡¡be¡¡parsed¡¡line¡¡by¡¡line¡£¡¡Then¡¡each¡¡line¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡is¡¡split¡¡into¡¡the¡¡individual¡¡fields¡£¡¡You¡¡could¡¡write¡¡the¡¡parsing¡¡routines¡¡yourself£»¡¡but¡¡to¡¡parse¡¡a¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡buffer¡¡line¡¡by¡¡line£»¡¡it¡¡is¡¡more¡¡efficient¡¡to¡¡use¡¡StringReader¡£¡¡StringReader¡¡accepts¡¡the¡¡string¡¡to¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡parse¡¡and¡¡is¡¡then¡¡assigned¡¡to¡¡a¡¡TextReader¡¡interface¡¡instance¡£¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡As¡¡each¡¡line¡¡of¡¡text¡¡is¡¡parsed£»¡¡the¡¡most¡¡efficient¡¡approach¡¡to¡¡building¡¡a¡¡buffer¡¡is¡¡to¡¡use¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡StringBuilder¡£¡¡You¡¡could¡¡keep¡¡appending¡¡data¡¡to¡¡the¡¡string£»¡¡but¡¡if¡¡you¡¡do¡¡that¡¡too¡¡often¡¡the¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡application¡¯s¡¡performance¡¡will¡¡suffer¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡String¡¡type¡¡is¡¡an¡¡immutable¡¡type£»¡¡which¡¡means¡¡once¡¡an¡¡object¡¡is¡¡initialized£»¡¡you¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡cannot¡¡change¡¡the¡¡state¡¡of¡¡the¡¡object¡£¡¡The¡¡advantage¡¡of¡¡immutable¡¡types¡¡is¡¡that¡¡they¡¡increase¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡the¡¡speed¡¡of¡¡your¡¡application£»¡¡because¡¡code¡¡can¡¡assume¡¡once¡¡an¡¡object¡¡has¡¡been¡¡assigned£»¡¡it¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡will¡¡never¡¡change¡£¡¡The¡¡downside¡¡is¡¡that¡¡once¡¡an¡¡object¡¡is¡¡assigned£»¡¡to¡¡modify¡¡the¡¡object¡¡state¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡even¡¡slightly£»¡¡you¡¡must¡¡instantiate¡¡a¡¡new¡¡object£»¡¡which¡¡would¡¡be¡¡the¡¡c

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

Äã¿ÉÄÜϲ»¶µÄ