我如何使用 read-csv-file 来读取字符串?
How can I use read-csv-file to read from a string instead?
2htdp/batch-io library contains the useful read-csv-file
将 CSV 文件读入列表的过程。它以文件名作为参数。不幸的是,它没有将包含 CSV 的字符串作为其参数。假设我在字符串变量中有一个 CSV,我想使用 read-csv-file
来解析它。有没有一种方法可以避免将 CSV 保存到文件中以便能够解析 CSV?
文档说:
reads the standard input device (until closed) or the content of file f and produces it as a list of lists of comma-separated values.
可能可以利用标准输入功能来实现这一点,但我不知道如何继续这个想法。
2htdp 库适用于初学者,因此不如其他 csv 库灵活。因此,您有两个选择:
batch-io
提供了 simulate-file
,这与您想要的类似,但没有什么比将字符串包装在一个函数中更干净的了,该函数使它成为一个文件,如 object:
> (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
更通用,它会接受 string?
或 input-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
的文档所说:
Note: this form is under development and will be documented in a precise manner after it is finalized and useful for a wide audience.
2htdp/batch-io library contains the useful read-csv-file
将 CSV 文件读入列表的过程。它以文件名作为参数。不幸的是,它没有将包含 CSV 的字符串作为其参数。假设我在字符串变量中有一个 CSV,我想使用 read-csv-file
来解析它。有没有一种方法可以避免将 CSV 保存到文件中以便能够解析 CSV?
文档说:
reads the standard input device (until closed) or the content of file f and produces it as a list of lists of comma-separated values.
可能可以利用标准输入功能来实现这一点,但我不知道如何继续这个想法。
2htdp 库适用于初学者,因此不如其他 csv 库灵活。因此,您有两个选择:
batch-io
提供了simulate-file
,这与您想要的类似,但没有什么比将字符串包装在一个函数中更干净的了,该函数使它成为一个文件,如 object:
> (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
更通用,它会接受 string?
或 input-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
的文档所说:
Note: this form is under development and will be documented in a precise manner after it is finalized and useful for a wide audience.