alex_bn_lee

导航

【222】◀▶ IDL 输入输出函数说明

参考:I/O - General Input/Output Routines —— 基本输入输出函数


01   PRINT/PRINTF 格式化输出。
02   READ/READF 格式化输入。
03   READS 从字符串中读取格式化数据。
04   Format Codes 格式化控制。
05   OPENR/OPENU/OPENW 打开文件。
06   EOF 测试指定文件单元是否到达文件结尾,返回布尔值。
07   GET_LUN 获取一个逻辑设备号。
08   FREE_LUN 释放一个逻辑设备号并关闭文件。
09   POINT_LUN 设置或者获取指定文件的文件指针位置。
10   SKIP_LUN 移动文件指针来读取文件。
11   CLOSE 关闭文件。
12   READU 读取二进制文件。
13   WRITEU 写入二进制文件。

序号 名称  

功能说明

  语法 & 举例
01 PRINT/PRINTF  

格式化输出(PRINTF 用于输出到文件)。
----------------------------------------------------------------------------------

PRINT [, Expression1, ..., Expressionn]
----------------------------------------------------------------------------------

PRINTF [, Unit, Expression1, ..., Expressionn]
----------------------------------------------------------------------------------

Keywords: [, AM_PM=[string, string]] [, DAYS_OF_WEEK=string_array{7 names}] [, FORMAT=value] [, /IMPLIED_PRINT] [, MONTHS=string_array{12 names}] [, /STDIO_NON_FINITE]

----------------------------------------------------------------------------------

Unit:欲输出的文件单元(逻辑设备号)
FORMAT=value:格式化控制

 

 

IDL> PRINT, 'IDL is fun.'
IDL is fun.
 02 READ/READF

 

 

格式化输入(READF 用于文件的读取)。
----------------------------------------------------------------------------------
READ, [Prompt,] Var1, ..., Varn
----------------------------------------------------------------------------------
READF, [Prompt,] Unit, Var1, ..., Varn
----------------------------------------------------------------------------------
Keywords: [, AM_PM=[string, string]] [, DAYS_OF_WEEK=string_array{7 names}] [, FORMAT=value] [, MONTHS=string_array{12 names}] [, PROMPT=string]
----------------------------------------------------------------------------------
Unit:欲读取的文件单元(逻辑设备号)
FORMAT=value:格式化控制
PROMPT=string:提示字符串

 

 

IDL> B=''
IDL> READ, B, PROMPT='Enter Name: '
Enter Name: ALEX
IDL> B
ALEX
 03 READS  

从字符串中读取格式化数据。
----------------------------------------------------------------------------------
READS, Input, Var1, ..., Varn [, AM_PM=[string, string]] [, DAYS_OF_WEEK=string_array{7 names}] [, FORMAT=value] [, MONTHS=string_array{12 names}]
----------------------------------------------------------------------------------
Input:读取的字符串
Vari:赋值的变量
FORMAT=value:格式化控制

 
IDL> str='abc100def'
IDL> a=''
IDL> b=0
IDL> c=''
IDL> READS,str,a,b,c,FORMAT='(A3,I3,A3)'
IDL> PRINT,a,b,c
abc     100def
IDL> HELP,a,b,c
A               STRING    = 'abc'
B               INT       = 100
C               STRING    = 'def'
04 Format Codes  

格式化控制。
----------------------------------------------------------------------------------
[n]FC[+][-][width]
----------------------------------------------------------------------------------
n:代表格式控制符的重复次数,默认为1次,所谓重复次数是指在一行中格式控制的次数,n=1,表示每行只显示一个变量,n=2,表示每行显示两个变量,n≥变量总数,单行显示
FC:Format Codes,格式控制符
+:正数前加“+”,仅对数字格式化输出有效(包括0)
-:字符串和数字左对齐,默认是右对齐
width:数字或字符的宽度

 
IDL> ;格式符控制重复三次,一行显示三个
IDL> PRINT, FORMAT='(3I6)', [0, 10, 20]
     0    10    20
