基于 SML 的文件查找

2024-03-07

有没有办法使用 SML Basis 库在特定位置打开文件?也就是说,使用操作系统调用来更改位置,而不是扫描文件并丢弃数据。


这很棘手。不幸的是,不直接支持搜索。此外,文件位置仅对于二进制文件是透明的,即您使用BinIO结构[1]。对于该结构体,对应的类型BinIO.StreamIO.pos被定义为Position.int,这是某种整数类型。

然而,在支持标准的完整 I/O 堆栈的 SML 系统中,您应该能够使用较低的 I/O 层综合以下查找函数:

(* seekIn : BinIO.instream * Position.int -> unit *)

fun seekIn(instream, pos) =
    case BinIO.StreamIO.getReader(BinIO.getInstream instream) of
      (reader as BinPrimIO.RD{setPos = SOME f, ...}, _) =>
        ( f pos;
          BinIO.setInstream(instream,
            BinIO.StreamIO.mkInstream(reader, Word8Vector.fromList[]))
        )
    | (BinPrimIO.RD{name, ...}, _) =>
        raise IO.Io{
          name = name,
          function = "seekIn",
          cause = IO.RandomAccessNotSupported
        }

像这样使用它:

val file = BinIO.openIn "filename"
val _    = seekIn(file, 200)
val bin  = BinIO.inputN(file, 1000)

如果需要从 Word8Vector 转换为字符串:

val s = Byte.bytesToString bin

您也可以对输出流执行相同的操作。

[1] http://standardml.org/Basis/bin-io.html#BIN_IO:SIG:SPEC http://standardml.org/Basis/bin-io.html#BIN_IO:SIG:SPEC

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于 SML 的文件查找 的相关文章

