簡體   English   中英

如果在讀取之前它不存在,則haskell寫入文件

[英]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 SS.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM