【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:接收數據的變量名

 

 

           

 

      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM