如何使用Scheme语言从二进制文件中查找第40个字节?

如何使用Scheme语言从二进制文件中查找第40个字节?,scheme,byte,Scheme,Byte,嗨,我正在尝试使用scheme命令从二进制文件中查找第40个字节 (define FileName "D:/work_dsi/Stories/WriterOptions/Tests/block_english.model") (define fPtr (open-input-file FileName)) (define sRec "1") (((sRec (read-byte fPtr))) do ((eof-object? s

嗨,我正在尝试使用scheme命令从二进制文件中查找第40个字节

(define FileName "D:/work_dsi/Stories/WriterOptions/Tests/block_english.model")

(define fPtr (open-input-file FileName))

(define sRec "1")

(((sRec (read-byte fPtr)))

    do
     ((eof-object? sRec ))
    (print sRec)
    (define sRec (read-byte fPtr))
)
(close-input-port fPtr)

为了更好地理解这个概念,我尝试使用这个表达式,但没有取得任何效果。

您需要以下函数:

  • :允许您读取给定文件(文件设置为)
  • :从给定端口或当前输入端口获取所有字节,结果为字节字符串
  • :从字节字符串获取第n个字节

此函数将返回数字。对于读取文本文件,您可以将该数字转换为字符。

仅使用标准R7RS函数的版本(特别是,
文件
库打开二进制输入文件和
读取-u8

(导入(方案文件))
(定义(读取第n字节文件名n)
(用左舷呼叫)
(打开二进制输入文件名)
(lambda(inp)
(do((i 1(+i 1))
(字节(读-u8 inp)(读-u8 inp)))
(=i n)字节)
(如果(eof对象?字节)(错误“文件过早结束”;);)

为了避免将大量文件读入内存以获取较大的
n
,此文件读取并丢弃字节,直到到达
n
th字节。(如果标准中有
seek
函数就好了…

我可以知道这是做什么用的吗?(字符串->路径“C:\\Users\\mapud\\Documents\\bytefile.txt”)因为我已经为函数定义了一个二进制文件。@UmeshV实际上,您不需要该文件-检查编辑版本。看起来您需要进一步学习Scheme的最基本的基础知识。如果在上面的脚本中我将n替换为40,我将得到此输出!错误lambda:错误的参数类型整数(预期符号)同样对于第一行命令:Error top-level:unbound变量:import@UmeshV呃…您是否要用文字数字替换参数列表中的变量?嗯。这是一个函数;只需使用适当的参数调用它。此代码需要符合R7RS的方案。如果您使用的方案不支持该标准,则可能无法工作(例如,如果使用chicken,则需要首先安装r7rs egg)。嗨,shawn,我所做的不是读取字节,而是导入二进制文件并读取字符。但我有一个问题,我无法获得此脚本的字符串匹配结果。请检查此链接:。
(require racket/port)

(with-input-from-file
    "D:/work_dsi/Stories/WriterOptions/Tests/block_english.model"
  (lambda ()
    (bytes-ref (port->bytes) 39)))