数据输入输出编辑详解
立即解锁
发布时间: 2025-08-16 01:29:57 阅读量: 15 订阅数: 38 


Fortran 2003: 完整语法与特性指南
# 数据输入输出编辑详解
## 1. 输出基本规则
在数据输出时,有以下基本规则:
1. 除了B、O和Z编辑外,正值(包括正零)是否带有加号取决于处理器,除非使用符号编辑描述符强制其有无(这里暂不详细展开符号编辑描述符)。
2. 除了B、O和Z编辑外,负值会带有减号。对于实数据,输出时可能会产生带负号的零,这是为了支持能表示负零的IEEE算术处理器。
3. 数字在字段中右对齐,必要时会插入前导空格。
4. 除非w为零,如果数字或指数对于编辑描述符中指定的字段宽度来说太大,整个输出字段将填充星号。
5. 如果省略可选字符后输出值能适应输出字段,处理器不会产生星号。
6. 只有I、B、O、Z或F编辑时w可以为零。在这种情况下,处理器将选择包含符号(如果需要)和值且无前导空格的最小字段宽度。
## 2. 整数编辑
### 2.1 整数编辑描述符
整数编辑用于将整数值与字符串进行相互转换。整数编辑描述符有:
- I w [ . m ]
- B w [ . m ]
- O w [ . m ]
- Z w [ . m ]
- G w . d [ E e ]
其中,w决定字段宽度,m是输出字段中的最小数字位数,d和e对整数编辑没有影响。这些是可用于整数数据的唯一编辑描述符(注意G编辑描述符也可用于其他数据类型)。
### 2.2 规则和限制
#### 2.2.1 输入输出通用规则
对于整数输入/输出列表项,编辑描述符Gw.d[Ee]与具有相同w值的Iw描述符相同,且w必须大于零。
#### 2.2.2 输入规则
1. w不能为零。
2. m对输入字段没有影响。
3. 对于I编辑描述符,文件中的字符串必须是可选带符号的空格和数字字符串。
4. 对于B、O或Z编辑描述符,字符串必须分别是二进制、八进制或十六进制的无符号空格和数字字符串。
例如,有如下输入示例:
```fortran
READ 100,
K, J, L
100 FORMAT (I5, G8.0, O4)
```
如果输入字段是(b表示空格)`bb-24bbbbb117bb77`,K使用整数I5编辑描述符读取,J使用G8编辑描述符读取,L使用O4编辑描述符读取。K、J和L的结果值分别为–24、117和63。
#### 2.2.3 输出规则
1. 输出字段通常由空白字符、可能的符号和数字字符串组成。符号和数字在字段内右对齐,这些部分可能部分或全部缺失。
2. 如果m出现,其值不能超过w,除非w为零。
3. 如果w>0,Iw编辑描述符会生成一个宽度为w字符的字段,必要时包含前导空格、如果值为负则有减号或可选的加号,以及字段最右侧的数字字符串。如果值无法放入w个字符(无可选加号),字段将填充星号。如果w = 0,处理器将选择包含必要的减号或可选加号以及值且无前导空格的最小字段宽度。
4. 对于Iw.m(w>0),会生成至少m位数字,必要时包含前导零。
5. I0.m编辑描述符会生成至少m位数字的结果,以及表示整数值所需的更多数字。输出字段必要时包含减号和可选的加号。
6. Bw[.m]、Ow[.m]和Zw[.m]编辑描述符遵循与Iw[.m]相同的规则并产生相同的输出形式,只是数字是二进制、八进制或十六进制系统,且不产生符号。
7. 对于m = 0且数据值为零的特殊情况,输出字段由w个空格组成,除非w也为零,此时字段为一个空格。无论生效的符号控制如何,都不会产生符号。
由于B、O和Z编辑描述符在输入字段中不允许有符号,输出时也不产生符号,根据处理器的不同,负值可能会编码在数字中。例如,使用十六进制编辑描述符时,−1可能表示为80000000。如果最高位被设置,B、O和Z编辑描述符对数字的解释标准未作规定。
### 2.3 整数编辑示例
以下是一些整数编辑的示例:
```fortran
PRINT "(4I4)", 22, -444, 0, 55555
```
输出为`bb22-444bbb0****`,因为55555无法放入只有4个空格宽的字段。
```fortran
PRINT "(4I0)", 22, -444, 0, 55555
```
输出为`22-444055555`,处理器选择必要的最小字段宽度,但结果值的压缩形式对人类来说难以阅读。
```fortran
PRINT "(4I4.3)", 22, -444, 0, 55555
```
输出为`b022-444b000****`,每个值至少有3位数字,包括强制的前导零。
```fortran
PRINT "(4I0.3)", 22, -444, 0, 55555
```
输出为`022-44400055555`,字段进行了调整,以允许所有值至少显示3位数字。
不同整数编辑描述符对内部值的输出情况如下表所示:
| 内部值 | I6 | I6.5 | I6.3 | I6.0 | I0.6 | I0.3 | I0.0 |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| 1874 | bb1874 | b01874 | bb1874 | bb1874 | 001874 | 1874 | 1874 |
| −1874 | b-1874 | -01874 | b-1874 | b-1874 | -001874 | -1874 | -1874 |
| 0 | bbbbb0 | b00000 | bbb000 | bbbbbb | 000000 | 000 | b |
I0和I0.m常用于内部输出,以生成符合操作系统约定的文件名序列。例如:
```fortran
WRITE (C1, "(A, I0.3)") "file", 012
WRITE (C2, "(A, I3.3)") "file", 012
```
将变量C1和C2分别设置为`file12b`和`file012`,生成无内部空格的文件名。
## 3. 实数编辑
### 3.1 实数编辑描述符
实数编辑用于将实(或复)值与字符串进行相互转换。F、E、EN、ES、D和G编辑描述符用于指定实和复输入/输出列表项的编辑。每个复数据项需要两个这样的编辑描述符。实值的编辑描述符形式如下:
- F w . d
- E w . d [ E e ]
- EN w . d [ E e ]
- ES w . d [ E e ]
- D w . d
- G w . d [ E e ]
对于输出,E、EN和ES描述符会生成一个带有小数点符号和指数字段的字段;小数点符号的位置取决于所使用的描述符。E描述符在小数点左侧不写入有效数字,ES(科学)描述符在小数点左侧写入一位数字,EN(工程)描述符在小数点左侧写入一到三位数字,使指数值能被3整除。F描述符以固定位置写入带有小数点符号的值,且无指数字段。D描述符历史上用于双精度值,但现在本质上与E描述符相同。G描述符将根据哪种形式在输出字段中“最适合”来生成F或E输出。对于输入,所有六个描述符可以互换使用。
### 3.2 F编辑
#### 3.2.1 F编辑规则和限制
##### 输入输出通用规则
1. 输入字段中的值或传输到输出字段的值可以带符号。
2. 转换期间的舍入由生效的ROUND模式控制。
##### 输入规则
1. w不能为零。
2. 如果
0
0
复制全文
相关推荐










