Matlab按行读取数据的方法

来源:互联网 发布:生死狙击刷金币软件 编辑:程序博客网 时间:2024/06/07 11:01

最近要处理一些机械制造时用到的G代码,想要按行来读取,因为G1后面直接就是坐标,读取出来就很方便使用了。


处理的数据片段如下:

G90
G21
M103
M105
M106
M140 S60.0
M141 S30.0
M142 S0.0
M113 S1.0
M108 S210.0
M104 S200.0
G1 X-57.6 Y-30.312 Z0.72 F60.0
M101
G1 X-57.6 Y30.312 Z0.72 F240.0
G1 X-54.72 Y30.312 Z0.72 F240.0
...(都是G1了,所以省略了)
G1 X48.96 Y-30.312 Z0.72 F240.0
G1 X51.84 Y-30.312 Z0.72 F240.0
G1 X51.84 Y30.312 Z0.72 F240.0
G1 X54.72 Y30.312 Z0.72 F240.0
G1 X54.72 Y-30.312 Z0.72 F240.0
G1 X57.6 Y-30.312 Z0.72 F240.0
G1 X57.6 Y30.312 Z0.72 F240.0
M103
M108 S210.0
G1 X-57.636 Y0.0 Z1.18 F960.0
M101

G1 X57.636 Y0.0 Z1.18 F960.0

G1 X57.636 Y-1.44 Z1.18 F960.0
G1 X-57.636 Y-1.44 Z1.18 F960.0
G1 X-57.636 Y-2.88 Z1.18 F960.0
G1 X57.636 Y-2.88 Z1.18 F960.0
G1 X57.636 Y-4.32 Z1.18 F960.0
G1 X-57.636 Y-4.32 Z1.18 F960.0
G1 X-57.636 Y-5.76 Z1.18 F960.0

....

以上文件存为“test.txt”

处理:


结果:


特别提醒两个函数的用法:

1. strncmp    比较两个字符串前n个字符是否相等,是,返回真,否则,返回假 

我一开始用的是strcmp,由于g代码中的M101与M103那一行的格式并不完全一致,有的在这四个字符后加了空格,有的好像加了回车符,特别不好处理。好在这里只需要以前四个字符作为标志就可以判断了,所以strncmp非常适合。

2. fgets

可以用于一行一行地读取,类似的还有fgetl。


代码解释:

以上代码中的设计思想,最重要的是按行读取之后,以X为标志开始坐标的读取,只要读入的字符在0到9之间或者是负号或者小数点就读入,如果不是则跳过。

以上代码处理坐标读入时,一开始写了X, Y, Z分别处理的三个类似的if加上while的片段,但是只有第一个if被执行,后面的两个if好像都没起作用,怀疑是坐标之间有奇怪字符使得无法运行。现在正常工作的这个代码也不是最高效的,第31行的while与第36行的只相差一个~,其实可以合并的,但是这又要识别X, Y, Z了,又有点麻烦了。暂时先就这样吧。




0 0
原创粉丝点击