[求助]如何把“(T1' 1.8)”样子的字符串赋给变量使成为真正的表(T1' 1.8)
(setq aa (read "(T1' 1.8)")aa结果是: (T1 (QUOTE 1.8))
aa为什么结果不是这样的: (T1' 1.8)
请教各位高手;(T1' 1.8)的结果怎么才能实现啊?多谢了
本帖最后由 yshf 于 2011-5-29 23:26 编辑
(setq aa (read "(\"T1'\" 1.8)"))
感谢yshf指教,这么晚了还没睡觉.
请问(setq aa (read "(\"T1'\" 1.8)"))中T1'前后两个斜杠能自动加上吗,因为我是从别人的txt文件中读数据,带"单撇号"的数据很多,有没有哪个函数自动加上斜杠.我是不是需要判断每个元素有没有单撇号啊?
本帖最后由 if 于 2011-5-30 03:15 编辑
;;;晕,你的T1' 1.8之间不是空格,而是全角的不间断字符害人啊!!
;;;("T1'" "1.8")是不是你要的结果
(setq aa "(T1' 1.8)")
(setq tag nil)
(read
(vl-list->string
(apply 'append
(mapcar '(lambda (x)
(cond ((= x 40) '(40 34))
((= x 41) '(34 41))
((member x '(32 161))
(if (setq tag (not tag))
'(34 34)
))
(T(list x))
)
)
(vl-string->list aa)
)
)))
多谢楼上if指教,您上边的字段能代替read了,我觉得read函数是鸡肋,因为从别人拷贝来的数据你很难要求人家不打单撇号'等字符.
本帖最后由 lenlenq 于 2011-5-30 20:23 编辑
我认为也可以构成这样的表
(defun c:TT ()
(setq str "( T1 ' 1.8)")
(setq str (vl-string-trim ")" (vl-string-trim "(" str)))
(setq n (vl-string-search "'" str))
(setq str1 (substr str 1 (1- n)))
(setq str2 (substr str (+ 2 n)))
(mapcar 'vl-princ-to-string (list (read str1) (read str2)))
)
返回 ("T1" "1.8")
本帖最后由 tywsc 于 2011-5-30 22:04 编辑
多谢i6#楼lenlenq,
您的程序中(setq str "( T1 ' 1.8)")的T1后面不是紧跟的单撇号, "( T1' 1.8)"是我从别人的txt文件中读入的,而且是大量的数据,我不能每个去手改.
希望,程序中不用read函数,否则特殊函数如单撇浩' 和反斜杠\ 等等都不能正确的显示出来 不需要改的。 tywsc 发表于 2011-5-30 21:59 static/image/common/back.gif
多谢i6#楼lenlenq,
您的程序中(setq str "( T1 ' 1.8)")的T1后面不是紧跟的单撇号, "( T1' ...
上面只是我测试用的"( T1 ' 1.8)"
"(T1 '1.8)"返回值是一样的 ("T" "1.8")
多谢9#楼 lenlenq回复
我希望"(T1'1.8)" 能去掉双引号变为(T1' 1.8),而不是("T" "1.8")或者("T'" "1.8").
就是简单去掉括号外的双引号,不受函数read对参数的格式的要求.
页:
[1]
2