Ped*_*ino 0 common-lisp type-conversion
我有一个.lisp包含以下内容的本地文件:
((:DATE @2021-08-04T17:36:57.804411-03:00 :URL
"https://www.facebook.com/r.php")
(|:name| "jazoest" |:value| "2985" |:type| "hidden")
(|:name| "lsd" |:value| "AVpp0Bi0ysk" |:type| "hidden")
(|:id| "u_0_y_q3" |:name| "custom_gender" |:type| "text")
(|:id| "referrer" |:name| "referrer" |:type| "hidden")
(|:id| "asked_to_login" |:name| "asked_to_login" |:value| "0" |:type|
"hidden")
(|:id| "use_custom_gender" |:name| "use_custom_gender" |:type| "hidden")
(|:id| "terms" |:name| "terms" |:value| "on" |:type| "hidden")
(|:id| "ns" |:name| "ns" |:value| "0" |:type| "hidden")
(|:id| "ri" |:name| "ri" |:value| "afc4dac1-259a-4006-a979-8ab182d93cce"
|:type| "hidden")
(|:id| "action_dialog_shown" |:name| "action_dialog_shown" |:type| "hidden")
(|:id| "invid" |:name| "invid" |:type| "hidden")
(|:id| "captcha_response" |:name| "captcha_response" |:type| "hidden"))
Run Code Online (Sandbox Code Playgroud)
我可以阅读它:
(uiop:read-file-string "/home/pedro/miscellaneous/misc/tests-output/input-data.lisp")
Run Code Online (Sandbox Code Playgroud)
返回:
" ((:DATE @2021-08-04T17:36:57.804411-03:00 :URL
\"https://www.facebook.com/r.php\")
(|:name| \"jazoest\" |:value| \"2985\" |:type| \"hidden\")
(|:name| \"lsd\" |:value| \"AVpp0Bi0ysk\" |:type| \"hidden\")
(|:id| \"u_0_y_q3\" |:name| \"custom_gender\" |:type| \"text\")
(|:id| \"referrer\" |:name| \"referrer\" |:type| \"hidden\")
(|:id| \"asked_to_login\" |:name| \"asked_to_login\" |:value| \"0\" |:type|
\"hidden\")
(|:id| \"use_custom_gender\" |:name| \"use_custom_gender\" |:type| \"hidden\")
(|:id| \"terms\" |:name| \"terms\" |:value| \"on\" |:type| \"hidden\")
(|:id| \"ns\" |:name| \"ns\" |:value| \"0\" |:type| \"hidden\")
(|:id| \"ri\" |:name| \"ri\" |:value| \"afc4dac1-259a-4006-a979-8ab182d93cce\"
|:type| \"hidden\")
(|:id| \"action_dialog_shown\" |:name| \"action_dialog_shown\" |:type| \"hidden\")
(|:id| \"invid\" |:name| \"invid\" |:type| \"hidden\")
(|:id| \"captcha_response\" |:name| \"captcha_response\" |:type| \"hidden\"))
"
Run Code Online (Sandbox Code Playgroud)
我尝试使用该函数read-from-string将此列表作为字符串转换为真正的列表。这种方法适用于示例示例,例如:
CL-USER> (read-from-string "((1 2 3) (a b c))")
((1 2 3) (A B C))
17
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我尝试对前面提到的字符串使用相同的方法时,我收到一条错误消息:
CL-USER> (uiop:read-file-string "/home/pedro/miscellaneous/misc/tests-output/input-data.lisp")
CL-USER> (read-from-string *)
Run Code Online (Sandbox Code Playgroud)
“36”中有太多冒号。行:1,列:26,文件位置:26 流:#<SB-IMPL::STRING-INPUT-STREAM {10083FC0E3}> [SB-INT:SIMPLE-READER-ERROR 类型的条件]
为什么会发生这种情况?我该如何解决?
谢谢。
问题是日期格式。 @2021-08-04T17:36:57.804411-03:00不是标准语法中的有效标记。您需要更改为包含@库中读取器宏的可读表local-time。
示例交互:
CL-USER> (ql:quickload "local-time")
To load "local-time":
Load 1 ASDF system:
local-time
; Loading "local-time"
[package local-time]......................
("local-time")
CL-USER> (local-time:enable-read-macros)
; No value
CL-USER> (read-from-string "@2021-08-04T17:36:57.804411-03:00")
@2021-08-04T22:36:57.804411+02:00
33
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43 次 |
| 最近记录: |