随机推荐

  • 使用 unittest.mock 在 Python 中模拟 os.remove

    我该如何嘲笑os remove with unittest mock 我的尝试 使用pytest def test patch remove with patch os remove remove foo 给出错误 remove foo E
  • Python:在循环内仅打印一次

    我有一个代码 我想从相机捕获视频 我想使用 Python 的日志库在 shell 上获取消息或将它们导出到文本文件 这是我的代码的一部分 在 while 循环内我想打印相机打开成功 import numpy as np import cv2
  • 在 php 中清理整个 $_POST 数组的好方法是什么? [复制]

    这个问题在这里已经有答案了 我有一个包含很多变量的表单 然后发送电子邮件 而不是清理每个变量 POST价值与filter var POST var FILTER SANITIZE STRING 我正在寻找一段更简单的代码 我想出了下面的内容
  • knit:在 Rmd 文档中编织单独的 Rnw 文档

    我有一个 R markdown 主文档 Rmd 我想在其中knit一些separate其中一个块中的 Rnw 文档 无子文档 然而 当我打电话时knit在Rnw文档上 包含的R代码块似乎没有被处理 导致尝试运行时出错texi2pdf在他们
  • 如何在 WPF 中播放 .flv 文件?

    如何在 WPF 中播放 flv 文件 请任何人帮助我 Create the interop host control var host new WindowsFormsHost Create the ActiveX control var
  • matlab中的散点极坐标图

    我正在尝试绘制楔形图 赤经与红移 我想我可以在极坐标中使用散点图 matlab中的极坐标函数似乎非常有限 甚至这个 polar a 1 a 2 Linewidth 1 给我一个错误 Error using polar line 23 Too
  • 在我的 math.h 中找不到 log2?

    我正在使用相当新安装的 Visual C 2008 Express 我正在尝试编译一个使用 log2 函数的程序 该程序是通过在 Mac 上使用 Eclipse 找到的 但是这台 Windows 计算机找不到该函数 错误 C3861 log
  • 通过 Segue 传递数据 (swift 2)

    这是一个小费计算器项目 它必须有一个设置视图 我可以在其中选择默认小费率 我在传递数据时遇到一些问题 当我选择默认小费百分比时 它在视图控制器中不会更改 而且我想让应用程序在关闭应用程序并重新打开时记住默认费率 如果有人纠正我的代码并对其进
  • 具有一个参数的多个构造函数

    因此 在学校我们接到了一项作业 用 OOP 制造一辆汽车 到目前为止 这一切都非常简单和直接 但现在我需要创建四个构造函数 一个不带参数 两个带一个参数 一个带两个参数 据我所知 重载的工作方式是检查您提供的参数数量 然后检查它必须使用哪个
  • ChartJS:图表不显示所有数据

    由于某种原因 该图表没有显示数组中的最后两个数据 var data labels Brasil Argentina Chile Paraguai Peru Bol via M xico datasets data 9 19 7 77 6 8
  • AWS API Gateway 始终返回 502 bad gateway

    我在 AWS 中创建了一个简单的 lambda 函数 它从 DynamoDB 返回列表 我还创建了 API Gateway 来触发 lambda 函数 当我在 AWS 控制台中测试时 该函数运行良好 但是当我在 Postman 中测试此功能
  • 如何删除 lambda 事件处理程序 [重复]

    这个问题在这里已经有答案了 我最近发现我可以使用 lambda 来创建简单的事件处理程序 例如 我可以订阅这样的点击事件 button Click s e gt MessageBox Show Woho 但你如何取消订阅呢 C 规范明确指出
  • 如何在文本中定义人名(Java)

    我有一些输入文本 其中包含一个或多个人名 我没有这些名字的字典 哪个 Java 库可以帮助我根据输入文本定义名称 我浏览了 OpenNLP 但没有找到任何示例或指南 或者至少没有找到如何将其应用到我的代码中的描述 我看到了 javadoc
  • AttributeError:“TimedeltaProperties”对象没有属性“分钟”

    我有一个看起来像这样的数据框 df output date time 2020 02 28 00 30 45 2020 02 28 00 30 45 2020 03 09 00 21 06 2020 03 09 00 21 06 2020
  • 应用程序退出,退出代码为 -1073740771

    我有一个 WPF 应用程序 有时会以退出代码 1073740771 退出 该问题不会以任何模式出现 并且因系统而异 在某些系统中 该问题的发生率不到总案例的 10 而在其他系统中 我发现该问题的发生率几乎占总案例的 30 我无法形成任何可靠
  • UIImagePickerController 选择视频会阻止 MPMoviePlayerViewController 实例工作

    我有一个视图控制器 我在其中呈现UIImagePickerController在弹出窗口中 如果用户选择视频 则关闭弹出窗口并移至下一个 页面 视图控制器 并尝试使用以下方式播放任何电影MPMoviePlayerViewController
  • 如何将图片转换为html?

    有没有办法将图像转换为html相当于图像 通过有一个html表分为许多单元格 每个单元格都有特定的背景颜色 就像图像中的像素一样 很像 ASCII 艺术 我认为这是一种在电子邮件签名中包含公司徽标的方法 而不必担心电子邮件客户端阻止图像 是
  • 每个数据库提供程序类型允许的最大参数数是多少?

    可以传递到 Sql Server 查询 即通过 ADO Net 的参数限制为 2 100 个 但是 Net 开发人员使用的其他常见数据库的记录限制是什么 特别是我感兴趣的是 甲骨文10g 11g MySql PostgreSQL Sqlit
  • JavaFX 偶发渲染问题 - 按钮/控件消失

    我有一个 Java JavaFX 应用程序部署为 Windows 和 Mac 的本机安装 目前捆绑的运行时间为 8 121 您可以在此处找到安装程序和 Java 代码 乔治下载 http www george andante no down
  • 基于 SML 的文件查找

    有没有办法使用 SML Basis 库在特定位置打开文件 也就是说 使用操作系统调用来更改位置 而不是扫描文件并丢弃数据 这很棘手 不幸的是 不直接支持搜索 此外 文件位置仅对于二进制文件是透明的 即您使用BinIO结构 1 对于该结构体