vbs与其他语言进行交互编程(外存传参)

vbs没有自定义排序函数。无需自己造轮子,可以用其他语言来完成这个任务(在传递数据比较简单的情况下,例如只传递数组)。

首先用5分钟写一个C++排序的代码。命名为“mysort.cpp”:

#include<bits/stdc++.h>

using namespace std;

int main(int argc,char * argv[]){
    freopen("val.txt","w",stdout) ;    //重定向输出
    vector<int> v;
    int t;
    for(int i=1;i<argc;i++){    //从命令行参数中获取变量
        sscanf(argv[i],"%d",&t);
        v.push_back(t);
    }
    sort(v.begin(),v.end());
    for(int i=0;i<v.size();i++){
        printf("%d ",v[i]);
    }
    return 0;
}

编译并测试之后,开始编写vbs代码。

这里借用昨天编写的vbs的vector类:

class Vector
    Private length
    public data()
    Sub Class_Initialize()
        length=0
    End Sub
    ‘插入元素‘
    public Function Add (byval x)
        length=length+1
        redim preserve data(length-1)
        data(length-1)=x
    End Function
    ‘快速展示‘
    public Function display()
        dim i
        dim s
        for i=0 to length-1
            s=s & cstr(data(i)) & " "
        next
        msgbox s
    End Function
    ‘返回大小‘
    public Function size()
        size= length
    End Function
    ‘获取元素‘
    public Function getAt (byval pos)
        if pos<0 or pos>length-1 then
            getAt=0
            exit Function
        end if
        getAt=data(pos)
    End Function
    ‘删除元素‘
    public Function delAt (byval pos)
        if pos<0 or pos>length-1 then exit Function ‘注意退出函数的表达式‘
        dim i
        for i=pos to length-2
            data(i)=data(i+1)
        next
        length=length-1
        redim preserve data(length-1)
    End Function
    ‘插入元素‘
    public Function insert (byval pos,byval elem)
        if pos<0 or pos>length-1 then exit Function
        dim i
        length=length+1
        redim preserve data(length-1)
        for i=length-1 to pos+1 step -1
            data(i)=data(i-1)
        next
        data(pos)=elem
    End Function
end class

vector类

注意到外存传参这个操作可以抽象拿出来作为一个函数。编写extendProcess函数

public Function extendProcess (byval exe,byval arr) ‘程序名、数组‘
    dim i
    dim cmd
    cmd=exe
    For i=0 To ubound(arr)
        cmd=cmd & " " & arr(i)
    Next
    dim objShell    ‘执行命令‘
    Set objShell = CreateObject("Wscript.Shell")
    objShell.Run(cmd)
    ‘读入输出文件val.txt‘
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set file = fs.OpenTextFile("val.txt", 1, false)
    info=file.readall
    file.close
    set fs=nothing
    ‘处理信息‘
    extendProcess=split(info)    ‘用空格分隔‘
End Function

(在这里,程序名可以是cpp编译出来的exe,也可以是java字节码,调用方法:java 主类,也可以是python代码,调用方法: python scrip.py,甚至可以是MATLAB脚本,这里不赘述)

然后我们来愉快的测试吧,看看效果:

测试代码:

set v = new Vector
v.Add 1
v.Add 3
v.Add 5
v.Add 4
v.Add 6
v.Add 4
v.Add 7
v.Add 8
ans=extendProcess("mysort",v.data)    ‘如果函数有返回,就必须要有括号。如果无返回,并且参数数目大于1,不能带括号‘
set v2 = new Vector
for each x in ans
    v2.Add x
next
v2.display

测试效果:

完整代码:

class Vector
    Private length
    public data()
    Sub Class_Initialize()
        length=0
    End Sub
    ‘插入元素‘
    public Function Add (byval x)
        length=length+1
        redim preserve data(length-1)
        data(length-1)=x
    End Function
    ‘快速展示‘
    public Function display()
        dim i
        dim s
        for i=0 to length-1
            s=s & cstr(data(i)) & " "
        next
        msgbox s
    End Function
    ‘返回大小‘
    public Function size()
        size= length
    End Function
    ‘获取元素‘
    public Function getAt (byval pos)
        if pos<0 or pos>length-1 then
            getAt=0
            exit Function
        end if
        getAt=data(pos)
    End Function
    ‘删除元素‘
    public Function delAt (byval pos)
        if pos<0 or pos>length-1 then exit Function ‘注意退出函数的表达式‘
        dim i
        for i=pos to length-2
            data(i)=data(i+1)
        next
        length=length-1
        redim preserve data(length-1)
    End Function
    ‘插入元素‘
    public Function insert (byval pos,byval elem)
        if pos<0 or pos>length-1 then exit Function
        dim i
        length=length+1
        redim preserve data(length-1)
        for i=length-1 to pos+1 step -1
            data(i)=data(i-1)
        next
        data(pos)=elem
    End Function
end class

public Function extendProcess (byval exe,byval arr) ‘程序名、数组‘
    dim i
    dim cmd
    cmd=exe
    For i=0 To ubound(arr)
        cmd=cmd & " " & arr(i)
    Next
    dim objShell    ‘执行命令‘
    Set objShell = CreateObject("Wscript.Shell")
    objShell.Run(cmd)
    ‘读入输出文件val.txt‘
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set file = fs.OpenTextFile("val.txt", 1, false)
    info=file.readall
    file.close
    set fs=nothing
    ‘处理信息‘
    extendProcess=split(info)    ‘用空格分隔‘
