我有一個文本文件,其中每行包含兩個列表。每個列表可以包含任意數量的字母數字參數。 例如[t1,t2,...] [m1,m2,...] 我可以將文件讀入ghc,但是如何將它讀入另一個主文件以及主文件如何分別識別每個參數然後處理它?如何將文本文件讀入haskell程序?
回答
我認爲最好讓你自己弄清楚大部分情況,但我已經爲你提供了一些指導。 首先,儘量不要處理文件訪問,直到你有其他的代碼工作,否則你可能會在所有地方都有IO。從一些樣本數據:
sampleData = "[m1,m2,m3][x1,x2,x3,x4]\n[f3,f4,f5][y7,y8,y123]\n[m4,m5,m6][x5,x6,x7,x8]"
在你的代碼不應該提sampleData
其他地方,但你應該在ghci中使用它進行測試。
一旦你有,你想要做的一切,例如processLists::String->[(String,String)]
功能,你可以用
readInLists :: FilePath -> IO [(String,String)]
readInLists filename = fmap processLists (readFile filename)
replcae readFile "data.txt" :: IO String
如果fmap
是沒有意義的,你可以閱讀tutorial I accidentally wrote。
如果他們真的是字母數字,你可以很容易地拆分它們。這裏有一些方便的功能,附帶示例。
tail :: [a] -> [a]
tail "(This)" = "This)"
你可以用它在你的字符串前面扔掉你不想要的東西。
break :: (Char->Bool) -> String -> (String,String)
break (== ' ') "Hello Mum" = ("Hello"," Mum")
所以break
使用測試,以找出第二個字符串的第一個字符,而之前它打破了字符串。 請注意,中斷字符仍然存在於下一個字符串的前面。 span
是相同的,但使用什麼有在第一列表中的測試,所以
span :: (Char->Bool) -> String -> (String,String)
span (/= ' ') "Hello Mum" = ("Hello"," Mum")
您可以使用這些東西的功能,如(==',')
,或isAlphaNum
(你必須import Data.Char
在你的文件的頂部使用它)。
你可能想看看我在this answer中的功能splitWith
和splitOn
。它們基於Prelude的split
和words
的定義。
你「不小心」寫了一篇教程?這是如何發生的? = p –
@代碼大師我寫了一個答案,它變得非常失控。它比我典型的答案更長,現在甚至有一個附錄。它只是一個簡短的例子,但最終成爲了一個教程。好吧。 – AndrewC
答案和教程密鑰就像是緊挨着一樣。 –
- 1. 如何將文本文件讀入np.array?
- 2. 如何將文本文件讀入deque
- 3. 將csv文件讀入文本文件
- 4. 如何在C#中將文本文件讀入文本框中#
- 5. 將.txt文件讀入C程序
- 6. 如何使用bash將文本文件導入C程序?
- 7. 如何將文本文件導入iPad應用程序?
- 8. 將文本文件讀入數組
- 9. 將文本文件讀入numpy數組
- 10. 將文本文件讀入字典
- 11. 將非文本文件讀入Python
- 12. 嘗試將文本文件讀入JTextArea
- 13. 將文本文件讀入數組
- 14. 將文本文件讀入arrayList
- 15. 將文本文件讀入數組
- 16. 將文本文件讀入數組?
- 17. 將文本文件讀入Java數組
- 18. 將文本文件讀入Safearray
- 19. 如何閱讀遠程文本文件
- 20. 如何從應用程序目錄文本文件中讀取文本文件
- 21. Haskell - 如何構建一個將讀取一些設置文件的程序?
- 22. 如何在Linux上將文件讀入C程序?
- 23. 如何將C#應用程序的文本輸出寫入文本文件
- 24. Haskell從標準輸入讀取文件
- 25. 在Haskell中讀取和寫入文件
- 26. Java程序讀取文本文件
- 27. 如何將csv文件讀入文本框?
- 28. 如何在純C中將文本文件讀入數組?
- 29. 如何在JAVA中將文本文件讀入數組列表?
- 30. 如何將.txt文件中的文本讀入數組?
你有什麼試過?您是否查看過任何Haskell教程或文檔的相關部分? –
[This](http://www.learnyouahaskell.com/)是一本幫助你學習Haskell的好書。它在I/O方面有很好的一章。 –