• 【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:IDLlog1.txt"
      OPENW, lun, file, /APPEND, /GET_LUN
      PRINTF, lun, "alexbnlee"
      FREE_LUN, lun
    ---------------------------------------
      ;读取文件中的内容,一行一行读取,并输出
      str=''
      file="D:IDLlog1.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:IDLlog1.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:接收数据的变量名

     

     

               

          

  • 相关阅读:
    前端时间格式化
    Navicat for Oracle
    在JSP中使用Session
    在JSP中使用MD5
    QTP的那些事用QTP测试Web上的Ajax
    VBS函数应用getobject的使用获得Automation对象
    QTP的那些事Excel导入QC没反应的解决方法
    QTP的那些事QC远程执行QTP经常出现QTP崩溃现象解决方案
    QTP的那些事自动化的个人体会感悟(转)
    QC在win7远程执行QTP脚本excel不能读取,及其其他win7问题解决方案(图解转)
  • 原文地址:https://www.cnblogs.com/alex-bn-lee/p/5807437.html
Copyright © 2020-2023  润新知