スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【つきいちHaskell】1回目 ファイル入出力

色々あって大分ブログから離れていましたが
月1でHaskellについてまとめてみようかと思ってます。(途中で流れる可能性が大ですが。。。。)

題して"つきいちHaskell"
1回目のテーマはファイル入出力
実用的なプログラムを作る上でファイル関係の操作は欠かせないものとなりますが、Haskellの入出力に関してまとめている部分があまり見当たらなかったので、まとめてみようと思います。
まずは標準入力・標準出力から、そしてテキスト形式のファイル操作までを題材にします。バイナリ形式のファイル操作は後ほど。


1:テキスト形式の入出力



もっとも単純なファイル入出力


もっとも単純はファイル操作のメソッドは以下の3つです。
ほかの言語(Cやjavaなど)だとファイルを開いたり閉じたりして、結構な手間がイメージがあるのですが、
Haskell だととても楽ですね。


ファイル読込
readFile :: FilePath -> IO String
ファイル書込
writeFile :: FilePath -> String -> IO ()
ファイル追記
appendFile :: FilePath -> String -> IO ()

どれも同じ形式なので読み込みだけ例を示しときます。

-- ファイル読み込みのサンプル
-- 読み込んだファイルの内容をそのまま標準出力に出す
-- 改行文字はエスケープされて表示されます。

readFileSample = readFile "hote.txt" >>= print


2:ハンドラを使ったファイル入出力


ハンドラを使ったファイル入出力です。(1)ファイルの全体を扱う操作しかできなかったけど、ここでは
ファイルの一部の入出力だったり、入出力のエンコードの変更だったり少し複雑なことができるようになります。
ファイルの状態もハンドラを使って確認できます。

まずは関係する関数一覧から。

-- ファイルのオープンクロースを自動でしてくれる関数
withFile :: FilePath -> IOMode -> (Handle -> IO r) -> IO r
-- ファイルオープン
openFile :: FilePath -> IOMode -> IO Handle
-- ファイルクローズ
hClose :: Handle -> IO ()
-- 一文字取得
hGetChar :: Handle -> IO Char
-- 一行取得
hGetLine :: Handle -> IO String
-- 一文字取得(ただし入力バッファから取り出さない)
hLookAhead :: Handle -> IO Char
-- ファイル内容をすべて取得
hGetContents :: Handle -> IO String
-- 一文字出力
hPutChar :: Handle -> Char -> IO ()
-- 文字列出力
hPutStr :: Handle -> String -> IO ()
-- 文字列出力(改行付き)
hPutStrLn :: Handle -> String -> IO ()
-- データ出力
hPrint :: Show a => Handle -> a -> IO ()


ほかの言語でもファイルを開く→ファイルを操作→ファイルを閉じるという形式でファイルを操作する場合が多いので、使い方はなんとなるイメージがつくと思います。(後でサンプルコード書きますが)
ただ全部副作用が存在する関数なので戻り値が、全部IOに包まれていることが特徴です。
Haskell特有なのがwithFile関数です。
これはファイルのオープンとクローズを勝手にやってくれるので、それ以外の部分を書いてねというものです。
忘れやすいクローズ処理をしてくれるので、できるだけwithFile関数を使ってファイルを操作するのが安全です。

いかにサンプル示します。withFileを使わなかった場合と使った場合の二種類を示します。

-- withFileを使わない場合
main = do
handle <- openFile "test.txt" WriteMode
hPutStr handle "String"
hClose handle

-- withFileを使った場合
main = withFile "test.txt" WriteMode $ (flip hPutStr) "String"


今回は以上です。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

かみさまみならい

Author:かみさまみならい
FC2ブログへようこそ!

最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブロとも申請フォーム

この人とブロともになる

ブログ内検索
RSSフィード
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。