菜鸟浅谈IDL中format的用法、并举例
大家都知道IDL中的format的用法是非常重要的对于控制文件输出来说。
他的基本用法。网上很多。我不再列举。今天给师兄写了一个很简单 的程序,用来处理数据用的。给一些新手介绍下format函数的用法。
原始数据:
3590 1369 108 53 49 28 22 14
3591 1369 107 52 47 28 24 13
3592 1369 106 52 47 28 24 13
3585 1370 111 56 51 29 25 14
3586 1370 112 56 50 28 24 14
3587 1370 111 54 49 28 23 13
我师兄想在EXCEL表中求出每一行的均值,然后输出到下一行中。
因为数据量非常大。所有我写了一个程序来控制。
首先我们要把数据读进来
openr,lun,filepath,/get_lun
然后我们新建一个变量用来存储均值。
最后我们用来控制输出
OPENW,lun,filename[1],/GET_LUN,WIDTH=samples*20 ;filename[1]是存储的文件路径。width是控制输出长度的关键字。
这个关键字非常重要。因为我这里是浮点型的数据。所以我每一行的宽度都是数据的列数sample*width.
因为我想输出的结果是这个样子
所以for循环中每一次输出要输出一列原始数据。一列处理后的数据
FOR i = 0L, lines-1 DO BEGIN;利用for循环来控制输出
PRINTF,lun,data_a[*,i],format = '(8f)' ; 原始数据中有八列数据。所以每次我输出8个数。8就代表输出的次数。
PRINTF,lun,data_b[i],format = '(f)';而这里因为每次只需要输出一个数,所以这里默认是1.f代表输出的浮点型数据。当然你可以控制输出的数据类型,整形数据是i.
ENDFOR
FREE_LUN,lun;注意每次用完lun.一定要及时释放。
源码如下
;2018-8-6
;实现计算上一行的均值。输出到下一行并输出
;HPU:HuJibiao
PRO test_bill_e
COMPILE_OPT idl2
;***********输入行数、列数、文件路径************
filename = STRARR(2)
;输入文件路径
filename[0] = FILE_DIRNAME(ROUTINE_FILEPATH('test_bill_e'))+$
'\test.txt'
;输出文件路径
filename[1] = 'd:\data_file.txt'
samples = 8
lines = 51
;****************************
;**********读取数据并进行处理************************
;***********输入参数samples,和参数lines***************
data_a = FLTARR(samples,lines)
OPENR,lun,filename[0],/GET_LUN
READF,lun,data_a
FREE_LUN,lun
data_b = FLTARR(lines)
FOR i = 0L, lines-1 DO BEGIN
data_b[i] = TOTAL(data_a[*,i])/samples
ENDFOR
;******************data_b是处理后的文件****************
;**************data_a是原来的文件*********************
;****************控制输出*****************************
OPENW,lun,filename[1],/GET_LUN,WIDTH=samples*20
FOR i = 0L, lines-1 DO BEGIN
PRINTF,lun,data_a[*,i],format = '(8f)'
PRINTF,lun,data_b[i],format = '(f)'
ENDFOR
FREE_LUN,lun
print,'end all'
END
数据原图
输出后的结果看上图