首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在SML中从文件中一对一对地读取?

如何在SML中从文件中一对一对地读取?
EN

Stack Overflow用户
提问于 2020-04-30 02:42:34
回答 1查看 19关注 0票数 0

我希望从文件中读取N对,并将它们作为元组存储在list.For示例中,如果我有这3对: 1-2,7-3,2-9我希望我的列表看起来像这样的-> (1,2),(7,3),(2-9)

我尝试了这样的东西:

代码语言:javascript
运行
复制
   fun ex filename = 
 let
   fun readInt input = Option.valOf (TextIO.scanStream (Int.scan StringCvt.DEC) input)
   val instream = TextIO.openIn filename
   val T = readInt instream (*number of pairs*)
   val _ = TextIO.inputLine instream


fun read_ints2 (x,acc) =
if x = 0 then acc
else read_ints2(x-1,(readInt instream,readInt instream)::acc)
in
 ...
end

当我运行它时,我得到了一个异常错误:/什么问题??

EN

回答 1

Stack Overflow用户

发布于 2020-04-30 13:56:05

我想出了这个解决方案。我从给定的文件中读取一行。在处理文本时,它去掉了除数字以外的所有内容,创建了一个单一的字符列表。然后,它将字符的平面列表拆分成对的列表,并在此过程中将字符转换为整数。我相信这是可以改进的。

代码语言:javascript
运行
复制
fun readIntPairs file =
    let val is = TextIO.openIn file
    in
        case (TextIO.inputLine is)
        of NONE => ""
         | SOME line => line
    end

fun parseIntPairs data =
    let val cs = (List.filter Char.isDigit) (explode data)
        fun toInt c =
            case Int.fromString (str c)
             of NONE => 0
              | SOME i => i
        fun part [] = []
          | part [x] = []
          | part (x::y::zs) = (toInt x,toInt y)::part(zs)
    in
        part cs
    end

 parseIntPairs (readIntPairs "pairs.txt");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61509288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档