Cookbook/Files: Difference between revisions
< Cookbook
No edit summary |
(creating a temporary file) |
||
Line 37: | Line 37: | ||
= Creating a temporary file = | = Creating a temporary file = | ||
TODO | TODO: abstract via 'withTempFile', handle exception | ||
<haskell> | |||
import System.IO | |||
import System.Directory | |||
main = do | |||
tmpDir <- getTemporaryDirectory | |||
(tmpFile, h) <- openTempFile tmpDir "foo" | |||
hPutStr h "Hello world" | |||
hClose h | |||
removeFile tmpFile | |||
</haskell> | |||
= Writing a filter = | = Writing a filter = |
Revision as of 16:47, 24 April 2009
Reading from a file
The System.IO library contains the functions needed for file IO. The program below displays the contents of the file c:\test.txt.
import System.IO
main = do
h <- openFile "c:\\test.txt" ReadMode
contents <- hGetContents h
putStrLn contents
hClose h
The same program, with some higher-lever functions:
main = do
contents <- readFile "c:\\test.txt"
putStrLn contents
Writing to a file
The following program writes the first 100 squares to a file:
-- generate a list of squares with length 'num' in string-format.
numbers num = unlines $ take num $ map (show . \x -> x*x) [1..]
main = do
writeFile "test.txt" (numbers 100)
putStrLn "successfully written"
This will override the old contents of the file, or create a new file if the file doesn't exist yet. If you want to append to a file, you can use appendFile
.
Creating a temporary file
TODO: abstract via 'withTempFile', handle exception
import System.IO
import System.Directory
main = do
tmpDir <- getTemporaryDirectory
(tmpFile, h) <- openTempFile tmpDir "foo"
hPutStr h "Hello world"
hClose h
removeFile tmpFile
Writing a filter
Using interact, you can easily do things with stdin and stdout.
A program to sum up numbers:
main = interact $ show . sum . map read . lines
A program that adds line numbers to each line:
main = interact numberLines
numberLines = unlines . zipWith combine [1..] . lines
where combine lineNumber text = concat [show lineNumber, " ", text]
Logging to a file
TODO