为什么我不能将此列表作为字符串转换为 Common Lisp 中的真实列表?
Why I cannot convert this list as a string to be a real list in Common Lisp?
我有一个包含以下内容的本地 .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"))
我可以阅读:
(uiop:read-file-string "/home/pedro/miscellaneous/misc/tests-output/input-data.lisp")
哪个returns:
" ((: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\"))
"
我尝试使用函数read-from-string
将这个列表作为字符串转换为真正的列表。这种方法适用于示例示例,例如:
CL-USER> (read-from-string "((1 2 3) (a b c))")
((1 2 3) (A B C))
17
不幸的是,当我尝试对前面提到的字符串使用相同的方法时,我收到一条错误消息:
CL-USER> (uiop:read-file-string "/home/pedro/miscellaneous/misc/tests-output/input-data.lisp")
CL-USER> (read-from-string *)
too many colons in "36".
Line: 1, Column: 26, File-Position: 26
Stream: #<SB-IMPL::STRING-INPUT-STREAM {10083FC0E3}> [Condition
of type SB-INT:SIMPLE-READER-ERROR]
为什么会这样?我该如何解决?
谢谢。
问题是日期格式。 @2021-08-04T17:36:57.804411-03:00
不是标准语法中的有效标记。您需要更改为包含库 local-time
.
中的 @
reader 宏的可读表
互动示例:
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
我有一个包含以下内容的本地 .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"))
我可以阅读:
(uiop:read-file-string "/home/pedro/miscellaneous/misc/tests-output/input-data.lisp")
哪个returns:
" ((: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\"))
"
我尝试使用函数read-from-string
将这个列表作为字符串转换为真正的列表。这种方法适用于示例示例,例如:
CL-USER> (read-from-string "((1 2 3) (a b c))")
((1 2 3) (A B C))
17
不幸的是,当我尝试对前面提到的字符串使用相同的方法时,我收到一条错误消息:
CL-USER> (uiop:read-file-string "/home/pedro/miscellaneous/misc/tests-output/input-data.lisp")
CL-USER> (read-from-string *)
too many colons in "36". Line: 1, Column: 26, File-Position: 26 Stream: #<SB-IMPL::STRING-INPUT-STREAM {10083FC0E3}> [Condition of type SB-INT:SIMPLE-READER-ERROR]
为什么会这样?我该如何解决?
谢谢。
问题是日期格式。 @2021-08-04T17:36:57.804411-03:00
不是标准语法中的有效标记。您需要更改为包含库 local-time
.
@
reader 宏的可读表
互动示例:
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