ÓÑÇéÌáʾ£ºÈç¹û±¾ÍøÒ³´ò¿ªÌ«Âý»òÏÔʾ²»ÍêÕû£¬Çë³¢ÊÔÊó±êÓÒ¼ü¡°Ë¢Ð¡±±¾ÍøÒ³£¡
VB2008´ÓÈëÃŵ½¾«Í¨(PDF¸ñʽӢÎÄ°æ)-µÚ48²¿·Ö
¿ì½Ý²Ù×÷: °´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ °´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ °´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿! Èç¹û±¾ÊéûÓÐÔĶÁÍ꣬ÏëÏ´μÌÐø½Ó×ÅÔĶÁ£¬¿ÉʹÓÃÉÏ·½ "Êղص½ÎÒµÄä¯ÀÀÆ÷" ¹¦ÄÜ ºÍ "¼ÓÈëÊéÇ©" ¹¦ÄÜ£¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡on¡¡the¡¡Stack£»¡¡the¡¡last¡¡one¡¡added¡¡to¡¡the¡¡Stack¡¡is¡¡the¡¡first¡¡one¡¡off¡¡the¡¡Stack¡£¡¡Here¡¡is¡¡an¡¡example¡¡of¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡using¡¡a¡¡Stack£º¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡269¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡C¡¡HA¡¡P¡¡TE¡¡R¡¡¡¡¡¡9¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡AR¡¡N¡¡I¡¡N¡¡G¡¡¡¡¡¡A¡¡B¡¡O¡¡U¡¡T¡¡¡¡L¡¡I¡¡ST¡¡S£»¡¡¡¡¡¡DE¡¡L¡¡E¡¡G¡¡AT¡¡E¡¡S¡¡£»¡¡¡¡¡¡AN¡¡D¡¡¡¡L¡¡A¡¡M¡¡B¡¡D¡¡A¡¡¡¡E¡¡X¡¡PR¡¡E¡¡SSI¡¡O¡¡N¡¡S¡¡¡¡247¡¡
Dim¡¡stack¡¡As¡¡Stack£¨Of¡¡String£©¡¡=¡¡New¡¡Stack£¨Of¡¡String£©£¨£©¡¡
stack¡£Push£¨¡¨first¡¨£©¡¡
stack¡£Push£¨¡¨second¡¨£©¡¡
stack¡£Push£¨¡¨third¡¨£©¡¡
Dim¡¡popped¡¡As¡¡String¡¡=¡¡stack¡£Pop£¨£©¡¡
If¡¡popped¡£pareTo£¨¡¨third¡¨£©¡¡=¡¡0¡¡Then¡¡
¡¡¡¡¡¡'¡¡This¡¡is¡¡what¡¡we¡¡expect¡¡
End¡¡If¡¡
¡¡¡¡¡¡¡¡¡¡The¡¡code¡¡demonstrates¡¡using¡¡the¡¡Push£¨£©¡¡method¡¡to¡¡push¡¡items¡¡on¡¡the¡¡stack¡¡and¡¡the¡¡Pop£¨£©¡¡¡¡
method¡¡to¡¡remove¡¡items¡¡from¡¡the¡¡stack¡£¡¡Remember¡¡that¡¡Push£¨£©¡¡is¡¡an¡¡explicit¡¡addition£»¡¡and¡¡¡¡
Pop£¨£©¡¡an¡¡explicit¡¡removal¡¡£¨though¡¡a¡¡call¡¡to¡¡Pop£¨£©¡¡returns¡¡the¡¡object¡¡removed¡¡from¡¡the¡¡stack¡¡so¡¡¡¡
you¡¡can¡¡do¡¡something¡¡with¡¡it£»¡¡as¡¡shown¡¡in¡¡the¡¡code£©¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡If¡¡you¡¡want¡¡to¡¡know¡¡what¡¡is¡¡on¡¡the¡¡top¡¡of¡¡the¡¡stack£»¡¡use¡¡Peek£¨£©£»¡¡which¡¡acts¡¡like¡¡Pop£¨£©£»¡¡except¡¡¡¡
it¡¡does¡¡not¡¡remove¡¡the¡¡item¡¡from¡¡the¡¡list¡£¡¡
Using¡¡a¡¡Queue¡¡
A¡¡Queue¡¡is¡¡another¡¡special¡¡type¡¡of¡¡list¡¡that¡¡behaves¡¡like¡¡a¡¡queue¡¡that¡¡you¡¡would¡¡encounter¡¡at¡¡¡¡
ticket¡¡counter¡£¡¡As¡¡people¡¡start¡¡queuing£»¡¡the¡¡first¡¡person¡¡to¡¡be¡¡served¡¡is¡¡the¡¡one¡¡at¡¡the¡¡front¡¡of¡¡the¡¡¡¡
line¡£¡¡Here¡¡is¡¡an¡¡example¡¡of¡¡using¡¡a¡¡Queue£º¡¡
Dim¡¡queue¡¡As¡¡Queue£¨Of¡¡String£©¡¡=¡¡New¡¡Queue£¨Of¡¡String£©£¨£©¡¡
queue¡£Enqueue£¨¡¨first¡¨£©¡¡
queue¡£Enqueue£¨¡¨second¡¨£©¡¡
queue¡£Enqueue£¨¡¨third¡¨£©¡¡
Dim¡¡dequeued¡¡As¡¡String¡¡=¡¡queue¡£Dequeue£¨£©¡¡
If¡¡dequeued¡¡=¡¡¡¨first¡¨¡¡Then¡¡
¡¡¡¡¡¡¡¡'¡¡This¡¡is¡¡what¡¡we¡¡expect¡¡
End¡¡If¡¡
The¡¡Important¡¡Stuff¡¡to¡¡Remember¡¡
In¡¡this¡¡chapter£»¡¡you¡¡learned¡¡about¡¡using¡¡delegates£»¡¡lambda¡¡expressions£»¡¡extension¡¡methods£»¡¡¡¡
and¡¡lists¡£¡¡The¡¡main¡¡items¡¡to¡¡remember¡¡are¡¡as¡¡follows£º¡¡
¡¡¡¡¡¡¡¡¡¡o¡¡You¡¡are¡¡using¡¡Visual¡¡Basic¡¡2008£»¡¡and¡¡thus¡¡you¡¡should¡¡use¡¡the¡¡¡¡generics¡based¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡collection¡¡classes¡£¡¡
¡¡¡¡¡¡¡¡¡¡o¡¡There¡¡are¡¡many¡¡different¡¡types¡¡of¡¡lists¡£¡¡The¡¡main¡¡types¡¡are¡¡the¡¡simple¡¡object¡¡collection£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡key/value¡¡collection£»¡¡stack£»¡¡and¡¡queue¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡270¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
248¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡9¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡IN¡¡G¡¡¡¡¡¡AB¡¡OU¡¡T¡¡¡¡¡¡L¡¡I¡¡ST¡¡S£»¡¡¡¡¡¡D¡¡E¡¡L¡¡E¡¡G¡¡A¡¡T¡¡E¡¡S£»¡¡¡¡¡¡A¡¡N¡¡D¡¡¡¡¡¡L¡¡A¡¡M¡¡B¡¡DA¡¡¡¡¡¡E¡¡X¡¡P¡¡R¡¡E¡¡S¡¡SI¡¡ON¡¡S¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡¡¡generics¡based¡¡classes¡¡are¡¡type¡safe¡¡and¡¡have¡¡better¡¡performance¡¡than¡¡old¡style¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡collections¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡Delegates¡¡help¡¡you¡¡define¡¡a¡¡generic¡¡method¡calling¡¡mechanism¡¡without¡¡needing¡¡to¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡implement¡¡an¡¡interface¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡Delegates¡¡can¡¡be¡¡shared¡¡methods£»¡¡instance¡¡methods£»¡¡or¡¡module¡¡methods¡£¡¡The¡¡only¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡important¡¡aspect¡¡to¡¡the¡¡method¡¡is¡¡to¡¡make¡¡sure¡¡the¡¡method¡¡signature¡¡matches¡¡the¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡delegate¡¡declaration¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡Lambda¡¡expressions¡¡are¡¡a¡¡specialized¡¡form¡¡of¡¡delegate¡¡method¡¡that¡¡enable¡¡you¡¡to¡¡write¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡deferred¡¡execution¡¡code¡£¡¡The¡¡advantage¡¡of¡¡deferred¡¡execution¡¡is¡¡that¡¡the¡¡code¡¡can¡¡contain¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡a¡¡state¡¡whenever¡¡it¡¡is¡¡executed¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Some¡¡Things¡¡for¡¡You¡¡to¡¡Do¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡following¡¡are¡¡some¡¡things¡¡for¡¡you¡¡to¡¡do¡¡to¡¡start¡¡applying¡¡your¡¡budding¡¡knowledge¡¡of¡¡soft
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ware¡¡engineering¡¡to¡¡improving¡¡the¡¡code¡¡base¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡1¡£¡¡Collection¡¡classes¡¡before¡¡Visual¡¡Basic¡¡2005¡¡allowed¡¡you¡¡to¡¡mix¡¡types¡£¡¡With¡¡Visual¡¡Basic¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2005¡¡and¡¡later£»¡¡the¡¡¡¡generics¡¡classes¡¡do¡¡not¡¡allow¡¡you¡¡to¡¡mix¡¡types¡£¡¡Provide¡¡a¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡solution¡¡where¡¡you¡¡could¡¡mix¡¡types¡¡with¡¡Visual¡¡Basic¡¡2005¡¡and¡¡later¡¡collections¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2¡£¡¡Create¡¡a¡¡list¡¡that¡¡contains¡¡the¡¡numbers¡¡1¡¡to¡¡20¡£¡¡Remove¡¡the¡¡numbers£»¡¡15£»¡¡10£»¡¡and¡¡3¡¡to¡¡7¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡3¡£¡¡Create¡¡a¡¡list¡¡with¡¡an¡¡object¡¡that¡¡is¡¡defined¡¡as¡¡follows£º¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Class¡¡MyType¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Value¡¡as¡¡String¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Class¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡4¡£¡¡Add¡¡ten¡¡elements¡¡to¡¡the¡¡list£»¡¡and¡¡then¡¡sort¡¡the¡¡list¡¡alphabetically¡¡from¡¡A¡¡to¡¡Z¡£¡¡Hint£º¡¡look¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡at¡¡the¡¡method¡¡Sort£¨£©¡¡and¡¡implement¡¡a¡¡custom¡¡Iparer£¨Of¡¡£©¡£¡¡As¡¡part¡¡of¡¡this¡¡exercise£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡you¡¡need¡¡to¡¡investigate¡¡and¡¡figure¡¡out¡¡how¡¡to¡¡use¡¡¡¡Iparer£¨Of¡¡£©¡£¡¡My¡¡suggestion¡¡is¡¡to¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡search¡¡the¡¡MSDN¡¡and¡¡Code¡¡Project¡¡web¡¡sites¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡271¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
C¡¡¡¡H¡¡¡¡A¡¡¡¡P¡¡¡¡T¡¡¡¡E¡¡¡¡R¡¡¡¡¡¡¡¡¡¡1¡¡¡¡0¡¡
¡ö¡¡¡ö¡¡¡ö¡¡
Learning¡¡About¡¡Persistence¡¡
Your¡¡programs¡¡will¡¡probably¡¡need¡¡to¡¡read¡¡and/or¡¡write¡¡data¡¡to¡¡some¡¡type¡¡of¡¡storage¡¡device¡£¡¡¡¡
That¡¡storage¡¡device¡¡might¡¡be¡¡a¡¡hard¡¡disk£»¡¡USB¡¡drive£»¡¡or¡¡even¡¡the¡¡network¡£¡¡The¡¡key¡¡concept¡¡is¡¡¡¡
that¡¡you¡¡are¡¡taking¡¡information¡¡from¡¡memory¡¡and¡¡transferring¡¡it¡¡to¡¡some¡¡other¡¡location¡£¡¡Later£»¡¡¡¡
you¡¡will¡¡retrieve¡¡that¡¡information¡¡and¡¡use¡¡it¡¡to¡¡execute¡¡some¡¡task¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡Taking¡¡data¡¡from¡¡memory¡¡and¡¡transferring¡¡it¡¡to¡¡another¡¡place¡¡is¡¡referred¡¡to¡¡as¡¡persistence¡£¡¡¡¡
Most¡¡examples¡¡of¡¡persistence¡¡involve¡¡creating¡¡an¡¡object£»¡¡and¡¡then¡¡saving¡¡that¡¡object¡¡via¡¡a¡¡file¡¡¡¡
to¡¡the¡¡hard¡¡disk¡£¡¡However£»¡¡reading¡¡and¡¡writing¡¡an¡¡object¡¡is¡¡not¡¡just¡¡saving¡¡data¡¡to¡¡the¡¡hard¡¡disk£»¡¡¡¡
even¡¡though¡¡that¡¡is¡¡often¡¡the¡¡result¡£¡¡Reading¡¡and¡¡writing¡¡data¡¡to¡¡the¡¡hard¡¡disk¡¡is¡¡about¡¡reading¡¡¡¡
and¡¡writing¡¡to¡¡data¡¡streams¡£¡¡This¡¡chapter¡¡focuses¡¡on¡¡the¡¡process¡¡of¡¡reading¡¡and¡¡writing¡¡data¡¡¡¡
to¡¡streams¡£¡¡
¡¡¡¡¡¡¡¡¡¡This¡¡chapter¡¯s¡¡example¡¡is¡¡a¡¡set¡¡of¡¡applications¡¡for¡¡a¡¡lottery¡prediction¡¡system¡£¡¡You¡¯ll¡¡see¡¡¡¡
how¡¡streams¡¡are¡¡generic¡¡concepts¡¡that¡¡can¡¡apply¡¡to¡¡files£»¡¡the¡¡console£»¡¡or¡¡even¡¡the¡¡network¡£¡¡
¡¡¡¡¡¡¡¡¡¡Throughout¡¡this¡¡book£»¡¡the¡¡examples¡¡use¡¡console¡¡applications¡¡to¡¡test¡¡some¡¡code£»¡¡and¡¡this¡¡¡¡
chapter¡¯s¡¡example¡¡also¡¡includes¡¡console¡¡applications¡£¡¡Although¡¡Visual¡¡Basic¡¡is¡¡typically¡¡used¡¡as¡¡¡¡
a¡¡GUI¡¡development¡¡tool£»¡¡the¡¡point¡¡of¡¡using¡¡the¡¡console¡¡is¡¡to¡¡help¡¡you¡¡understand¡¡the¡¡Visual¡¡¡¡
Basic¡¡programming¡¡language¡£¡¡One¡¡of¡¡the¡¡biggest¡¡criticisms¡¡of¡¡Visual¡¡Basic¡¡developers¡¡has¡¡been¡¡¡¡
that¡¡they¡¡can¡¯t¡¡develop¡¡like¡¡real¡¡developers¡£¡¡This¡¡book¡¡is¡¡intended¡¡for¡¡real¡¡developers¡¡who¡¡happen¡¡¡¡
to¡¡use¡¡Visual¡¡Basic¡£¡¡
Organizing¡¡the¡¡Lottery¡Prediction¡¡System¡¡
Let¡¯s¡¡say¡¡we¡¡want¡¡to¡¡predict¡¡the¡¡next¡¡set¡¡of¡¡lottery¡¡numbers¡£¡¡We¡¡have¡¡a¡¡program¡¡that¡¡saves¡¡the¡¡¡¡
numbers¡¡drawn£»¡¡and¡¡each¡¡week£»¡¡we¡¡run¡¡a¡¡program¡¡that¡¡retrieves¡¡the¡¡drawn¡¡numbers¡¡and¡¡predicts¡¡¡¡
the¡¡next¡¡set¡¡of¡¡numbers¡£¡¡Many¡¡will¡¡argue¡¡that¡¡lottery¡¡numbers¡¡are¡¡random¡¡and¡¡thus¡¡cannot¡¡be¡¡¡¡
predicted¡£¡¡But¡¡that¡¡doesn¡¯t¡¡mean¡¡that¡¡we¡¡can¡¯t¡¡write¡¡a¡¡program¡¡to¡¡generate¡¡the¡¡probabilities£»¡¡¡¡
and¡¡that¡¡usually¡¡entails¡¡knowing¡¡which¡¡numbers¡¡have¡¡been¡¡drawn¡¡previously¡£¡¡
¡¡¡¡¡¡¡¡¡¡The¡¡lottery¡prediction¡¡example¡¡involves¡¡three¡¡applications£º¡¡TextProcessor£»¡¡which¡¡is¡¡used¡¡¡¡
to¡¡read¡¡a¡¡messed¡up¡¡lottery¡¡number¡¡file¡¡that¡¡will¡¡be¡¡cleaned¡¡up£»¡¡Binary2Text£»¡¡which¡¡converts¡¡a¡¡¡¡
binary¡¡stream¡¡into¡¡text£»¡¡and¡¡Text2Binary£»¡¡which¡¡converts¡¡a¡¡text¡¡stream¡¡into¡¡binary¡£¡¡Five¡¡projects¡¡¡¡
are¡¡defined¡¡for¡¡these¡¡applications£º¡¡
¡¡¡¡¡¡¡¡o¡¡¡¡Binary2Text£º¡¡A¡¡console¡¡program¡¡that¡¡is¡¡used¡¡to¡¡convert¡¡a¡¡binary¡¡lottery¡¡ticket¡¡stream¡¡into¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡a¡¡text¡¡stream¡£¡¡
¡¡¡¡¡¡¡¡o¡¡¡¡LottoLibrary£º¡¡A¡¡class¡¡library¡¡that¡¡contains¡¡the¡¡definition¡¡of¡¡the¡¡Ticket¡¡type¡¡that¡¡repre
¡¡¡¡¡¡¡¡¡¡¡¡¡¡sents¡¡a¡¡lottery¡¡ticket¡¡in¡¡memory¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡249¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡272¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
250¡¡¡¡¡¡¡¡¡¡¡¡¡¡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¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡ReaderWriter£º¡¡A¡¡class¡¡library¡¡that¡¡contains¡¡the¡¡infrastructure¡¡code¡¡for¡¡processing¡¡streams¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡and¡¡mand¡line¡¡arguments¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡Text2Binary£º¡¡A¡¡console¡¡program¡¡that¡¡is¡¡used¡¡to¡¡convert¡¡a¡¡text¡¡lottery¡¡ticket¡¡stream¡¡into¡¡a¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡binary¡¡stream¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡TextProcessor£º¡¡A¡¡console¡¡application¡¡that¡¡will¡¡read¡¡and¡¡write¡¡a¡¡text¡¡file¡£¡¡This¡¡application¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡will¡¡bee¡¡a¡¡prototype¡¡example¡¡of¡¡how¡¡to¡¡write¡¡a¡¡console¡based¡¡application¡£¡¡It¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡contains¡¡a¡¡reference¡¡to¡¡the¡¡ReaderWriter¡¡class¡¡library¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Piping¡¡Data¡¡Using¡¡a¡¡Console¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Console¡¡applications¡¡are¡¡not¡¡very¡¡interactive£»¡¡for¡¡the¡¡most¡¡part£»¡¡they¡¡are¡¡keyboard¡based¡¡appli
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡cations¡£¡¡The¡¡main¡¡advantage¡¡of¡¡console¡¡applications¡¡is¡¡their¡¡ability¡¡to¡¡dynamically¡¡string¡¡data
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡stream¡¡manipulations¡¡together£»¡¡a¡¡process¡¡called¡¡piping¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡For¡¡the¡¡lottery¡prediction¡¡example£»¡¡TextProcessor¡¡is¡¡a¡¡console¡¡application¡¡that¡¡will¡¡be¡¡fed¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡data¡¡by¡¡a¡¡pipe¡¡and¡¡generate¡¡data¡¡using¡¡a¡¡pipe£»¡¡as¡¡illustrated¡¡Figure¡¡10¡1¡£¡¡A¡¡file¡¡feeds¡¡a¡¡pipe£»¡¡which¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡feeds¡¡the¡¡console¡¡application¡¡that¡¡manipulates¡¡the¡¡data£»¡¡which¡¡then¡¡feeds¡¡an¡¡outgoing¡¡pipe¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡that¡¡could¡¡be¡¡used¡¡to¡¡feed¡¡another¡¡console¡¡application¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Figure¡¡10¡1¡£¡¡Pipeline¡¡approach¡¡to¡¡processing¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡TextProcessor¡¡will¡¡read¡¡a¡¡file¡¡of¡¡lottery¡¡numbers£»¡¡clean¡¡them¡¡up¡¡£¨for¡¡example£»¡¡by¡¡removing¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡empty¡¡lines¡¡of¡¡text£©£»¡¡and¡¡remove¡¡any¡¡duplicates¡£¡¡The¡¡console¡¡program¡¡will¡¡not¡¡worry¡¡about¡¡how¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡the¡¡data¡¡is¡¡used¡£¡¡The¡¡main¡¡focus¡¡of¡¡TextProcessor¡¡is¡¡to¡¡read¡¡data£»¡¡clean¡¡it¡¡up£»¡¡and¡¡write¡¡out¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡semantically¡¡correct¡¡data¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Reading¡¡Data¡¡from¡¡the¡¡Console¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Reading¡¡data¡¡from¡¡the¡¡console¡¡can¡¡happen¡¡in¡¡two¡¡ways£º¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡Supply¡¡the¡¡path¡¡of¡¡the¡¡file¡¡to¡¡be¡¡read¡¡to¡¡the¡¡application¡¡as¡¡a¡¡console¡¡argument¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡Pipe¡¡the¡¡data¡¡from¡¡another¡¡application¡¡to¡¡the¡¡console¡¡application¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Our¡¡example¡¡will¡¡be¡¡able¡¡to¡¡accept¡¡data¡¡streams¡¡in¡¡both¡¡ways¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡273¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡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¡¡251¡¡
Reading¡¡from¡¡a¡¡File¡¡
Reading¡¡from¡¡a¡¡file¡¡is¡¡programmatically¡¡the¡¡simplest¡¡way¡¡of¡¡obtaining¡¡the¡¡data¡£¡¡In¡¡our¡¡case£»¡¡¡¡
we¡¯ll¡¡use¡¡a¡¡mand¡line¡¡argument¡¡to¡¡get¡¡the¡¡file¡¯s¡¡name¡£¡¡For¡¡example£»¡¡to¡¡simply¡¡load¡¡a¡¡file¡¡¡¡
named¡¡lotto¡£txt¡¡into¡¡the¡¡TextProcessor¡¡program£»¡¡the¡¡mand¡¡line¡¡is¡¡as¡¡follows£º¡¡
TextProcessor¡£exe¡¡lotto¡£txt¡¡
¡¡¡¡¡¡¡¡¡¡A¡¡single¡¡mand¡line¡¡parameter£»¡¡¡¡lotto¡£txt£»¡¡is¡¡passed¡¡as¡¡a¡¡string¡¡to¡¡TextProcessor¡£exe¡£¡¡¡¡
mand¡line¡¡arguments¡¡are¡¡separated¡¡from¡¡each¡¡other¡¡using¡¡spaces¡£¡¡In¡¡the¡¡context¡¡of¡¡Windows£»¡¡¡¡
this¡¡is¡¡a¡¡problem£»¡¡because¡¡paths¡¡can¡¡contain¡¡spaces¡£¡¡For¡¡example£»¡¡the¡¡following¡¡mand¡¡line¡¡¡¡
would¡¡be¡¡passed¡¡as¡¡two¡¡mand¡line¡¡arguments¡£¡¡
TextProcessor¡£exe¡¡c£ºMy¡¡Documentsuserlotto¡£txt¡¡
¡¡¡¡¡¡¡¡¡¡The¡¡space¡¡between¡¡My¡¡and¡¡Documents¡¡tells¡¡the¡¡console¡¡that¡¡there¡¡are¡¡two¡¡arguments¡£¡¡To¡¡fix¡¡¡¡
that¡¡problem£»¡¡you¡¡need¡¡to¡¡enclose¡¡the¡¡path¡¡in¡¡quotation¡¡marks£º¡¡
TextProcessor¡£exe¡¡¡¨c£ºMy¡¡Documentsuserlotto¡£txt¡¨¡¡
¡¡¡¡¡¡¡¡¡¡The¡¡mand¡¡line¡¡may¡¡also¡¡include¡¡additional¡¡parameters£»¡¡as¡¡in¡¡this¡¡example£º¡¡
TextProcessor¡£exe¡¡¡count¡¡10¡¡lotto¡£txt¡¡
¡¡¡¡¡¡¡¡¡¡The¡¡parameter¡¡¡¡¡count¡¡expects¡¡a¡¡value£»¡¡which¡¡is¡¡¡¡10¡¡in¡¡this¡¡example¡£¡¡Traditionally£»¡¡options¡¡¡¡
are¡¡specified¡¡using¡¡key/value¡¡pairs£»¡¡because¡¡console¡¡applications¡¡allow¡¡the¡¡options¡¡to¡¡be¡¡placed¡¡¡¡
in¡¡any¡¡order¡£¡¡The¡¡exception¡¡is¡¡the¡¡last¡¡argument£»¡¡which¡¡is¡¡usually¡¡the¡¡data¡¡on¡¡which¡¡to¡¡operate¡£¡¡
¡öNote¡¡¡¡For¡¡more¡¡information¡¡about¡¡the¡¡permutations¡¡and¡¡binations¡¡of¡¡mand¡¡lines£»¡¡and¡¡what¡¡a¡¡¡¡
console¡¡can¡¡do£»¡¡see¡¡http£º//en¡£wikipedia¡£org/wiki/mand_line_interface¡£¡¡
Piping¡¡Data¡¡
Another¡¡solution¡¡is¡¡to¡¡use¡¡a¡¡mand¡¡that¡¡reads¡¡the¡¡file¡¡and¡¡pipes¡¡the¡¡contents¡¡of¡¡the¡¡file¡¡to¡¡¡¡
a¡¡stream¡£¡¡The¡¡console¡¡application¡¡reads¡¡the¡¡stream¡¡and¡¡processes¡¡the¡¡data¡£¡¡The¡¡following¡¡is¡¡¡¡
an¡¡example¡¡of¡¡a¡¡mand¡¡line¡¡that¡¡pipes¡¡data¡£¡¡The¡¡pipe¡¡operation¡¡is¡¡indicated¡¡by¡¡the¡¡pipe¡¡¡¡
character¡¡£¨¡¡£ü£©¡£¡¡
type¡¡lotto¡£txt¡¡£ü¡¡TextProcessor¡£exe¡¡
¡¡¡¡¡¡¡¡¡¡In¡¡the¡¡example£»¡¡the¡¡mand¡¡type£»¡¡which¡¡ordinarily¡¡reads¡¡a¡¡file¡¡and¡¡displays¡¡it¡¡on¡¡the¡¡¡¡
console£»¡¡reads¡¡in¡¡the¡¡lotto¡£txt¡¡file¡¡and¡¡pipes¡¡it¡¡to¡¡the¡¡console¡£¡¡Then¡¡TextProcessor¡£exe¡¡reads¡¡¡¡
from¡¡the¡¡console£»¡¡processes¡¡the¡¡data£»¡¡and¡¡pipes¡¡it¡¡back¡¡to¡¡the¡¡console¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡274¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
252¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡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¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡For¡¡the¡¡scope¡¡of¡¡the¡¡TextProcessor¡¡application£»¡¡the¡¡mand¡¡lines¡¡listed¡¡in¡¡Table¡¡10¡1¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡are¡¡valid¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Table¡¡10¡1¡£¡¡¡¡TextProcessor¡¡mand¡¡Lines¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mand¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Description¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡TextProcessor¡£exe¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Without¡¡any¡¡arguments£»¡¡the¡¡data¡¡will¡¡be¡¡read¡¡from¡¡the¡¡console¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡pipe¡¡and¡¡written¡¡back¡¡to¡¡the¡¡console¡¡pipe¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡TextProcessor¡£exe¡¡£§filename£§¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Using¡¡one¡¡argument£»¡¡the¡¡data¡¡will¡¡be¡¡read¡¡from¡¡the¡¡specified¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡file¡¡and¡¡written¡¡to¡¡the¡¡console¡¡pipe¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡TextProcessor¡£exe¡¡¡out¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Using¡¡the¡¡¡¡¡out¡¡parameter¡¡with¡¡two¡¡arguments£»¡¡the¡¡first¡¡file¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£§filename£§¡¡£§filename£§¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡specified¡¡is¡¡where¡¡the¡¡data¡¡will¡¡be¡¡written£»¡¡and¡¡the¡¡last¡¡file¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡specified¡¡is¡¡the¡¡file¡¡to¡¡read¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡TextProcessor¡£exe¡¡¡out¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Using¡¡the¡¡¡¡¡out¡¡parameter¡¡with¡¡one¡¡argument£»¡¡the¡¡data¡¡is¡¡read¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£§filename£§¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡from¡¡the¡¡console¡¡pipe¡¡and¡¡written¡¡to¡¡a¡¡file¡£¡¡Notice¡¡that¡¡the¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡output¡¡file¡¡name¡¡is¡¡explicitly¡¡defined£»¡¡otherwise£»¡¡if¡¡a¡¡single¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡identifier¡¡is¡¡given£»¡¡the¡¡console¡¡application¡¡would¡¡not¡¡know¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡whether¡¡you¡¡are¡¡reading¡¡or¡¡writing¡¡to¡¡a¡¡file¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡TextProcessor¡£exe¡¡¡help¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Outputs¡¡to¡¡the¡¡console¡¡how¡¡to¡¡use¡¡TextProcessor¡£¡¡The¡¡help¡¡is¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡also¡¡generated¡¡when¡¡the¡¡parameters¡¡are¡¡specified¡¡incorrectly¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Building¡¡a¡¡Shell¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Implementing¡¡TextProcessor¡¡from¡¡an¡¡architectural¡¡perspective¡¡involves¡¡writing¡¡two¡¡pieces¡¡of¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡code£º¡¡a¡¡module¡¡to¡¡read/write¡¡to¡¡a¡¡stream¡¡and¡¡a¡¡module¡¡to¡¡process¡¡the¡¡stream¡£¡¡By¡¡separating¡¡the¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡two¡¡modules£»¡¡the¡¡processor¡¡is¡¡not¡¡dependent¡¡on¡¡where¡¡the¡¡data¡¡originated¡£¡¡This¡¡also¡¡allows¡¡the¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡developer¡¡to¡¡define¡¡an¡¡interface¡¡that¡¡is¡¡implemented¡¡to¡¡process¡¡the¡¡data¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Assembling¡¡the¡¡Pieces¡¡Using¡¡an¡¡Echo¡¡Program¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡lottery¡prediction¡¡program¡¡is¡¡a¡¡case¡¡where¡¡I¡¡know¡¡something¡¡about¡¡the¡¡topic£»¡¡but¡¡not¡¡all¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡the¡¡details¡£¡¡Developing¡¡code¡¡is¡¡a¡¡constant¡¡challenge¡¡of¡¡figuring¡¡out¡¡which¡¡APIs¡¡to¡¡use¡£¡¡In¡¡this¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡type¡¡of¡¡situation£»¡¡so¡¡that¡¡I¡¡don¡¯t¡¡get¡¡bogged¡¡down¡¡in¡¡API¡¡hunting£»¡¡I¡¡first¡¡assemble¡¡all¡¡of¡¡the¡¡pieces¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡I¡¡need¡¡for¡¡the¡¡application¡£¡¡I¡¡develop¡¡what¡¡I¡¡call¡¡an¡¡echo¡¡program¡£¡¡An¡¡echo¡¡program¡¡has¡¡all¡¡of¡¡its¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡pieces¡¡in¡¡place£»¡¡and¡¡when¡¡called¡¡will¡¡seem¡¡like¡¡it¡¡functions¡£¡¡The¡¡echo¡¡part¡¡es¡¡in¡¡when¡¡the¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡end¡¡piece¡¡of¡¡functionality¡¡is¡¡called¡¡and¡¡it¡¡r
¿ì½Ý²Ù×÷: °´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ °´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ °´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿!
ÎÂÜ°Ìáʾ£º ο´Ð¡ËµµÄͬʱ·¢±íÆÀÂÛ£¬Ëµ³ö×Ô¼ºµÄ¿´·¨ºÍÆäËüС»ï°éÃÇ·ÖÏíÒ²²»´íŶ£¡·¢±íÊéÆÀ»¹¿ÉÒÔ»ñµÃ»ý·ÖºÍ¾Ñé½±Àø£¬ÈÏÕæдԴ´ÊéÆÀ ±»²ÉÄÉΪ¾«ÆÀ¿ÉÒÔ»ñµÃ´óÁ¿½ð±Ò¡¢»ý·ÖºÍ¾Ñé½±ÀøŶ£¡