End Function

set v = new Vector
v.Add 1
v.Add 3
v.Add 5
v.Add 4
v.Add 6
v.Add 4
v.Add 7
v.Add 8
ans=extendProcess("mysort",v.data)    ‘如果函数有返回,就必须要有括号。如果无返回,并且参数数目大于1,不能带括号‘
set v2 = new Vector
for each x in ans
    v2.Add x
next
v2.display

‘ dim objShell
‘ Set objShell = CreateObject("Wscript.Shell")
‘ objShell.Run("%comspec% /k ipconfig /all")

完整vbs代码

原文地址:https://www.cnblogs.com/TQCAI/p/8877098.html

时间: 2024-11-09 03:14:03

vbs与其他语言进行交互编程(外存传参)的相关文章

Android—android与js交互以及相互传参

Android中可以通过WebView来实现与js的交互,让用户可以在android客户端看到js写的页面,接下来为大家介绍的就是怎样实现此功能: 首先android项目目录下有“assets”文件夹,开发者需要将html文件拷贝到此文件夹下. html代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-tra

C/C++语言中的函数参数传参三种对比

学了很长时间C/C++有时指针方面还是有点乱. 希望大神发现如果下面有不对的地方请指出.我发现之所以我乱就是因为中文表述不准确的问题,比如 ,地址值和地址 #include <iostream> #include <string> using namespace std; void swap1(string* str1,string* str2){// 1.对象指针作为函数参数 //影响实参 cout<<&str1<<" "<

flash与php 交互(as传参给php)

一种 不传参 直接读取PHP文件 btn.addEventListener(MouseEvent.CLICK,loadTxt);function loadTxt(evt:MouseEvent):void{        var urlLoader:URLLoader=new URLLoader();                urlLoader.dataFormat=URLLoaderDataFormat.VARIABLES;        urlLoader.load(new URLReq

C# 多线程编程,传参,接受返回值

今天将多线程的知识有回顾了下,总结了几点: 新建一个线程(无参数,无返回值) Thread th = new Thread(new ThreadStart(PrintName)); public  void PrintName()    // 函数 { //函数体 } 这里一定注意ThreadStart中的函数是没有返回值和参数的 那么有参数时,就该如下: Thread th = new Thread(new ParameterizedThreadStart(PrintName)); publi

浅谈C语言嵌入式系统编程注意事项

C语言嵌入式系统编程注意事项之背景篇 本文的讨论主要围绕以通用处理器为中心的协议处理模块进行,因为它更多地牵涉到具体的C语言编程技巧 不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑,汇编语言具备这样的特质.但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发的一般选择.而与之相比,C语言--一种"高级的低级"语言,则成为嵌入式系统开发的最佳选择.笔者在嵌入式系统项目的开发过程中,一次又一次感受到C语言的精妙,沉

C语言嵌入式系统编程修炼

C语言嵌入式系统编程修炼 ?? 2008-08-19 作者:宋宝华 来源:天极网 ?? C语言嵌入式系统编程修炼之背景篇 本文的讨论主要围绕以通用处理器为中心的协议处理模块进行,因为它更多地牵涉到具体的C语言编程技巧 不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑,汇编语言具备这样的特质.但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发的一般选择.而与之相比,C语言--一种"高级的低级"语言,则成为嵌入式系

extern &quot;C&quot; 的含义:????实现C++与C及其它语言的混合编程

C++中extern "C"的设立动机是实现C++与C及其它语言的混合编程. C++为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同.对于函数void foo( int x, int y );该函数被C编译器编译后在符号库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字. extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用. 通常,在模块的头文件中对本

试读《JavaScript语言精髓与编程实践》

有幸看到iteye的活动,有幸读到<JavaScript语言精髓与编程实践_第2版>的试读版本,希望更有幸能完整的读到此书. 说来读这本书的冲动,来得很诡异,写一篇读后感,赢一本书,其实奖励并不大,依靠纯粹的物质奖励,很显然,不会强烈的促使我去读这本书.而原因在于,一方面对javascript的极大兴趣,另一方面之前已经拜读过如<javascript高级程序设计><高性能javascript><javascript设计模式>等书,那我就有了要看看这本书都写了

Objective-C语言介绍 、 Objc与C语言 、 面向对象编程 、 类和对象 、 属性和方法 、 属性和实例变量

Objective-C语言介绍 . Objc与C语言 . 面向对象编程 . 类和对象 . 属性和方法 . 属性和实例变量 1 第一个OC控制台程序 1.1 问题 Xcode是苹果公司向开发人员提供的集成开发环境(非开源),用于开发Mac OS X,iOS的应用程序.其运行于苹果公司的Mac操作系统下. 本案例要求使用集成开发工具Xcode编写OC的HelloWorld程序,在Xcode的控制台中, 1.2 方案 首先,启动集成开发工具Xcode. 然后,创建OC语言的工程. 最后,运行所创建的工