۲۸ - ۹تمرینهای فصل
ویژنر و 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
دارن رو پارس کنین.