File io 如何读取MIT/GNU方案中的文本文件?
我一直在学习SICP,我想应用到目前为止我学到的一些概念。也就是说,积累、映射和过滤将帮助我在工作中更高效。我主要使用CSV文件,我知道MIT/GNU方案不支持这种文件格式。但这没关系,因为我可以将CSV文件导出为txt文件,因为支持txt文件 现在我阅读了手册的第14节输入/输出,坦率地说,缺乏具体的示例并不能帮助我开始学习。因此,我希望你们中的一些人能给我一个领先的开始。我有一个文本文件foo.txt,由变量和国家列表的观察值组成。我只想把这个文件读入Scheme并处理数据。谢谢你的帮助。任何示例代码都会有帮助File io 如何读取MIT/GNU方案中的文本文件?,file-io,scheme,mit-scheme,File Io,Scheme,Mit Scheme,我一直在学习SICP,我想应用到目前为止我学到的一些概念。也就是说,积累、映射和过滤将帮助我在工作中更高效。我主要使用CSV文件,我知道MIT/GNU方案不支持这种文件格式。但这没关系,因为我可以将CSV文件导出为txt文件,因为支持txt文件 现在我阅读了手册的第14节输入/输出,坦率地说,缺乏具体的示例并不能帮助我开始学习。因此,我希望你们中的一些人能给我一个领先的开始。我有一个文本文件foo.txt,由变量和国家列表的观察值组成。我只想把这个文件读入Scheme并处理数据。谢谢你的帮助。任
(call-with-input-file "my_file.txt"
(lambda (port)
(read port))) ; reads the file's contents
一般情况下,请参阅参考手册上的。Scheme提供了几种读取文件的方法。您可以使用“打开/关闭”样式,如下所示:
(let ((port (open-input-file "file.txt")))
(display (read port))
(close-input-port port))
您还可以使用igneus的answer,它将端口传递给过程,并在过程结束时自动关闭端口:
(call-with-input-file "file.txt"
(lambda (port)
(display (read port))))
最后,我的最爱,将当前输入端口更改为从文件读取,运行提供的过程,关闭文件,并在结束时重置当前输入端口:
(with-input-from-file "file.txt"
(lambda ()
(display (read))))
您还需要阅读关于的部分。上面使用的“read”函数仅从端口读取下一个Scheme对象。还有读取字符、读取行等。如果您已经从文件中读取了所有内容,那么您将得到eof对象?将返回true on-如果您正在循环文件以读取所有内容,则此选项非常有用
e、 g.将文件中的所有行读入列表
(with-input-from-file "text.txt"
(lambda ()
(let loop ((lines '())
(next-line (read-line)))
(if (eof-object? next-line) ; when we hit the end of file
(reverse lines) ; return the lines
(loop (cons next-line lines) ; else loop, keeping this line
(read-line)))))) ; and move to next one
谢谢你,伊涅斯。既然您提供了一个简单的示例,我将再次阅读该部分。我第一次读它时,由于缺乏具体的例子,我很难理解。非常感谢彼得。我现在听从你的建议,效果很好。谢谢你的帮助。