Difference between revisions of "FP Laboratory 12/cs"
Jump to navigation
Jump to search
(Created page with "Získaný <code>Handle</code> může být použit pro práci se souborem. Funkce, která přečte obsah souboru:") |
(Created page with "Na konci práce se souborem, by měl být soubor uzavřen:") |
||
Line 6: | Line 6: | ||
Získaný <code>Handle</code> může být použit pro práci se souborem. Funkce, která přečte obsah souboru: [https://hackage.haskell.org/package/base-4.16.0.0/docs/System-IO.html#v:hGetContents <code>hGetContents :: Handle -> IO String</code>] | Získaný <code>Handle</code> může být použit pro práci se souborem. Funkce, která přečte obsah souboru: [https://hackage.haskell.org/package/base-4.16.0.0/docs/System-IO.html#v:hGetContents <code>hGetContents :: Handle -> IO String</code>] | ||
− | + | Na konci práce se souborem, by měl být soubor uzavřen: [https://hackage.haskell.org/package/base-4.16.0.0/docs/System-IO.html#v:hClose <code>hClose :: Handle -> IO ()</code>] | |
Alternatively you can use : [https://hackage.haskell.org/package/base-4.16.0.0/docs/Prelude.html#v:readFile <code>readFile :: FilePath -> IO String</code>] | Alternatively you can use : [https://hackage.haskell.org/package/base-4.16.0.0/docs/Prelude.html#v:readFile <code>readFile :: FilePath -> IO String</code>] |
Revision as of 12:53, 6 December 2021
Práce se soubody - monáda IO
- Implementujte program, který načte soubor a počet jeho řádku a následně jej vypíše na obrazovku.
Při řešení se podívejte na: openFile :: FilePath -> IOMode -> IO Handle
Získaný Handle
může být použit pro práci se souborem. Funkce, která přečte obsah souboru: hGetContents :: Handle -> IO String
Na konci práce se souborem, by měl být soubor uzavřen: hClose :: Handle -> IO ()
Alternatively you can use : readFile :: FilePath -> IO String
import System.IO
import Control.Exception
main = do fromHandle <- opf "Read from: " ReadMode
contents <- hGetContents fromHandle
putStr (numberLines contents)
hClose fromHandle
opf :: String -> IOMode -> IO Handle
opf prompt mode = do putStr prompt
name <- getLine
catch (openFile name mode )
(\e -> do putStr ("Can't open "++name++":"++show (e :: IOException) ++"\n")
opf prompt mode)
numberLines::String -> String
numberLines text = let l = lines text
numbered = zip [1..] l
result = [show x ++".\t"++content++"\n" | (x, content)<-numbered]
in concat result