tywsc 发表于 2011-5-29 23:11:11

[求助]如何把“(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:21

本帖最后由 yshf 于 2011-5-29 23:26 编辑

(setq aa (read "(\"T1'\" 1.8)"))


tywsc 发表于 2011-5-29 23:55:59

感谢yshf指教,这么晚了还没睡觉.
请问(setq aa (read "(\"T1'\" 1.8)"))中T1'前后两个斜杠能自动加上吗,因为我是从别人的txt文件中读数据,带"单撇号"的数据很多,有没有哪个函数自动加上斜杠.我是不是需要判断每个元素有没有单撇号啊?

if 发表于 2011-5-30 02:30:18

本帖最后由 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)
)
)))

tywsc 发表于 2011-5-30 10:26:40

多谢楼上if指教,您上边的字段能代替read了,我觉得read函数是鸡肋,因为从别人拷贝来的数据你很难要求人家不打单撇号'等字符.

lenlenq 发表于 2011-5-30 20:22:07

本帖最后由 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 21:59:30

本帖最后由 tywsc 于 2011-5-30 22:04 编辑

多谢i6#楼lenlenq,
您的程序中(setq str "(   T1       '   1.8)")的T1后面不是紧跟的单撇号, "( T1'   1.8)"是我从别人的txt文件中读入的,而且是大量的数据,我不能每个去手改.
希望,程序中不用read函数,否则特殊函数如单撇浩' 和反斜杠\ 等等都不能正确的显示出来

lenlenq 发表于 2011-5-31 11:55:43

不需要改的。

lenlenq 发表于 2011-5-31 20:27:28

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")

tywsc 发表于 2011-6-1 10:13:53

多谢9#楼 lenlenq回复
我希望"(T1'1.8)" 能去掉双引号变为(T1' 1.8),而不是("T" "1.8")或者("T'" "1.8").
就是简单去掉括号外的双引号,不受函数read对参数的格式的要求.

页: [1] 2
查看完整版本: [求助]如何把“(T1' 1.8)”样子的字符串赋给变量使成为真正的表(T1' 1.8)