C#通过批处理来调用Matlab和R语言 为什么格式会乱七八糟???

一,批处理Matlab
Step1.编写temp.m例子程序在D盘根目录下,功能将传入的参数写到D:\\Data.txt文件里
function A=temp(n, m)
fid=fopen('D:\\Data.txt','a+');
fprintf(fid,'%d',n);
fprintf(fid,'%d',m);
fprintf(fid,'Hello,Tim\r\n');
fclose(fid)
Step2:编写Matlab命令D:\\run.bat,功能调用运行temp.m文件matlab -nojvm -nodesktop -nosplash -r cd('d:\');temp(1,2)大家一眼就应该看明白格式意义Step3.编写C#调用.bat,运行即可看到D:\\Data.txt文件的生成,查看内部应该有12内容
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
namespace CSharpMatlab
{
    class Program
    {
        static void Main(string[] args)
        {
            string appName = "D:\\run.bat";//path
            Process proc = Process.Start(appName);
            proc.WaitForExit();
        }
    }
}
二,批处理R语言Step1:编写.R示例程序Kriging.R,意思就是输出所有的传入变量
Args <- commandArgs()
for (i in 1:length(Args))
{
  print(Args[i])
}
Step2:编写下面是我处理程序时用的批处理代码Run.bat:这里只对R的格式进行介绍,--slave是不显示缓存输出的意思;<Kriging.R代表输入文件;>1.txt代表输出文件 ;--args代表后面跟的是参数; 带%夹着的是变量,不带的是字符串变量
set FolderPathForPM25=%~dp0PM25
set RegionId=001
set startTime=2013-01-01
set endTime=2013-10-20
set stationNumber=22
set SavePathForPM25=%~dp0Rout\PM25
R --slave <Kriging.R >1.txt --args %RegionId% %stationNumber% %startTime% %endTime% %FolderPathForPM25% %SavePathForPM25% PM25 Lin
Step3:把两个文件放在一个目录下,手动或程序运行.bat,有问题cyb3727@gmail.com
三,注意1.R和Matlab你得先装好吧,这是第一点。2.环境变量Path得设置。检验很简单,在cmd.exe分别输入matlab和R看有无反应,提示没有这个命令,自个加上。不用bat直接cmd:http://www.legalsoft.com.cn/docs/838.html
四.关于程序同步问题
这种批处理传递参数肯定是:
输入:直接写字符串或者传递文件路径
输出:写文件
异步实现:
1.cmd中的命令都是异步的
2.Process Start后肯定是异步的
同步实现:
1.写成.bat,对于普通应用程序Process WaitForExit就会等待现成结束才会继续执行
2.对于需要中间进程实现执行的进程,如我们是启动matlab应用程序去执行.m文件,这时候即使写成.bat,Process WaitForExit,C#也不会等待.m进程结束才执行,
原因很好理解。这个Process不是.m那个process,那么我们如何实现进程同步呢?
方法很简单,但是很通用:所有的文件输出写成一个temp.txt,在文件写完之后修改文件名为如:output.txt,那么C#应用程序只需要判断是否存在output.txt这个程序
就行,有就可以继续往下执行了。但让对于轻量级频繁输出,这个方法就不好了,因为这样频繁文件读写速度堪忧。
     
     




















  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值