You are on page 1of 5

ANSYS 数据文件读写的 APDL 命令详解及实例

作者:huright

一 FORTRAN 数据格式
I 格式(又叫整数格式)
一般形式:Iw 或:Iw.m
其中:w 一个数据占的位数宽度(又称“字段宽度”),m 需要输出的最少数字位数。例 1:
(1)数字在指定的区域内向右端靠齐,如果数字位数比指定的字段宽度 w 小,则左边
补以空格。负数的符号也包含在字段宽度内。
(2)如果数字的位数超过了规定的字段宽度 w,则不输出有效数据,而在该字段宽度
范围内充满“*”符号。
(3)如果数字的位数超过了 m,则按实际应输出的位数输出(但条件是不能超过 w)。m
不包括负号所占的一列。
F 格式(又叫小数型格式)
一般形式:Fw.d
w 各数值占的总位数 d 输出数据的小数位数(小数点后的位数)。 例 1:
(1)数字在指定的区域内向右端靠齐,如果数字位数(含小数点和符号位)比指定的
字段宽度 w 小,则左边补以空格;如果数字的位数超过了规定的字段宽度 w,则不输出有
效数据,而在该字段宽度范围内充满“*”符号。
(2)如果数据的小数位数比指定的小数位数 d 小,则在小数右边补 0 以凑足 d 位;如
果小数位数大于 d 位,则输出时多于的小数位数按“四舍五入”规则舍去。
(3)假设 b 为数据整数部分的位数,则应使 w≥b+d+1(小数点占一列),如果输出负数,
则应保证 w≥b+d+2(小数点和负号各占一列)。
(4)用 F 格式输出时应注意,由于难以事先确切估计出数据的大小,输出大的数时容
易产生“宽度不够”的错误(由于 w 不够大),输出小的数时会出现丢掉有用数字的情况(由
于 d 不够大而将后面的数字截去),这就是“大数印错,小数印丢”。
E 格式(又叫指数型格式)
一般形式:w.d
w 各数值占的总位数,d 输出数据的小数位数(小数点后的位数)。例 1:
(1)采取标准化的指数形式输出一个实数,d 为以指数形式出现的数据的数字部分的
小数位数。
(2)指数部分一般占 4 列,其中字母“E”和指数的符号各占一列,指数 2 列。 小数
部分 d 列,再加上一个小数点和小数点前的一个“0”,因此要保证 w≥d+6,输出负数时,
w≥d+7。
(3)有的计算机系统允许有较大的实数范围,FORTRAN77 提供了一种扩充的编辑符,
可以输出三位或四位指数。这种编辑符的形式为:Ew.dEe,用 e 指定指数的位数。有的计算
机系统的 FORTRAN 编译系统已根据其允许的实数范围,自动将指数的位数改为 3 位或 4
位,不必在 RORMAT 语句中用 Ew.dEe 编辑符单独为某些数据指定所需的指数位数,只需
写 Ew.d 形式即可,输出时系统会给出三位(或四位)指数。
G 格式
G 格式可以根据输出的实数大小决定用小数形式(F 格式)输出或指数形式(E 格式)
输出。当输出大数值或小数值时自动按 E 格式,当输出的数不大不小时用 F 格式。其一般
形式为:Gw.d
(1)凡绝对值小于 0.1 的数或绝对值大于 10d 的数用 E 格式输出;其余的数用 F 格式
输出。
(2)用 E 格式输出时,最后 4 列为指数部分,而用 F 格式输出时最后 4 列留空。
(3)用指数形式输出时,格式同 Ew.d;用 F 格式输出时,不是按 Fw.d 形式输出,d
规定的不是小数位数而是打印出来的全部数字的位数,小数位数根据数值大小和 d 的大小而
定,这样做的目的是使数的整数部分能全部保留,而适当截去小数部分,以保证输出数值的
正确性。因为小于 10d 的数,其整数部分最多为 d 位,因此,可以全部输出这 d 位整数,小
数的位数为:d-(数值整数位数)。
D 格式
一般形式:Dw.a
用于双精度数据的输出,使用方法与 E 格式相仿,只是把字母“E”换成“D”。
L 格式
一般形式:Lw
用于逻辑型数据的输出,w 输出数据的字段宽度。逻辑值“.TRUE.",在输出时打印一个字
母 T;逻辑值".FLASE.",在输出时打印一个字母 F。T 和 F 打印在字段范围内的最右端。
A 格式
一般形式:Aw 或:A
用于字符型数据的输出,w 为字段宽度,不指定 w 时(即形式:A),按字符变量的实际长
度(即程序定义该变量时的长度)输出。
字符串在指定的区域内向右端靠齐,如果字符串的位数比指定的字段宽度 w 小,则左
边补以空格;如果字符串的位数超过了规定的字段宽度 w,则只输出最左面的 w 个字符。
‘(撇号)格式
用来插入所需的字符串, 如果需要输出的字符包括撇号,则用两个连续的撇号代表一
个被输出的撇号字符。
H 格式
一般形式:nH <字符串>
用来输出字符常量,与撇号格式相似。n 为字符串中字符的个数。 可以单独用撇号格式或
H 格式输出字符串而不必要求 WRITE 语句中有相应的输出项。 用 H 格式必须准确地数出
字符串中的字符个数,数错了就会造成错误。所以最好不用 H 编辑符而用撇号编辑符,后
者不必数字符,使用方便,字符串界线清楚无误。FORTRAN 77 之所以保留 H 编辑符主要
是为了与 FORTRAN 66 兼容(FORTRAN 66 只能用 H 编辑符输出字符串而没有撇号编辑
符)。
X 格式
一般形式:nX
用于输出空格,n 输出的空格数目。即插入 n 个空格,或者说,使打印的“当前位置”向右
移动 n 列。如果不用 X 格式插入空格,数据将连成一片,难以区分开。
注意:不要把 2X 作为与 A 对应的格式符,WRITE 语句中的 I,A,B 分别与 FORMAT
语句中的 I3,F6.2 和 E11.5 格式符对应。X 格式符不能用来提供整数、实数、以及其它类型
数据的输出格式,它只能插入若干个空格。
FORTRAN 77 还允许 n 是负整数,表示从当前位置向左移动 n 的绝对值列。微机上使
用的 FORTRAN 子集不能使用 n 为负值的格式符。
/(斜杠)格式
斜杠(/)编辑符的作用是:结束本记录的输出并开始下一个记录的输出。例如:

