۲۸ - ۹تمرینهای فصل
ویژنر و I/O ِ فایل
با استفاده از رمزنگارِ ویژنر که در فصلِ نوعدادههای جبری درست کردین، و تستهاش رو در فصلِ تستینگ نوشتین، یه فایلِ اجراشدنی درست کنین که دو آرگومان میگیره: یکی کلید ِ رمزنگاری و یکی هم مود. اگه مودِش -d بود، ورودیای که از ورودیِ استاندار میگیره رو رمزگشایی و در خروجیِ استاندارد چاپ کنه. اگه مودِش -e بود، روی ورودی از ورودیِ استاندارد (stdin) بلوکه شه و خروجیِ رمزنگاریشده رو به stdout چاپ کنه.
این رو به چشم یه فرصت برای یادگیریِ طرز کارِ دستگیرههای فایل، و این عضوهای کتابخونه ِ base ببینین:
System.Environment.getArgs :: IO [String]
System.IO.hPutStr :: Handle -> String -> IO ()
System.IO.hGetChar :: Handle -> IO Char
System.IO.stdout :: Handle
System.IO.stdin :: Handleهر سیستمعاملی که دارین، باید یاد بگیرین چطور به برنامهتون فایلِ ورودی بدین، و چطور خروجیِ استاندارد رو به یه فایل هدایت کنین. بخشی از تمرین اینه که خودتون اینها رو یاد بگیرین. برای اینکه یه نوشته که رمزگذاری یا رمزگشایی شده رو قبول کنین، باید بیشتر از یک بار از hGetChar استفاده کنین.
به برنامهتون مهلتِ زمانی اضافه کنین
با استفاده از hWaitForInput کاری کنین که در صورتِ ندادنِ ورودی به برنامه، بعد از مدت زمانِ دلخواهتون، برنامه بسته بشه. اگر هم خواستین میشه یه آگومانِ command-line ِ اختیاری باشه. با یه کدِ خطای غیرصفر و یه پیغام خطایی که بجای stdout، به خطای استاندار (stderr) چاپ میشه، خارج بشین.
System.IO.hWaitForInput :: Handle -> Int -> IO Bool
System.IO.stderr :: Handleپوشههای پیکربندی
با استفاده از پارسرِ INI که در فصلِ پارسینگ نوشتین، یه آدرس ِ فایلهای پیکربندیِ INI رو به یه Map پارس کنین؛ کلیدها اسمِ فایلها، و مقادیر نتیجهی پارس ِ فایلِ INI باشن. فقط فایلهایی از پوشه که پسوندِ .ini دارن رو پارس کنین.