[英]haskell write to file it if it does not exists before reading
我正在學習haskell並且偶然發現了parse error on input contents'
編譯錯誤的parse error on input contents'
錯誤。
我想做的事 :
我將以前的會話狀態存儲在一個文件中。 我在啟動程序之前讀了這個文件。 但是,在第一次運行程序期間,文件可能不存在。 在這種情況下,我想首先使用默認值創建文件,然后繼續。
main :: IO()
main = do
-- Take input
let fileName = "ashish-temp.txt"
let dummyBoard = take 5 $ repeat "-----"
fileExist <- doesFileExist fileName
if False == fileExist
then writeFile fileName $ unlines dummyBoard
-- getting an error on this line
contents <- readFile fileName
-- do processing () :)
-- i want the value in contents
putStrLn "Done"
另外,我認為不是將dummyBoard
寫入文件,而是可以使用dummyBoard
初始化內容。 但我也做不到。 我猜兩種方式應該是一樣的。
請幫忙。 謝謝。
編輯方案:
在haskell中每個if
else
需要else
。
此問題后您將面臨的另一個問題是: *** Exception: ashish-temp.txt: openFile: resource busy (file is locked)
使用import qualified System.IO.Strict as S
和S.redFile
來讀取文件。
您的代碼庫存在一些問題:
if
表達式的else
部分。 在Haskell中,因為if
是一個表達式,所以它需要else
部分而不是其他語言,其中if-else
是語句而else部分不是必需的。 dim
? 你必須定義它。 一個工作程序顯示類似於你想要做的概念將如下所示:
main :: IO()
main = do
let fileName = "somefile.txt"
fileExist <- doesFileExist fileName
if not fileExist
then writeFile fileName "something"
else return ()
contents <- readFile fileName
-- do stuff with contents here
putStrLn "Done"
你有問題的第二部分尚未得到答復。
另外,我認為不是將
dummyBoard
寫入文件,而是可以使用dummyBoard
初始化內容。 但我也做不到。 我猜兩種方式應該是一樣的。
的確,你可以如下:
contents <- if fileExist
then readFile fileName
else return $ unlines dummyBoard
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.