idl中文件的读写
目录
idl中文件的读写 (1)
1.图像格式文件的读写 (1)
2.格式化文件读写 (1)
2.1读文件 (1)
2.2写文件 (1)
3.读写非格式化文件即二进制文件 (2)
4.读取带有文件头的非格式化文件 (2)
其实程序的目的是希望计算机能帮助自己处理一些复杂繁琐的事务,大部分需要处理的文件都是保存在磁盘中,如何利用程序从磁盘中读取文件和保存处理结果是编程者首先应该学习的,至于对于这些文件的处理方法,可以慢慢的学。
一般情况下,做遥感所处理的数据都是图像格式数据,另外一些是文本文件和二进制的文件。Idl集成了多个读取图像文件的命令,可以从idl帮助文件中查找这些读取图像文件的命令。
1.图像格式文件的读写
read_*
*代表图像文件类型,有一个通用的读取文件命令是read_image
write_*
保存文件的命令,同样有一个通用的write_image
但是在写文件时要注意文件中数据的类型,整型、浮点型还是字节型等等。
2.格式化文件读写
idl在读写格式化数据方面有两种格式化文件的区分:
自由文件格式自由格式文件用逗号或空白分开文件中的每个原始
确定的文件格式确定的文件格式是用格式说明按照给定的规范进行编排的
2.1读文件
ascii文件格式属于自由文件格式的一种,对于其读取可以采用read_ascii(),返回的是一个结构变量
data=read_ascii('aa.txt',data_start=5);其实数据是从第6行开始的,也就是在读取的时候跳过头文件部分
或者
filetemplate =ascii_template(file)
data =read_ascii('aa.txt',template=filetemplate)
其他的自由格式文件则直接可用readf读取
readf可以同时读取多个文件,将其放入到一个文件中。
IDL>ReadF, lun, header, data, vector
对于确定格式文件
应用format关键字即可
2.2写文件
printf即可写入
3.读写非格式化文件(即二进制文件)
非格式文件数据比格式化数据紧凑得多,经常用于大数据文件,对于这种文件的读写,通常采用 readu 和writeu
但是如果我们不知道
4.读取带有文件头的非格式化文件
有时一个文件包含有文件头信息,读取里面的数据需要绕过文件头。
对于头文件可将其看成是一个字符串。
pro readheaderfile,size=size
cd,'c:\'
; file =dialog_pickfile() ;读取头文件目录
print,file
openr,lun,file,/get_lun ;打开头文件,将其读入内存,赋予内部逻辑号lun
header =fstat(lun) ;fstat函数用来统计文件的信息,将其赋予一个结构变量
help,header ,/structure
print,header.size ;结构变量中的size即为文件的大小
size=header.size
free_lun,lun
end
pro readfile
cd,'c:\'
readheaderfile,size =size
;读取波谱文件
; file1 =dialog_pickfile() ;读取波谱文件目录
file1='spect1.txt'
print,file1
openr,lun,file1,/get_lun ;打开文件,将其读入内存,赋予内部逻辑号lun
point_lun,lun,size ; 定位到size处,有时候需要调整位置,如果数据前有空格也算一个字符
spect =findgen(2,3) ;定义输出文件的大小,2列3行的文件,可以根据数据大小随意设置
readf,lun ,spect ; 读取文件中的数据
print,spect
openw,lun,'c:\spect.txt',/get_lun; 建立一个输出文件
printf,lun,spect ;将数据保存到data.txt中
close,/all