2012-03-10 19 views
1

如果我有一个名为raw_text.txt的文件,有没有一种方法可以遍历每一位?如何使用Scheme访问文件的位表示?

我看到下面的,但我对如何使用它困惑:

http://www.gnu.org/software/mit-scheme/documentation/mit-scheme-ref/File-Manipulation.html - 程序:文件属性/模式字符串属性 文件的模式字符串,显示文件的模式一个新分配的字符串位。在unix下,这个字符串是unix格式的。在Windows下,该字符串以其通常格式显示标准的“DOS”属性。

编辑:我使用MIT的方案

+1

'file-attributes/mode-string'中提到的“位”是指文件权限,而不是其实际内容 – 2012-03-10 21:40:57

+0

我有点困惑(没有双关语!)你的问题 - 你需要阅读文件中的字符一个接一个,或者实际的1和0来定义文件中的每个字符?它是一个二进制文件还是文本文件?如果它是一个文本文件,知道它的编码是相关 – 2012-03-10 21:44:57

+0

@ÓscarLópez我希望能够通过实际的1s和0来定义文件中的每个字符,而不管文件类型,无论是mp3还是odt等。 – zallarak 2012-03-10 22:28:00

回答

3

这是实现特定的。对事物的球拍边,有几个库:

  1. http://planet.racket-lang.org/display.ss?package=bitsyntax.plt&owner=tonyg

  2. http://planet.racket-lang.org/display.ss?package=bit-io.plt&owner=soegaard

你可能可以使用类似的二进制解析库,以及:http://okmij.org/ftp/Scheme/binary-io.html,只要您的Scheme的实施可以支持它。

在MIT计划下,您可以使用bit-string函数。

+0

感谢您的解决方案。我正在使用MIT方案,并且很快会查看二进制解析库。 – zallarak 2012-03-11 01:31:56

+0

二进制解析库不是我正在寻找的东西[除非我错过了它的东西!]。它没有任何要读取或写入位[0和1]的文件。我将用更多的信息重新发布这个问题。 – zallarak 2012-03-12 17:11:03

+0

修改答案:在MIT Scheme下,有一系列位串的函数,这可能就是你要找的。您可以从文件中读取字节,并使用** unsigned-integer->位串**将每个字符串转换为位串。我不确定是否有一种便利功能可以将文件的全部内容转换为单个字符串,但如果代码不存在,应该不会太糟糕。 – dyoo 2012-03-12 17:23:31

0

我实际上并没有试图对此做任何事情,但我认为你正在寻找mit-scheme文档的这一部分:Input/Output。特别是文件端口和输入程序部分。

我没有看到有关读取二进制位的任何具体内容,但是如果它是字符字节,则它看起来像有程序。也许你想要做这样的事情?

(call-with-input-file "raw_text.txt" <procedure>) 

(call-with-binary-file "raw_text.txt" <procedure>) 

<procedure>将文件端口,并使用输入程序,从文件中读取的东西。

出于好奇,你想做什么?

编辑:似乎有人在这写了here

+0

我想要一个整数列表,例如:(1 0 0 1 1 1 0 1 1 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 0 1 0 1 0 0 0 1 0 0 1 1 0 1 0 1 1 0 0 1 0 1 1 1 1 1 1 1 1 0 0)并基本上将整数写入文件中作为位,如果有意义的话。我尝试了这些命令,我​​使用的过程是read-char,它无法启动二进制文件。也许我正在使用错误的proc,但我找不到一个阅读位。尽管感谢您的回复。 – zallarak 2012-03-12 17:13:10

相关问题