gpt4 book ai didi

file - 在 Haskell 中读取和写入文件

转载 作者:行者123 更新时间:2023-12-04 04:58:56 24 4
gpt4 key购买 nike

我正在尝试读取文件的内容,将文本转换为大写,然后将其写回。

这是我写的代码:

import System.IO
import Data.Char

main = do
handle <- openFile "file.txt" ReadWriteMode
contents <- hGetContents handle
hClose handle
writeFile "file.txt" (map toUpper contents)
return ()

但是,这不会向文件写入任何内容,事实上,它甚至会清除它。

我做了一些改变:
main = do
handle <- openFile "file.txt" ReadWriteMode
contents <- hGetContents handle
writeFile "file.txt" (map toUpper contents)
hClose handle
return ()

但是,我收到错误 resource busy (file is locked) .我怎样才能让这个工作和 为什么在这两种情况下都不起作用?

最佳答案

Lazy IO 不好,这通常被认为是 Haskell 中的一个痛点。基本上是 contents在您将其写回磁盘之前不会对其进行评估,此时由于文件已关闭,因此无法对其进行评估。您可以通过多种方式解决此问题,无需借助额外的库,您可以使用 readFile函数,然后在写回之前检查长度:

import Control.Monad (when)

main = do
contents <- readFile "file.txt"
let newContents = map toUpper contents
when (length newContents > 0) $
writeFile "file.txt" newContents

我会说这段代码实际上更好,因为你不会写回一个已经为空的文件,这是一个毫无意义的操作。

另一种方法是使用流媒体库, pipes是一个受欢迎的选择,有一些很好的教程和坚实的数学基础,这也是我的选择。

关于file - 在 Haskell 中读取和写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31342012/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com