找回密码
 注册
Simdroid-非首页
查看: 68|回复: 4

读取另一个文件中的若干行文本,作为命令来执行,可否?

[复制链接]
发表于 2016-11-23 23:08:53 | 显示全部楼层 |阅读模式 来自 北京
比如说脚本文件abc.m内容为:
  1. clear %第1行
  2. clc
  3. %
  4. a=5;
  5. b=12;   
  6. c=cos(a+... %第6行
  7.     b);
  8. f=sin(a+b);
复制代码


另一个脚本文件def.m,这个脚本文件读取abc.m的第4到7行,并且当做命令来执行,执行后,当然可以在workspace中查看到变量a,b,c的值。

最初想到eval,但是对于有换行的情况,如abc.m的第6、7行,eval不行。


发表于 2016-11-24 23:53:12 | 显示全部楼层 来自 英国
Simdroid开发平台
  1. tmpStr = strsplit(fileread('abc.m'), '\n');
  2. eval([tmpStr{4:7}])
复制代码
回复 不支持

使用道具 举报

 楼主| 发表于 2016-11-25 23:18:48 | 显示全部楼层 来自 北京
我的matlab版本比较低,没有strsplit。按你的提示,采用下面代码读出abc.m的内容
  1. FID=fopen('abc.m','r');
  2. str=[];
  3. loop=1;
  4. while loop   
  5.   s=fgetl(FID);
  6.   if s==-1
  7.     loop=0;
  8.   else
  9.     str=[str;{s}];
  10.    end   
  11. end
  12. fclose(FID);
复制代码
若直接采用eval([str])不行。若要运行,还需要有两个操作
一是,删除换行标记“...”
二是,每行后面需要插入一个空格

谢谢!



回复 不支持

使用道具 举报

 楼主| 发表于 2016-11-25 23:20:44 | 显示全部楼层 来自 北京
本帖最后由 pacoyang 于 2016-11-25 23:22 编辑

有了上面连个措施,将abc.m改为如下代码,4到11行也能运行。
  1. clear
  2. clc
  3. %
  4. a=5;
  5. b=12;
  6. c=a+...
  7.     b;
  8. if 2>1
  9.     disp('ok');
  10. end
  11. f=sin(a+b);
复制代码
回复 不支持

使用道具 举报

发表于 2016-11-30 00:23:55 | 显示全部楼层 来自 英国
没有strsplit的话直接用regexp也行,
  1. tmpStr = regexp(fileread('abc.m'), '[^\n]+', 'match');
  2. eval([tmpStr{4:11}])
复制代码
回复 不支持

使用道具 举报

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

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-27 01:08 , Processed in 0.031804 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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