gpt4 book ai didi

functional-programming - 使用 SML 基础查找文件

转载 作者:行者123 更新时间:2023-12-04 00:16:29 25 4
gpt4 key购买 nike

有没有办法使用 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

关于functional-programming - 使用 SML 基础查找文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16499260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com