今天主要把原来的程序整理了一遍,思路清晰多了,程序看起来也美观了。
另外一个主要工作,是让程序能够自己一次跑完几千的数据,不会像上次那样,经常跑到几百条,这样那样的原因奔溃了。总结来看,主要有两个原因导致程序的奔溃:
1、有些光谱数据,红移太大,退红移后的数据可能还未达到所需要的窗口数据,无法截取数据出来拟合,即所谓的:Index exceeds matrix dimensions.
2、第二个原因让我有点奔溃,每次程序批量运行开始没问题,但是运行到两三百条数据的时候,就会程序奔溃,提示是:文件无法读取,matlab openFile at 695。明明文件有,并且提示出错的单个文件直接运行是完全可以的,怎么回事?而且需要关掉MATLAB才能够重新运行程序,很是惊讶。上网查matlab openFile at 695也未果。后来才发现,原来原因非常简单,在调试的时候,我看了fopen,我立刻想到,要运行几百条后才出现问题,是不是打开的文件描述符太多有问题,如果是这个问题的话,很可能我忘记fclose了,果然,问题迎刃而解!
呵呵,没想到今天还被fclose给玩了一把,不过让我想起了读研时候上的UNIX课程,对于文件描述符,文件i节点还是印象比较深刻的。不过让我更加体会到,写程序,别看一个小细节你当时没发现,并且也不是致命的错误,但是,或许在某个时候,他会爆发的,你一定要注意,并且注意一个程序员的习惯,又让我想起喜剧之王里面的一个演员的自我修养,哈哈,扯远了。
此外,程序没有再奔溃的另一个主要工作是使用了try...catch...end,以及print lasterr错误输出处理,这样批量跑程序,可以把出错的小部分挑拣出来,慢慢看为什么出错,特殊在哪里,而正常的大部分数据,以后就不用跑了。
被fclose忽悠了,try...catch...end及lasterr
最新推荐文章于 2023-12-16 13:50:24 发布