| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1307 人关注过本帖
标题:求助VBA转为VFP
只看楼主 加入收藏
sostemp
Rank: 4
等 级:贵宾
威 望:10
帖 子:202
专家分:284
注 册:2009-6-2
结帖率:80%
收藏
 问题点数:0 回复次数:14 
求助VBA转为VFP

Function get_trace_json(mystring As String) As Integer
    Dim objJSx, objJSy As Object
    Set objJSx = CreateObject("ScriptControl")         
objJSx.Language = "JavaScript"                    
    jscode = "function json(s,i) { return eval('(' + s + ').traces[' + i + ']'); }"
    objJSx.AddCode jscode
    For n = 1 To 80
        If objJSx.Run("json", mystring, n - 1) = "" Then Exit For
        Set objJSy = objJSx.Run("json", mystring, n - 1)
        stime(n) = objJSy.acceptTime
        saddr(n) = objJSy.acceptAddress
        state(n) = objJSy.remark
        Debug.Print n & ":" & objJSy.acceptTime & objJSy.acceptAddress & objJSy.remark
    Next n
   
    If Left(state(n - 1), 2) = "妥投" Or Left(state(n - 1), 5) = "投递并签收" Then tt = "OK"
get_trace_json = n – 1
End Function

Function get_trace_json1(mystring As String) As Integer
    Dim objJSx, objJSy As Object
 
    Set objJSx = CreateObject("ScriptControl")      
    objJSx.Language = "JavaScript"                  
    jscode = "var json=" & mystring & ";"            
    objJSx.AddCode (jscode)
    For n = 1 To 80
        jscode = "var json_tr=json.traces[" & n - 1 & "];"
        objJSx.AddCode (jscode)
        If objJSx.CodeObject.json_tr = "" Then Exit For
        Set objJSy = objJSx.CodeObject.json_tr
        stime(n) = CallByName(objJSy, "acceptTime", VbGet)
        saddr(n) = CallByName(objJSy, "acceptAddress", VbGet)
        state(n) = CallByName(objJSy, "remark", VbGet)
        Debug.Print n & ":" & objJSy.acceptTime & objJSy.acceptAddress & objJSy.remark
    Next n
   
    If Left(state(n - 1), 2) = "妥投" Or Left(state(n - 1), 5) = "投递并签收" Then tt = "OK"
    get_trace_json1 = n - 1
End Function
搜索更多相关主题的帖子: state Left Then Function If 
2023-07-09 13:40
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
没看明白,代码不完整。
或者整一个大概意思的示例测试一下。
明白VBA在做什么,用VFP做出一样的结果就可以。

2023-07-09 14:52
sostemp
Rank: 4
等 级:贵宾
威 望:10
帖 子:202
专家分:284
注 册:2009-6-2
收藏
得分:0 
回复 2楼 吹水佬
谢谢,不好意思,发漏了点JSOn数据。
主要是用来解析下面JSON数据的两个不同方法的函数。

Json数据如下

TEXT TO cJson_test  TEXTMERGE NOSHOW PRETEXT 15
{"traces":[{"acceptTime":"2016-12-03 12:24:25","acceptAddress":"宿州市","remark":"宿州市邮政速递公司北区揽投部已收件(揽投员姓名:陆登杰,联系电话:18955780863)"},{"acceptTime":"2016-12-03 18:45:11","acceptAddress":"宿州市","remark":"离开宿州市 发往蚌埠市"},{"acceptTime":"2016-12-03 21:13:10","acceptAddress":"蚌埠市","remark":"到达蚌埠市处理中心(经转)"},{"acceptTime":"2016-12-03 21:14:29","acceptAddress":"蚌埠市","remark":"离开蚌埠市 发往南京市(经转)"},{"acceptTime":"2016-12-04 01:31:00","acceptAddress":"南京市","remark":"到达EMS航空集散中心(南京)处理中心(经转)"},{"acceptTime":"2016-12-04 06:34:00","acceptAddress":"南京市","remark":"离开南京市 发往北京市(经转)"},{"acceptTime":"2016-12-04 08:39:00","acceptAddress":"北京市","remark":"到达  中国邮政速递物流股份有限公司北京市邮件处理中心(航 处理中心"},{"acceptTime":"2016-12-04 11:22:04","acceptAddress":"北京市","remark":"离开中国邮政速递物流股份有限公司北京市国货航航空邮件处 发往北京邮政速递上地区域分公司清华营投部"},{"acceptTime":"2016-12-04 13:23:00","acceptAddress":"北京市","remark":"北京邮政速递上地区域分公司清华营投部安排投递,预计23:59:00前投递"},{"acceptTime":"2016-12-04 15:50:40","acceptAddress":"北京市","remark":"投递并签收,签收人:本人收"}]}
ENDTEXT
2023-07-09 15:51
nbwww
Rank: 8Rank: 8
等 级:贵宾
威 望:11
帖 子:332
专家分:804
注 册:2021-1-9
收藏
得分:0 
程序代码:
TEXT TO jsCode NOSHOW 
  var data_1={"traces":[{"accepttime":"2016-12-03 12:24:25","acceptaddress":"宿州市","remark":"宿州市邮政速递公司北区揽投部已收件(揽投员姓名:陆登杰,联系电话:18955780863)"},{"accepttime":"2016-12-03 18:45:11","acceptaddress":"宿州市","remark":"离开宿州市 发往蚌埠市"},{"accepttime":"2016-12-03 21:13:10","acceptaddress":"蚌埠市","remark":"到达蚌埠市处理中心(经转)"},{"accepttime":"2016-12-03 21:14:29","acceptaddress":"蚌埠市","remark":"离开蚌埠市 发往南京市(经转)"},{"accepttime":"2016-12-04 01:31:00","acceptaddress":"南京市","remark":"到达EMS航空集散中心(南京)处理中心(经转)"},{"accepttime":"2016-12-04 06:34:00","acceptaddress":"南京市","remark":"离开南京市 发往北京市(经转)"},{"accepttime":"2016-12-04 08:39:00","acceptaddress":"北京市","remark":"到达  中国邮政速递物流股份有限公司北京市邮件处理中心(航 处理中心"},{"accepttime":"2016-12-04 11:22:04","acceptaddress":"北京市","remark":"离开中国邮政速递物流股份有限公司北京市国货航航空邮件处 发往北京邮政速递上地区域分公司清华营投部"},{"accepttime":"2016-12-04 13:23:00","acceptaddress":"北京市","remark":"北京邮政速递上地区域分公司清华营投部安排投递,预计23:59:00前投递"},{"accepttime":"2016-12-04 15:50:40","acceptaddress":"北京市","remark":"投递并签收,签收人:本人收"}]};
