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

如何用matlab修改文件中某些内容

[复制链接]
发表于 2010-9-28 00:10:05 | 显示全部楼层 |阅读模式 来自 意大利
悬赏15仿真币已解决
本帖最后由 lx2007 于 2010-9-28 00:11 编辑

请问,如何用maltab修改某个文件中内容。

就好比我有个文件(python程序)
。。。。。。。。。。。。。。
。。。。。。。。。。。。。。
a.translate(instanceList=('fixture-1', ), vector=(0.8, , 0.0,0.004))
。。。。。。。。。。。。。。。。。。。。。。。。。。
a.translate(instanceList=('fixture-2', ), vector=(0.0, 0.0, 0.004))
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
a.translate(instanceList=('fixture-1', ), vector=(0.0, 0.0, -0.004))
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
我想用matlab传递参数来修改vector的坐标值,准备把vector 后面括号中的值用x,y,z代替,但是因为不知道怎么用matlab给python传递参数。所以想到了
直接修改文件的这个办法。但是也不知道怎么弄,请高手出来指点下么?谢谢

最佳答案

查看完整内容

希望这段代码对你有所启发和帮助,程序中的文件在附件中 如果代码比较有规律的话,可以用textscan或者fseek等
发表于 2010-9-28 00:10:06 | 显示全部楼层 来自 河北廊坊
Simdroid开发平台
本帖最后由 qibbxxt 于 2010-9-28 13:45 编辑

希望这段代码对你有所启发和帮助,程序中的文件在附件中

  1. clear;clc;close all
  2. x=1.8;y=2.6;z=-3.7;
  3. fid1=fopen('p2.txt','r+');
  4. fid2=fopen('p3.txt','w+');
  5. for i=1:3
  6.     tline = fgetl(fid1);
  7.     [token{1}, tline] = strtok(tline,',');
  8.     [token{2}, tline] = strtok(tline,',');
  9.     [token{3}, tline] = strtok(tline,'(');
  10.     tline=sprintf('(%f,%f,%f))',x,y,z);
  11.     a=strcat(token{1},token{2},token{3},tline);
  12.     fprintf(fid2,'%s\n',a);
  13. end
  14. fclose(fid1);
  15. fclose(fid2);
复制代码

如果代码比较有规律的话,可以用textscan或者fseek等

本帖子中包含更多资源

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

×
回复

使用道具 举报

 楼主| 发表于 2010-9-28 23:14:38 | 显示全部楼层 来自 意大利
2# qibbxxt
谢谢版主,这个已经接近解答问题了。只是我对matlab这些了解的太少了。我的这三行代码分别在 164行,170行,178行。

这样的话,我应该怎么来修改呢?谢谢
回复

使用道具 举报

发表于 2010-9-29 08:51:18 | 显示全部楼层 来自 河北廊坊
3# lx2007
可以用
  1. tline = fgetl(fid1);
复制代码
循环n次来跳过n行
如:

  1. for j=1:163
  2.     fgetl(fid1);
  3. end
  4. tline = fgetl(fid1);% 第164行
复制代码

评分

1

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2010-9-30 16:55:36 | 显示全部楼层 来自 意大利
4# qibbxxt

clear
x=1.8;y=2.6;z=-3.7;
fid1=fopen('fixture_layout_plate.py','r+');
fid2=fopen('fixture_layout_plate1.py','w+');
for j=1:163
    fgetl(fid1);
end
tline = fgetl(fid1);
[token{1}, tline] = strtok(tline,',');
[token{2}, tline] = strtok(tline,',');
[token{3}, tline] = strtok(tline,'(');
tline=sprintf('(%f,%f,%f))',x,y,z);
a=strcat(token{1},token{2},token{3},tline);
    fprintf(fid2,'%s\n',a);
fclose(fid2);

这段代码运行下来的结果就是把原文件中的第164行取出来放在了 fixture_layout_plate1.py 这个文件中,并把那一行做了修改。

可是我的希望新的文件中不只是只有这一行,也有原文件中的其他程序,这样的话,怎么来修改下呢?

谢谢版主,我学机械的,对matlab这些操作了解的很少,简单的数学运算画图还行,这样的应用就搞不明白了。
回复

使用道具 举报

 楼主| 发表于 2010-10-5 22:17:36 | 显示全部楼层 来自 意大利
人呢?国庆节都出去玩了??

评分

1

查看全部评分

回复

使用道具 举报

发表于 2010-10-6 09:12:17 | 显示全部楼层 来自 四川成都
6# lx2007
你把你在5#楼的写文件操作像qibxxt在2#的回答一样,放在循环体内,然后根据你文件里面要修改行的特殊格式加一个条件判断语句就可以了,就是if-elseif-end语句。
回复

使用道具 举报

 楼主| 发表于 2010-10-6 22:50:05 | 显示全部楼层 来自 意大利
对此问题结贴,在一个师兄的帮助下,找到了更简单的方法,谢谢版主的帮助:(代码如下)

clear
x=1.8;y=2.6;z=-3.7;
fid1=fopen('fixture_layout_plate.py','r+');
fid2=fopen('fixture_layout_plate1.py','w+');
nline=0;
while ~feof(fid1)
tline = fgetl(fid1);
nline=nline+1;
if nline==164
[token{1}, tline] = strtok(tline,',');
[token{2}, tline] = strtok(tline,',');
[token{3}, tline] = strtok(tline,'(');
tline=sprintf('(%f,%f,%f))',x,y,z);
a=strcat(token{1},token{2},token{3},tline);
    fprintf(fid2,'%s\n',a);
else
fprintf(fid2,'%s\n',tline);
end
end
fclose(fid1);

fclose(fid2);

评分

1

查看全部评分

回复

使用道具 举报

发表于 2010-11-10 10:15:55 | 显示全部楼层 来自 山东济南
这样岂不是得到一个新文件?不能在源文件更改?谢谢,您的程序是matlab的程序吧?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 19:18 , Processed in 0.055819 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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