【IDL】批处理遇到错误时处理方法

您所在的位置:网站首页 批处理跳过错误 【IDL】批处理遇到错误时处理方法

【IDL】批处理遇到错误时处理方法

2024-05-20 19:59| 来源: 网络整理| 查看: 265

很多童鞋喜欢用IDL进行批处理,而文件输入列表一般都采用file_search函数进行自动搜索(此函数详见 https://www.cnblogs.com/enviidl/p/16356480.html)。但是在某一个文件读写出错时,程序就会停止运行,而无法处理之后的数据。其实,在IDL中有完善的错误处理机制,具体可参考帮助中的Routines (by topic) > Error Handling章节。

这里使用Catch来实现错误处理,主要功能为:

遇到文件读取错误时,跳过本文件,继续处理后续文件; 可在控制台(或日志文件)中输出错误状态和信息。

为了模拟数据读取错误,这里新建了5个文本文件,其中1、2、4、5均为4列2行的整型数组,而3号文件为字符串,所以在读取时会遇到错误。

完整代码如下:

PRO testCatch

  COMPILE_OPT idl2

 ;输入搜索路径,并搜索txt文件

 path=FILE_DIRNAME(ROUTINE_FILEPATH('testCatch'))+$

    PATH_SEP()+'TestFiles'

  files=FILE_SEARCH(path, '*.txt', COUNT=count)

  IF count EQ 0 THEN RETURN

  ;开始批处理

  FOR i=0,count-1 DO BEGIN

   ;进行错误捕捉

   CATCH, errorStatus

   IF (errorStatus NE 0) THEN BEGIN

     CATCH, /CANCEL

     ;控制台输出错误消息

     PRINT, '读取文件出错:', !ERROR_STATE.MSG

     ;释放出错文件

     FREE_LUN, lun

     ;跳过本次循环

     CONTINUE

   ENDIF

  ;数据读取,因为data初始化为整型数组,在读取file3.txt时会出错

  OPENR, lun, files[i], /GET_LUN

 data = INTARR(4,2)

  READF, lun, data

  FREE_LUN, lun

  ;读取成功时,在控制台打印消息

 PRINT, '读取文件成功:', files[i]

  ENDFOR

END

注:代码中的输入路径为PRO文件所在路径的"TestCatch"文件夹。源码编码为GB2312。

控制台输出信息如下:

读取文件成功:D:\IDLWorkspace84\Default\TestCatch\file1.txt

读取文件成功:D:\IDLWorkspace84\Default\TestCatch\file2.txt

读取文件出错:READF: Input conversion error. Unit: 123, File: D:\IDLWorkspace84\Default\TestCatch\file3.txt

读取文件成功:D:\IDLWorkspace84\Default\TestCatch\file4.txt

读取文件成功:D:\IDLWorkspace84\Default\TestCatch\file5.txt

 

测试代码下载地址:http://pan.baidu.com/s/1o6yWHBk

将下载的ZIP压缩包解压即可,保证PRO文件与"TestFiles"文件夹在同一路径即可。

 

除此之外,还有另外一种处理错误的方法。比如在使用ENVI 5.x新增的面向对象方法时,可以使用ERROR关键字来接收出错信息,从而Continue跳过循环。调试如下:

IDL> ;启动ENVI

IDL> e=envi()

ENVI> ;定义一个不存在的文件路径

ENVI> file='D:\abc.dat'

ENVI> ;打开栅格图像,使用ERROR关键字

ENVI> Raster=e.OpenRaster(file, ERROR=err)

ENVI> ;通过判断err是否为空进行错误处理,err不为空时即读取出错

ENVI> if err ne '' then print, '读取出错,错误提示为:'+err

读取出错,错误提示为:Unable to connect to the specified dataset. http://D/abc.dat

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3