如何使用Scheme语言从二进制文件中查找第40个字节?
嗨,我正在尝试使用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
(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)))