找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2293|回复: 30

[求助] 分割字符串,错在什么地方?(Lisp调用VBA函数)

[复制链接]

已领礼包: 604个

财富等级: 财运亨通

发表于 2016-11-18 14:00:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 /db_自贡黄明儒_ 于 2016-12-31 21:47 编辑

;;分割字符串
(defun w5 ()
  (setq scr (vlax-create-object "ScriptControl"))
  (vlax-put Scr "language" "JScript")
  (vlax-invoke scr 'AddCode "function aa(bb){x=bb.split(',');return x;}")
  (setq str (strcat "aa(" "12了,地" ")"))
  (vlax-invoke scr 'eval str)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 488个

财富等级: 日进斗金

发表于 2016-11-19 18:49:19 | 显示全部楼层
(defun w5 (str)
  (setq scr (vlax-create-object "ScriptControl"))
  (vlax-put Scr "language" "JScript")
  (vlax-invoke scr 'AddCode "function aa(bb){x=bb.split(',');return x[0];}")
  (setq str (strcat "aa(\"" str "\")"))
  (setq a(vlax-invoke scr 'eval str))
  (vlax-release-object scr)
  a
)




命令: (w5 "ab,cd")
"ab"

你要得到一个表是很难的,如果返回一个分割后的字符串(中间空格?),又失去了意义,和lisp直接写是一样的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 0 反对 1

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

发表于 2016-11-18 14:11:29 | 显示全部楼层
本帖最后由 CSharpBoy 于 2016-11-18 14:13 编辑
(defun w5 ()
  (setq scr (vlax-create-object "ScriptControl"))
  (vlax-put Scr "language" "JScript")
  (vlax-invoke scr 'AddCode "function aa(bb){x=bb.split(',');return x;}")
  (setq str (strcat "aa(" "'12了,地'" ")"))
  (vlax-invoke scr 'eval str)
)


这样改了下,能执行了
命令: (w5)
#<VLA-OBJECT JScriptTypeInfo 0a066360>

评分

参与人数 1D豆 +5 收起 理由
/db_自贡黄明儒_ + 5 感谢帮助!!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2016-11-18 15:28:03 | 显示全部楼层
本帖最后由 /db_自贡黄明儒_ 于 2016-11-18 16:03 编辑

能否在批示一下,怎么在lisp看到分割后的结果?难道只能用正则
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2963个

财富等级: 家财万贯

发表于 2016-11-19 10:30:17 | 显示全部楼层

你调用的函数,返回的结果是一个数组,lisp好像并不能处理数组,所以结果是个Object。
把retrun x;改为:return x[0];
可以返回第一个字符串:“12了”;
是否可以考虑把返回数组改为返回字符串,然后再转换为 list表?

评分

参与人数 1D豆 +1 收起 理由
/db_自贡黄明儒_ + 1 看来你很熟习VB哟

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 66个

财富等级: 招财进宝

发表于 2016-11-19 14:16:42 | 显示全部楼层
我来看看,我来学学
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2016-11-19 18:58:33 | 显示全部楼层

如果只得到一个字符串,那也没什么实际意义啊,版主。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2016-11-19 19:23:56 | 显示全部楼层
本帖最后由 aeo 于 2016-11-19 20:11 编辑

呵呵成了

删除了,看下面贴

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2016-11-19 20:02:34 | 显示全部楼层

大写的“牛”
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2016-11-19 20:05:42 | 显示全部楼层
这个和上面一样 只是  分隔符提取为 参数

[sell]
  1. ;;;分隔字符串
  2. ;;;(w55 "ab,cd,ef" ",") -->("ab" "cd" "ef")
  3. (defun w55 (str separator / a func j len lst scr str1 )
  4.   (setq scr (vlax-create-object "ScriptControl"))
  5.   (vlax-put Scr "language" "JScript")
  6.   (setq func (strcat "function aa(bb){x=bb.split(\""  separator "\");return x.length;}"))
  7.   (vlax-invoke scr 'AddCode func)
  8.   (setq str1 (strcat "aa(\"" str "\")"))
  9.   (setq len(vlax-invoke scr 'eval str1))
  10.   (setq j 0)
  11.   (while (< j len)
  12.     (setq func (strcat "function aa(bb){x=bb.split(\""  separator "\");return x[" (itoa j)"];}" ))   
  13.     (vlax-invoke scr 'AddCode func)  
  14.     (setq a(vlax-invoke scr 'eval str1))
  15.     (setq lst(cons a lst))
  16.     (setq j(1+ j))
  17.   )
  18.   (vlax-release-object scr)
  19.   (reverse lst)
  20. )
[/sell]

JScript 规则,如果分隔符为空 "" ,那分割每个字符:
命令: (w55 "ab,cd,ef:45" ",")
("ab" "cd" "ef:45")


命令: (w55 "ab,cd中华人民共和国,ef:45" "")
("a" "b" "," "c" "d" "中" "华" "人" "民" "共" "和" "国" "," "e" "f" ":" "4" "5")



评分

参与人数 2D豆 +10 贡献 +1 收起 理由
/db_自贡黄明儒_ + 5 很给力!经验;技术要点;资料分享奖!
newer + 5 + 1 热心帮忙奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

发表于 2016-11-19 23:25:11 | 显示全部楼层
一群牛人。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2016-11-20 22:20:24 | 显示全部楼层

还是版主功力深厚。
我在VBE运行这个api,在win7 32位上是可行的;在64位上就不行了。查到一些资料说,64位调用这个api就是有问题。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2016-11-20 22:28:31 | 显示全部楼层

64位是不是有64位版本的API?

点评

这个不是否很清楚  发表于 2016-11-20 22:30
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2016-11-21 13:13:15 | 显示全部楼层
网上搜到的:


64位的:
http://www.eonet.ne.jp/~gakana/tablacus/scriptcontrol_en.html
就是要注册组件,win要系统管理员,麻烦


64位里面允许32为组件,在帖子最下面。牛人多呀hehe
https://social.msdn.microsoft.co ... rol-10?forum=isvvba
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2016-11-21 13:58:26 | 显示全部楼层

可否用ScriptControl切换到英文输入法?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-22 04:47 , Processed in 0.356897 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表