提取需要经常重新读取的 CSV 数据?

Vin*_*inn 3 variables sbcl common-lisp

大多数时候,当我读取 CSV 数据时,我使用局部变量:


(defun do-something ()
...
  (let ((thing (read-csv #P"~/Desktop/file.csv")))

   .... do stuff with thing))

Run Code Online (Sandbox Code Playgroud)

这有效。然而,我的一些功能变得相当庞大和混乱。所以我尝试将读取数据的函数放在一个特殊变量中:


(defparameter *file* (read-csv #P"~/Desktop/file.csv"))

Run Code Online (Sandbox Code Playgroud)

但是当我使用该*file*变量时,它不会使用新的 file.csv 进行更新。

有没有办法强制刷新或者也许是实时提取 CSV 数据的更好方法?

Man*_*red 7

作为变量,*file*从函数的结果初始化read-csv。所以除非你setf *file*再次退出read-csv它不会更新。

如果路径没有改变,您可以包装read-csv到另一个函数中,例如:

(defun retrieve-csv-data ()
  (read-csv #P"~/Desktop/file.csv"))
Run Code Online (Sandbox Code Playgroud)

并在需要 csv 数据的地方使用它。