Шаг 207.
Основы языка Haskell. Монада вычислений с побочными эффектами IO. Функции ввода-вывода для работы с файлами символов

    На этом шаге мы перечислим эти функции.

    Файлы указываются с помощью строк, содержащих имена файлов.

    1. Функция, записывающая строку <Строка&gt; в файл с именем <Имя_файла>:

   writeFile:: FilePath -> String -> IO()
   writeFile <Имя_файла> <Строка>

    2. Функция, добавляет строку <Строка> в конец файла с именем <Имя_файла>:

   appendFile:: FilePath -> String -> IO ()
   appendFile <Имя_файла> <Строка>

    3. Функция, возвращающая содержимое файла с именем <Имя_файла> в виде строки <Строка>:

   readFile:: FilePath -> IO String
   readFile <Имя_файла> <Строка>

    Отметим, что функции writeFile и appendFile записывают литеральную строку в файл. Для того, чтобы записать в файл значение любого, пригодного для печати типа, как в функции print, вначале используется функция show для преобразования значения в строку.

    В заключение приведем пример, иллюстрирующий использование перечисленных в трех последних шагах, функций.

   -- Демонстрация возможности использование побочного
   -- эффекта, связанного с необходимостью  вывода ре-
   -- зультата на экран или в файл
   -------------------------------
   main1 = putStr "Привет, мир!\n"
   --------------------------------------------------------
   -- Функция, выводящая на экран дисплея натуральные числа
   -- 1,2,...,10 вместе с их квадратами
   -------------------------------------------------
   main2 = putStrLn (show ([(n,2^n)| n <- [1..10]]))
   main3 = putStr (show ([(n,2^n)| n <- [1..10]]))
   main4 = print ([(n,2^n)| n <- [1..10]])
   ----------------------------------------------
   -- Функция удаляет из строки x все символы, не
   -- являющиеся прописными латинскими буквами
   -------------------------------------------
   main5:: [Char] -> IO()
   main5 x = print (filter isUpper x)
   --------------------------------------------------
   -- Предикат, устанавливающий чётность целого числа
   --------------------------------------------------
   odd':: Int -> IO()
   odd' x = if x `rem` 2==0  
              then putStrLn "Even"
              else putStrLn "Odd"
   ------------------------------
   main6 = appendFile "Input"
                      (show [(x,x*x) | x <- [0,0.5..2]])
   main7 = writeFile "Input" (show (2^10)++"\n"++show (2^20))
Файл с примерами можно взять здесь.

    На следующем шаге мы рассмотрим функции организации последовательностей функций ввода-вывода.




Предыдущий шаг Содержание Следующий шаг