【问题标题】:Haskell read Integer and list of lists from fileHaskell 从文件中读取整数和列表列表
【发布时间】:2016-01-23 19:35:38
【问题描述】:

假设我有一个文件

8 [[1,2,3,4],[1,2]]

其中包含列表的数量和列表。

此代码允许我从中读取所有行或第 n 个元素。

import System.IO

main = do
      x <- openFile "file.txt" ReadMode
      cont <- hGetContents x
      let fLines = lines cont
      let numb = fLines !! 0 !! 0
      print numb

这里numb'8'

如何在不使用其他库的情况下从numb 获取整数 8?

是否有可能读取列表列表并将其用作列表列表?

或者我应该更好地将每个列表写在一个新行中,然后逐行读取它们并添加到空列表中?

也许这是一个愚蠢的问题,但我没有在互联网上找到任何这样做的例子。

更新

感谢 Fractal 的回答,我终于写出了这篇文章

rList :: String -> [[Int]]    
rList = read

适用于列表列表!

但是,当我无法使其与单个 Int 一起使用时。

into :: String -> Int
into = read

不知道为什么,但它不适用于numbT_T

更新 2

好吧,这有点愚蠢。 numb 在这里是 Char,所以要让它工作就足够了

print (into [numb])

谢谢大家的回答。

【问题讨论】:

  • 索引是否总是一位数?在那个例子中,寻找第一个空格可能会更好。
  • 与其用!! 索引flines,不如用words 在空白处分割可能更好。这样它就更灵活了,您不必将前导 Char 转换回 String

标签: list haskell


【解决方案1】:

您可以使用 read 解析 Haskell 数据结构的 String 表示。这也适用于您的列表。

【讨论】:

    【解决方案2】:

    你可以使用ord函数:: Char -&gt; Int

    在 Hoogle 搜索引擎上搜索 Char -&gt; Int 类型签名可以找到该函数:http://hoogle.haskell.org/?hoogle=Char+-%3E+Int

    文档:https://hackage.haskell.org/package/base/docs/Data-Char.html#v:ord

    例子:

    import System.IO
    import Data.Char (ord)
    
    main = do x <- openFile "file.txt" ReadMode
              cont <- hGetContents x
              let fLines = lines cont
              let numb = fLines !! 0 !! 0
              let numbInt = ord numb - ord '0'
              print numbInt
    

    【讨论】:

      猜你喜欢
      • 2017-09-11
      • 2019-07-30
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 2013-06-17
      相关资源
      最近更新 更多