美文网首页Haskell
使用Haskell读写文件

使用Haskell读写文件

作者: DarkBubble | 来源:发表于2018-03-05 11:04 被阅读22次

    1. 直接读写文本文件

    Haskell的Prelude库提供了两个函数用来直接读写文本文件,分别是readFilewriteFile,其类型签名如下:

    readFile :: FilePath -> IO String
    writeFile :: FilePath -> String -> IO ()
    

    注意,FilePath只是String的别名(String本山亦是[Char]的别名。)
    这两个函数用起来比较简单,第一个参数是文件名;readFile直接返回一个IO String,即在触发IO过程中返回文件的内容;writeFile第二个参数是需要写入文件的内容字符串,返回一个IO (),即触发一个无返回值的IO过程。

    2. 句柄方式

    Haskell读写文件需要使用系统接口,因此放在了系统库System.IO中。使用文件的主要方式是句柄。句柄是一种操作系统资源的方式,类似于一种附带类型信息的系统ID号,记录了资源所在的内存或者设备地址,并且附带响应的操作API。在Haskell的System.IO库中,小写字母h开头的函数都与句柄操作有关系。由于操作句柄是程序外部的系统资源,因此必然都是IO函数。下面列举一个打开文件并且按照行读取内容的过程:

    import System.IO
    import System.Environment(getArgs)
    import Control.Monad(mapM_)
    
    hGetLines :: Handle -> IO [String]
    hGetLines h = do fileOk <- hIsOpen h
                     fileEof <- hIsEOF h
                     if fileOk && not fileEof
                     then do current <- hGetLine h
                             others  <- hGetLines h
                             return $ current:others
                     else return []
    
    main = do args <- getArgs
              if length args /= 1
              then fail "no input file"
              else return ()
              h <- openFile (args !! 0) ReadMode
              content <- hGetLines h
              mapM_ putStrLn content
              hClose h
    
    • IOMode,包括几个参数:ReadMode | WriteMode | AppendMode | ReadWriteMode分别对应:只读、只写、追加和读写模式。
    • 如果用户需要处理大型文本,则应当配合ByteString(Data.ByteString)库和Text(Data.Text)库。
    • 如果用户需要处理二进制,将openFile换成openBinaryFile

    相关文章

      网友评论

        本文标题:使用Haskell读写文件

        本文链接:https://www.haomeiwen.com/subject/shvcfftx.html