写文件
filename="/home/allen/sample"
openw,1,filename,/F77_UNFORMATTED
a=[1L,3L,5L,7L,9L,11L,19L]
writeu,1,a
writeu,1,a
close,1
end
得到的sample文件应该保存了下面这个array:
28 1 3 5 7 9 11 19 28 28 1 3 5 7 11 19 28
, 共 72 bytes , 其中 4 个28 应该是 ULong 的类型, 或者说C语言中的 unsigned int 类型, 但是因为是不大的正数, 编码和Long型的28是一样的, 简单地说就是 LonArr(9)+LonArr(9)
当做普通二进制
文件读
filename="/home/allen/sample"
openr,2,filename
a=lonarr(5)
b=lonarr(5)
readu,2,a
print,a
readu,2,b
print,b
close,2
end
IDL> .go
% Compiled module: $MAIN$.
28 1 3 5 7
9 11 19 28 28;这是我们容易理解的, 就只是把二进制数字罗列下去, 读到哪里, 停在哪里, 下一次读, 从这里开始.
;从这里也容易看到, F77_UNFORMATTED的格式不过是每次读写数据都要注意到始末位置都包含了一个表示数据总量的校验值
以F77_UNFORMATTED
格式打开读
filename="/home/allen/sample"
openr,2,filename,/F77_UNFORMATTED
a=lonarr(5)
b=lonarr(5)
readu,2,a
print,a
readu,2,b
print,b
close,2
end
IDL> .go
% Compiled module: $MAIN$.
1 3 5 7 9
1 3 5 7 9;第一次读完停在9后面, 正常讲下一次读应该从11开始读入, 但这里不是, 它会从下一个检查点开始读, 也就是说, 这次读完, 不管读入了几个(变量的总容量超出实际数据量的话立即报错, 否则没关系, 所以是小于等于的关系), IDL会根据第一个检查点的数值直接调到合适的位置(即下一个初始检查点的位置)