二 关键命令
2.1 *VREAD 按指定格式将数据读入数组中
*VREAD, ParR, Fname, Ext, --, Label, n1, n2, n3, NSKIP
ParR 定义好的数组名称 ,且指出开始写入的位置,即下标(i,j)
Fname 数据文件名称
Ext 数据文件的扩展名
-- 没有启用的保留域
Label
可为 IJK, IKJ, JIK, JKI, KIJ, KJI, or blank (IJK),表示你对 ParR 写入的
顺序,下标变化依次变慢,如 IJK 表示先写列再写行(列下标 J 变化最快),JIK
表示先写行再写列。
n1, n2, n3
表示按上面的顺序要写入的数据个数,如 JIK,5,6 表示对 ParR 按行写入,共
写 5 列 6 行。
NSKIP 读入数据时需要跳过的行数。
特别注意:
*VREAD 后面要紧跟带括号的指定格式,描述对数据文件每行的读法,如(F3.0,
F11.0)每行读两个数,分别占 3,11 个字符宽度。
2.2 *VWRITE 用来输出数组、数值参数、字符参数或常量到文件里。它一次最多
可以写入 19 个参数,使用该命令时,紧跟着该命令的下一行必须是 FORTRAN77
的格式规定。数组矢量要指定起始元素位置。可以用表达式来计算数据文件中每
一行的位置。
*vwrite 命令的使用格式如下:
*VWRITE, Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9, Par10,
Par11, Par12, Par13, Par14, Par15, Par16, Par17, Par18, Par19
其中 par1~par19 是依次写出的 19 个参数或者常数,某个空值表示忽略,所有
都忽略则输出一空行。允许写出的数据包括常数,变量与数组,包括数值型和字
符型数据。
2.3 *cfopen 在*vwrite 之前需利用*cfopen 打开的一个数据文件,表示其后的
并将*cfopen 和*cfclos 之间所有的*vwrite 写出的数据都输入到该数据文件中。
*cfopen,fname,ext,--,loc
fname 是带路径的文件名(两者允许至多 250 字符长度),缺省路径为工作目录,
文件名缺省为 jobnmae。
ext 是文件的扩展名(至多是 8 个字符长度)。如果 fname 为空,那么扩展名缺
省为 cmd。
--表示该域是不需要使用的值域。
loc 用于确定打开的文件已经存在时,缺省表示采用覆盖方式写数据到文件中,
设置成 append 表示采用追加方式写数据到文件中。
与*cfopen 成对使用的另外一个命令时*cfclos 命令,总是在*cfopen 命令与一序
列数据*vwrite 命令之后,用于关闭用*cfopen 命令打开的文件。
*cfclos 命令的使用格式如下:*cfclos
2.4 /OUTPUT
/OUTPUT
/OUTPUT, Fname, Ext, --, Loc
输出 txt 数据到文件或窗口
Fname 文件名和路径。如果为空,则输出到默认系统输出文件中。
Ext 文件扩展名
-- 保留的未使用域。
Loc

blank — 覆盖式输出

APPEND — 追加式输出

三 实例解析
3.1 首先创建一个数据文件

finish
/clear
item=’’weight:’’
data=234.56
unit=’’kg’’
*dim,aa,array,4,1,1
aa(1)=10.2,324.5,123.7,908
*dim,bb,char,3,1,1
bb(1)=’’i am’’,’’a good’’,’’man’’
*cfopen,mememama,dat
*vwrite,
(5x,’*vwrite demo’)
*vwrite,
(’***********************’)
*vwrite,item,data,unit
(a8,f10.2,a8)
*vwrite,
(/’******array parameter output demo******’)
*vwrite,
(’’float format/sequ keyword:’’)
*vwrite,sequ,aa(1)
(f3.0,f10.4)
*cfclos
运行该文件后,生成的数据格式如下:

vwrite demo
***********************
'weight: 234.56'kg'
******array parameter output demo******
float format/sequ keyword:
1. 10.2000
2. 324.5000
3. 123.7000
4. 908.0000
3.2 将数据读入数组

*DIM,mememama,,4,2

*VREAD,mememama(1,1),mememama,dat,,JIK,2,4,,6

(f3.0,f10.4)

运行该文件后,点击[Parameters]->Array Parameters,就可以看到得到的数组了。

You might also like