2htdp /batch-io库包含将read-csv-file
CSV 文件读入列表的有用过程。它以文件名作为参数。不幸的是,它没有将包含 CSV 的字符串作为其参数。假设我在一个字符串变量中有一个 CSV,我想用read-csv-file
它来解析它。有没有办法避免将 CSV 保存到文件中以便能够解析 CSV?
文档说:
读取标准输入设备(直到关闭)或文件 f 的内容并将其生成为逗号分隔值列表的列表。
可能可以利用标准输入功能来实现这一点,但我不知道如何继续这个想法。
2htdp /batch-io库包含将read-csv-file
CSV 文件读入列表的有用过程。它以文件名作为参数。不幸的是,它没有将包含 CSV 的字符串作为其参数。假设我在一个字符串变量中有一个 CSV,我想用read-csv-file
它来解析它。有没有办法避免将 CSV 保存到文件中以便能够解析 CSV?
文档说:
读取标准输入设备(直到关闭)或文件 f 的内容并将其生成为逗号分隔值列表的列表。
可能可以利用标准输入功能来实现这一点,但我不知道如何继续这个想法。
2htdp 库是为初学者设计的,因此不如其他 csv 库灵活。因此,您有两种选择:
batch-io
提供simulate-file
了与您想要的类似的东西,但没有什么比将字符串包装在一个函数中更干净的了,这使得它成为一个像对象这样的文件:> (simulate-file read-csv-file "test,test,test")
(list (list "test" "test" "test"))
csv-reading
(csv-reading
必须下载但只是(require csv-reading)
继续通过它给你的错误):#lang racket
(require csv-reading)
> (csv->list "test,test,test")
(list (list "test" "test" "test"))
如果batch-io
更笼统,它将采用 astring?
或 aninput-port?
但它没有。
我找到了一种read-csv-file
从字符串中读取的方法:
> (require 2htdp/batch-io)
> (define csv-string "one,one,one\ntwo,two,two")
> (parameterize ([current-input-port (open-input-string csv-string)])
(read-csv-file 'stdin))
'(("one" "one" "one") ("two" "two" "two"))
这通过将标准输入更改为 CSV 字符串来工作。
@Ryan Schaefer 的回答simulate-file
很好,但我对使用仍在“开发中”且未正确记录的功能感到有点不舒服。正如simulate-file
的文档所说:
注意:此表格正在开发中,将在最终定稿后以精确的方式记录下来,并对广大受众有用。