我有一个文本文件,其中每行包含两个列表。每个列表可以包含任意数量的字母数字参数。 例如[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方面有很好的一章。 –