スポンサーサイト

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

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

ファイル入出力2


前回に引き続いてファイルIO関係を整理していきます。

ハンドラの情報を取得


ハンドラの情報を取得します。

-- 開いているかどうかのチェック
hIsOpen :: Handle -> IO Bool
-- 閉じているかどうかのチェック
hIsClosed :: Handle -> IO Bool
-- 読み込み可能かどうかのチェック
hIsReadable :: Handle -> IO Bool
-- 書き込み可能かどうかのチェック
hIsWritable :: Handle -> IO Bool
-- シーク(ランダムアクセス)可能かどうかのチェック
hIsSeekable :: Handle -> IO Bool
-- ターミナルデバイスにかどうかのチェック
hIsTerminalDevice :: Handle -> IO Bool


ターミナルディバイスってなんだろうと思いファイル、標準入力、標準出力
でチェックしたことろ、
標準入力と標準出力がTrueとなったので、標準入力と標準出力(標準エラー出力も?)みたいです。
その時のコードは以下です。

import System.IO

main :: IO ()
main = do
putStrLn"File (WriteMode)">> withFile "test.txt" WriteMode (handleProperty)
putStrLn "stdin" >> handleProperty stdin
putStrLn "stdout" >> handleProperty stdout


handleProperty :: Handle -> IO ()
handleProperty h = do
putStr "hIsOpen: " >> hIsOpen h >>= print
putStr "hIsClosed: " >> hIsClosed h >>= print
putStr "hIsReadable: " >> hIsReadable h >>= print
putStr "hIsWritable: " >> hIsWritable h >>= print
putStr "hIsSeekable: " >> hIsSeekable h >>= print
putStr "hIsTerminalDevice : " >> hIsTerminalDevice h >>= print



入出力に使う文字コードの変更


日本語のようにアルファベット以外の文字を扱う時に文字コードって結構重要で、文字化けの問題が起きたり起きなかったりするんですよね。windowsとUnix系で文字コードが違うためファイル名が文字化けしたりとか、ブラウザでダウンロードしたら中身のテキストファイルが読めなかったりとか色々起きます。
S-JISが扱えないみたいなので、windows上で扱う場合はテクニックを使う必要があるみたいです。Haskell から MultiByteToWideChar を呼び ShiftJIS←→UTF16 変換する

hSetEncoding :: Handle -> TextEncoding -> IO ()
hGetEncoding :: Handle -> IO (Maybe TextEncoding)


エンコーディング情報を取得するサンプルです。

import System.IO
main :: IO()
main = do
putStrLn "File::::" >> withFile "test.txt" WriteMode encoding
putStrLn "stdin:::" >> encoding stdin
putStrLn "stdout:::" >> encoding stdout
encoding :: Handle -> IO ()
encoding h = hGetEncoding h >>= print


私の環境(CentOS)だと以下のような出力結果になりました。

File::::
Just UTF-8
stdin:::
Just UTF-8
stdout:::
Just UTF-8

スポンサーサイト

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

コメントの投稿

非公開コメント

プロフィール

かみさまみならい

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

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

この人とブロともになる

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