-----------------------------------------
IDL> ;6个字符宽度,非负数前加“+”
IDL> PRINT, FORMAT='(I+6)', [-10, 0, 10]
   -10
    +0
   +10
-----------------------------------------
IDL> ;6个字符宽度,左对齐
IDL> PRINT, FORMAT='(I-6)', [-10, 0, 10]
-10   
0     
10    
-----------------------------------------
IDL> ;格式符宽度与字符串宽不符,字符串短则右对齐输出,长则截断
IDL> PRINT, FORMAT='(A4)', ['ABCDEF', 'AB']
ABCD
  AB
-----------------------------------------
IDL> ;格式符宽度与数字长度不符,数字短则右对齐输出,长则输出为“*”
IDL> PRINT, FORMAT='(I3)', [12, 123, 1234]
 12
123
***
-----------------------------------------
IDL> ;格式输出数字时前加0,数字短则左侧自动补0
IDL> PRINT, FORMAT='(I03)', [12, 123, 1234]
012
123
***
-----------------------------------------
IDL> ;格式符宽度为0,则依照原始格式输出
IDL> PRINT, FORMAT='(I0)', [12, 123, 1234]
12
123
1234
-----------------------------------------
IDL> ;总宽度为6,数字宽度为4,不足的用0填充
IDL> PRINT, FORMAT='(I6.4)', [12, 123, 1234]
  0012
  0123
  1234
 

  FC —— 字符、字符串及整数
----------------------------------------------------------------------------------
[n]A[-][w]
[n]I[+][-][w][.m]
[n]B[-][w][.m]
[n]O[-][w][.m]
[n]Z[-][w][.m]
----------------------------------------------------------------------------------
A字符及字符串的格式化输入输出

I
整数输入输出时的 十进制
B整数输入输出时的 二进制
O整数输入输出时的 八进制
Z整数输入输出时的 16进制
w:输入输出宽度
m:无空格的宽度,无数字部分由 0 填充

 

  FC —— 输入输出位置控制
----------------------------------------------------------------------------------
Tn
TLn
TRn
nX
----------------------------------------------------------------------------------

T:变量输出的绝对位置,n 表示位置值
TL:从当前位置向左移动,n 表示向左移动的字符数
TR:从当前位置向右移动,n 表示向右移动的字符数
X:空格输出,n 是空格的个数

 

 

IDL> ;绝对位置为6,为2的时候,将原数据替换
IDL> PRINT, FORMAT='("AB", T6, "CD")'
AB   CD
IDL> PRINT, FORMAT='("AB", T2, "CD")'
ACD
-------------------------------------------------
IDL> ;左右移动输出
IDL> PRINT, FORMAT='("AB", 2X, "CD", 4X, "EF")'
AB  CD    EF
IDL> PRINT, FORMAT='("AB", "CD", TL2, "EF")'
ABEF
IDL> PRINT, FORMAT='("AB", "CD", TR4, "EF")'
ABCD    EF
 

  FC —— 浮点数格式符(F、D、E、G)
----------------------------------------------------------------------------------
[n]F[+][-][w][.d]
[n]D[+][-][w][.d]
[n]E[+][-][w][.d]
[n]G[+][-][w][.d]
----------------------------------------------------------------------------------
F:以定点计数法输出浮点型(单精度)
D以定点计数法输出浮点型(双精度)
E:指数形式(科学格式)输出
G:根据数据大小自动选择科学格式E或F格式输出
w:字符宽度
d:四舍五入的精度

 
IDL> ;浮点数显示,精度,科学计数法
IDL> PRINT, FORMAT='(F10.4)', [11.22225, 115486.3, 2.0]
   11.2222
**********
    2.0000
IDL> PRINT, FORMAT='(E15.4)', [11.22225, 115486.3, 2.0]
    1.1222E+001
    1.1549E+005
    2.0000E+000
IDL> PRINT, FORMAT='(G12.4)', [11.22225, 115486.3, 2.0]
       11.22
  1.155E+005
       2.000
 

  FC —— C()日期与时间输出
----------------------------------------------------------------------------------
[n]C([c0,c1,...,cx])
CMOA[-][w]、CMoA[-][w]、CmoA[-][w]
CMOI[+][-][w][.m]
CDI[+][-][w][.m]
CYI[+][-][w][.m]
CHI[+][-][w][.m]、ChI[+][-][w][.m]
CMI[+][-][w][.m]
CSI[+][-][w][.m]
CSF[+][-][w][.d]
CDWA[-][w]、CDwA[-][w]、CdwA[-][w]
CAPA[-][w]、CApA[-][w]、CapA[-][w]
----------------------------------------------------------------------------------

CMOA:C-MONTH-A,字符串形式输出月,Cmoa-dec、CMoA-Dec、CMOA-DEC
CMOI:C-MONTH-I,数字形式输出月
CDI:C-DAY-I,数字形式输出日
CYI:C-YEAR-I,数字形式输出年
CHI:C-HOUR-I,数字形式输出小时,CHI-14(24小时制)、ChI-2(12小时制)
CMI:C-MINUTE-I,数字形式输出分钟
CSI:C-SECOND-I,数字形式输出秒
CSF:C-SECOND-F,浮点数形式输出秒
CDWA:C-DAY-WEEK-A,字符串形式输出星期,cdwa-sun、CDwa-Sun、CDWA-SUN
CAPA:C-AM-PM-A,字符串形式输出上午或下午,capa-pm、CApa-Pm、CAPA-PM

 

 

IDL> ;日期输出,下面补0
IDL> PRINT, SYSTIME(/JULIAN),
FORMAT='(C(CYI, "-", CMOI, "-", CDI))'
2016- 8-26
IDL> PRINT, SYSTIME(/JULIAN),
FORMAT='(C(CHI, ":", CMI, ":", CSI))'
14:35:56
IDL> PRINT, SYSTIME(/JULIAN),
FORMAT='(C(CYI, "-", CMOI02, "-", CDI02))'
2016-08-26
IDL> PRINT, SYSTIME(/JULIAN),
FORMAT='(C(CHI02, ":", CMI02, ":", CSI02))'
14:35:56
IDL> PRINT, SYSTIME(/JULIAN),
FORMAT='(C(CHI4.3, ":", CMI5.4, ":", CSI0.3))'
 014: 0035:56
IDL> PRINT, SYSTIME(/JULIAN),
FORMAT='(C(ChI4.3, ":", CMI5.4, ":", CSI0.3))'
 002: 0035:56

 

 05 OPENR/OPENU/OPENW  

打开文件。
OPENR:打开读文件,文件已经存在
OPENW:打开写文件,文件不存在新建文件,文件存在则删除原内容
OPENU:打开更新文件,文件已经存在
----------------------------------------------------------------------------------
OPENR, Unit, File
----------------------------------------------------------------------------------
OPENW, Unit, File
----------------------------------------------------------------------------------
OPENU, Unit, File
----------------------------------------------------------------------------------
Keywords: [, /APPEND | , /COMPRESS] [, BUFSIZE={0 | 1 | value>512}] [, /DELETE] [, ERROR=variable] [, /F77_UNFORMATTED] [, /GET_LUN] [, /MORE] [, /NOEXPAND_PATH] [, /STDIO] [, /SWAP_ENDIAN] [, /SWAP_IF_BIG_ENDIAN] [, /SWAP_IF_LITTLE_ENDIAN] [, /VAX_FLOAT] [, WIDTH=value] [, /XDR]
----------------------------------------------------------------------------------
Unit:欲打开的文件单元(逻辑设备号)
File:文件的路径,字符串
APPEND:指针定位到文件的最后,准备添加信息,默认情况指针定位到文件的最开始
GET_LUN:设置此关键字,将调用 GET_LUN 过程,在文件还没打开之前就对 Unit 赋值

 
  ;在文件中添加新内容
  file="D:\IDL\blog\1.txt"
  OPENW, lun, file, /APPEND, /GET_LUN
  PRINTF, lun, "alexbnlee"
  FREE_LUN, lun
---------------------------------------
  ;读取文件中的内容,一行一行读取,并输出
  str=''
  file="D:\IDL\blog\1.txt"
  OPENR, lun, file, /GET_LUN
  WHILE(~EOF(lun)) DO BEGIN
    READF, lun, str
    PRINT, str
  ENDWHILE
  FREE_LUN, lun
 06 EOF  

测试指定文件单元是否到达文件结尾,返回布尔值。
----------------------------------------------------------------------------------
Result = EOF(Unit)
----------------------------------------------------------------------------------
Unit:文件单元(逻辑设备号)

   
 07 GET_LUN  

获取一个逻辑设备号。
----------------------------------------------------------------------------------
GET_LUN, Unit
----------------------------------------------------------------------------------
Unit:文件单元(逻辑设备号)

   
 08 FREE_LUN  

释放一个逻辑设备号并关闭文件。
----------------------------------------------------------------------------------
FREE_LUN [, Unit1, ..., Unitn] [, EXIT_STATUS=variable] [, /FORCE]
----------------------------------------------------------------------------------
Uniti:文件单元(逻辑设备号)

   

 

   file="D:\IDL\blog\1.txt"
  OPENR, lun, file, /GET_LUN
 
    ;获取文件的总字符数
  SKIP_LUN, lun, /EOF, TRANSFER_COUNT=n_bytes
  PRINT, n_bytes
  ;指针定位到文件开始
  POINT_LUN, lun, 0
    ;获取文件的总行数
  SKIP_LUN, lun, /LINES, /EOF, TRANSFER_COUNT=n_lines
  PRINT, n_lines

  FREE_LUN, lun
 09 POINT_LUN  

设置或者获取指定文件的文件指针位置。
----------------------------------------------------------------------------------
POINT_LUN, Unit, Position
----------------------------------------------------------------------------------
Unit:文件单元(逻辑设备号)
Position:移动指针的字节数

10 SKIP_LUN  

移动文件指针来读取文件
----------------------------------------------------------------------------------
SKIP_LUN, FromUnit, [, Num] [, /EOF] [, /LINES] [, /TRANSFER_COUNT=variable]
----------------------------------------------------------------------------------
FromUnit:文件单元(逻辑设备号)
Num:忽略的数目
EOF:直接跳到文件结尾
LINES:按照行来计数,默认按照字节来计数
TRANSFER_COUNT=variable:记录忽略的数目,即 Num 的值,对于设置 EOF 而言,可以计算文件总的字符数或者总的行数

11 CLOSE  

关闭文件。
----------------------------------------------------------------------------------
CLOSE[, Unit1, ..., Unitn] [, /ALL] [, EXIT_STATUS=variable] [, /FILE] [, /FORCE]
----------------------------------------------------------------------------------
Uniti:要关闭的文件单元(逻辑设备号)
ALL:关闭所有打开的文件单元(逻辑设备号)

 

 

12 READU  

读取二进制文件。
----------------------------------------------------------------------------------
READU, Unit, Var1, ..., Varn [, TRANSFER_COUNT=variable]
----------------------------------------------------------------------------------
Unit:欲读取的文件单元(逻辑设备号)
Vari:接收数据的变量名

 

 

13 WRITEU  

写入二进制文件。
----------------------------------------------------------------------------------
WRITEU, Unit, Expr1 ..., Exprn [, TRANSFER_COUNT=variable]
----------------------------------------------------------------------------------
Unit:欲读取的文件单元(逻辑设备号)
Vari:接收数据的变量名

 

 

           

 

      

posted on 2016-08-25 16:42  McDelfino  阅读(4634)  评论(0编辑  收藏  举报