IDL读写操作

一、标准输入输出格式

(1)调用格式:

IDL>print, variabie,format='(格式)'
aN       开始为数据类型,a-字符串,i-整数,f-单精度浮点型,d-双精度浮点型,e-科学计数法
iN(.M)   N为输出字符宽度
fN(.M)   M为小数点后位数
dN(.M)
eN(.M)
Nx       为输出N个空格
/        换行

(2)输出默认为右对齐,可加入负号变为左对齐

(3)可控制设置多个输出格式:format='(**,**)'。如果要使用相同格式:format='(ciN.M)',c为使用相同格式代码的变量个数

(4)read默认为浮点型,要读取其他类型数据,必须实现创建该变量。


二、文件操作

(1)文件的打开与关闭,需要通过逻辑设备号完成,一个文件对应一个逻辑设备号。IDL可用128个逻辑设备号,1-99可以直接指定使用,100-128号可以通过get_lun和free_lun命令来获取和释放。为了方便使用,通过使用get_lun和free_lun命令来动态设置逻辑设备号

(2)文件操作:IDL>操作,lum,fname,/get_lun。参数lun为逻辑设备号变量,fname为文件名,关键字get_lun分配一个没有使用过的逻辑设备号给lun。操作有openr-读操作,openw-写操作,openu-读写操作

(3)文件的选择

IDL>cd[, directory(字符串)][,current=variable(可获得当前的工作路径名]
result=dialog_pickfile([/directory(加上选择文件夹,不加则选择文件)][,filter=string(如'*txt')][,title=string(对话框标题)][,get_path=variableA(获取路径)][,path=string(设置选择文件的初始所在路径)])

①如加上/directory,则result=variableA;②path=string,这个string是自己设置的,可以设置搜索对话框打开后所处于的文件夹

(4)文件查询

语句:IDL>result=file_search(path(字符串),recur_pattern(文件名查询条件) [,count=variable(查询出的数量赋给variable)] [, /test_directory(如加上则只查出文件夹),/test_regular(如加上则只查出文件)] )     result类型为一个字符串数组

①recur_pattern的几种典型形式

IDL>fns=file_search('*')  ;返回全部文件
IDL>fns=file_search('*a*') ;返回所有文件名中带a的文件
IDL>fns=file_search('*.{txt,ppt}') ;返回txt与ppt后缀的文件
IDL>fns=file_search('[a~b]*.txt') ;返回开头为a或b
IDL>fns=file_search('') ;待补充

②获取一个目录内所有的ENVI文件名
pro get_envi_tiff_filenames
  
  work_dir=dialog_pickfile(/directory)
  cd,work_dir
  fns=file_search('*.tif',count=fnums)
  ENVI_fns=strarr(fnums)
  for i=0,fnums-1 do begin
    ENVI_fns[i]=strmid(fns[i],0,strlen(fns[i])-4)   
  endfor
  print,ENVI_fns,format='(a)'
  ;format使用的一些小发现 1、如果不加则ENVI_fns中的数一个接一个输出,2、如果加了,则一行输出一个
end

(5)其他文件操作

IDL>result=file_lines(fname)
IDL>result=fstat(lun)
;UNIT:文件对应的逻辑设备号
;NAME:绝对路径的文件名
;READ:文件是否为读状态
;CUR_PTR:文件指针指向的位置
;SIZE:文件大小
IDL>point_lun,lun,position;可以修改finfo.cur_ptr所指向的位置
IDL>result=eof(lun)判断文件指针是否已经到了文件的末尾,是为1

(6)ASCII码文件读写

;读取
fn=dialog_pickfile()
openr,lun,fn,/get_lun
data=intarr(2,5)
readf,lun,data   ;语法 readf,lun,var1。。。
free_lun,lun
;如果设置的存储读取结果的变量容量超过了文件数据量,会报错
;如果设置的存储读取结果的变量容量小于文件数据量,则只读到存满为止

(7)读写图像文件

①文件查询

result=query_image(fname[,info]  [,channels=var]  [,dimensions=var]  [,pixel_type=var]  [,type-var]  [,has_palette=var]  [,image_index=index]  [,num_images=var]  )

fname:文件名,字符串

info:返回图像的基本信息,包含后面的那些东西,结构体变量

channels:波段数,整形

dimensions:行列数,2个元素的数组

pixel_type:像素类型,整形指代的数据类型

has_palette:真彩色为0,假彩色为1

image_index:图像在文件中的索引号

type:图像文件类型,字符串

②读取图像文件

img=read_image(fname)返回一个三维数组[波段数,列数,行数]。灰度图像只有行列数,波段顺序有BIP、BSQ两种

result=dialog_read_image([,image=img]  [,query=info]  [,file=fn]  [,filter_type=string]  [,get_path=var]  [,path=string]  [,title=string]  )

后面内容与dialog_pickfile相同,差异:img存放图像,info存放图像信息,fn存文件名,result返回1代表成功读取,0为失败

query_image,read_image,write_image都有对应特定格式的read_tiff等

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值