endtext   

js = CREatEOBJECt("ScriptControl")
js.Language = "JavaScript"
js.addCode(jsCode)
json = js.CodeObject.data_1

*!*    ?js.eval("data_1.traces")  

CREatE CURSOR tt (accepttime c(30), acceptaddress c(30), remark c(200))

m.oSon=js.CodeObject.data_1.traces  
FOR EACH m.i IN m.oSon
    INSERt INtO tt VaLUES (m.i.accepttime, m.i.acceptaddress, m.i.remark)
ENDFOR
SELECt * FROM tt
2023-07-09 19:50
nbwww
Rank: 8Rank: 8
等 级:贵宾
威 望:11
帖 子:332
专家分:804
注 册:2021-1-9
收藏
得分:0 
就是要注意要把JSON中字段名称转换为小写字母  不然出错
2023-07-09 19:51
sostemp
Rank: 4
等 级:贵宾
威 望:10
帖 子:202
专家分:284
注 册:2009-6-2
收藏
得分:0 
回复 4楼 nbwww
谢谢您的回复,结果会提取。
但想要的是转化那2 个vba,并不是要结果,是想学学对照转化。
2023-07-09 20:10
easyppt
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:302
专家分:696
注 册:2021-11-24
收藏
得分:0 
以下是引用nbwww在2023-7-9 19:51:09的发言:

就是要注意要把JSON中字段名称转换为小写字母  不然出错


有个想法,不知道能否实现:
能不能先用 js 的正则表达式 查找和替换所有 字段属性的名称 为小写,然后 再正常用 js 解析啊?
这个 利用 js 正则表达式 替换 的代码,谁会写啊?
2023-07-10 14:25
sostemp
Rank: 4
等 级:贵宾
威 望:10
帖 子:202
专家分:284
注 册:2009-6-2
收藏
得分:0 
回复 7楼 easyppt
主要想要的是转化顶楼 2 个vba函数,目前未解决。
不是要获取结果,甚至用ⅴFP自带AIines都可提取结果。

JSOn数据只是供测试用,不过如何简洁高效通用的批替则是另一个知识点。
2023-07-10 21:01
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
其实与VBA关系不太,VFP也一样,到底也是调用JS脚本,两个函数实质没多大差别,只是表达方式有点不用,都是通过数组元素对象取数据。
2023-07-10 21:58
easyppt
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:302
专家分:696
注 册:2021-11-24
收藏
得分:0 
请教:nbwww
这段代码:
m.oSon=js.CodeObject.data_1.traces  
FOR EACH m.i IN m.oSon
    INSERt INtO tt VaLUES (m.i.accepttime, m.i.acceptaddress, m.i.remark)
ENDFOR

如果不用  FOR EACH 方式,怎么取出数据?
? m.oSon.accepttime
? m.oSon(1).accepttime
? m.oSon.item(1)
尝试通过 对象、数组、集合  都提示语法错误,取不出。

2023-07-11 15:26
快速回复:求助VBA转为VFP
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017999 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved