参考: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:接收数据的变量名

 
           

最新文章

  1. C# 下载搜狗词库
  2. CentOS 7.2 安装 Docker 1.12.3 版
  3. wireshark过滤语法总结
  4. Java_过滤字符串中非汉子的内容
  5. Android菜鸟成长记6 -- 网络连接的检查
  6. Web API-如何将Controller的返回值转换成HTTP response消息
  7. 慕课linux学习笔记(一)centOS的安装
  8. IE6 js修改img的src属性问题
  9. 这两天dede 仿站的收货
  10. docker的简单使用
  11. java 身份证工具类
  12. 打造利器Qt Creator:代码todo工具的使用
  13. spring接入swagger后单元测试报错
  14. 面向对象【day07】:类的继承(七)
  15. ASP.NET MVC4中加入Log4Net日志记录功能
  16. LSTM UEBA异常检测——deeplog里其实提到了,就是多分类LSTM算法,结合LSTM预测误差来检测异常参数
  17. webservice-jdk客户端代码
  18. Flask初级(五)flash在模板中使用继承,模板的模板
  19. SQL使用子查询,查找班级成绩最高分
  20. golang管道

热门文章

  1. 一个IP绑定多个域名
  2. hdoj 5094 Maze 【BFS + 状态压缩】 【好多坑】
  3. kubernetes滚动更新
  4. 解析java.math.BigInteger类——构造函数
  5. linux shell 的前世今生和流行BASH SHELL的特点
  6. session.use_cookies有什么作用,
  7. EasyDarwin开源流媒体服务器支持basic基本认证和digest摘要自定义认证
  8. Page Objects
  9. 'gbk' codec can't encode character '\xa5' in position 4546: illegal multibyte sequence错误解决
  10. RBAC打造通用web管理权限