加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

对*VREAD用法的总结

(2011-07-02 19:36:40)
标签:

宋体

数据文件

数组

读取

有限元分析

it

分类: 知识储备
对*VREAD用法的总结,请高手指教

经过实验,对*vread用法总结如下:
*VREAD, ParR, Fname, Ext, --, Label, n1, n2, n3, NSKIP
ParR是你要将外部数据写入的数组变量名,必须已经定义(可用*DIM),且指出开始写入的位置,即下标(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:Number of lines at the beginning of the file being read that will be skipped during the reading. Default = 0.
后面要紧跟带括号的指定格式,描述对数据文件每行的读法,如(F3.0,F11.0)每行读两个数,分别占3,11个字符宽度
例《APDL参数化有限元分析技术及其应用实例》,P40
如数据文件data.txt内容如下:
1.5    7.8  12.3
15.6  -45.6  42.5
执行命令流
*DIM,AA,,2,3
*VREAD,AA(1,1),DATA,TXT,,JIK,3,2
(3F6.1)
*STATUS,AA
对不同输入的结果分析如下:
  

nF6.1


  
  

对已有文件的读取方式(每行)F前的数字表示每行读几个值


对不同输入方式的读取结果分析如下:

nF6.1

AA 数组的读取结果

对数据文件的读取方式,每行读 n 个数据,格式都是 F6.1

JIK,3,2

(f6.1)

1

1.1

4.4

0

每行读 1 个数据,按行写入,共 32 行。需读取 6 行。

Warning

end-of-file in data read[1]

2

0

0

0

JIK,3,2

(2f6.1)

1

1.1

2.2

4.4

每行读 2 个数据,按行写入,共 32 行。需读取 3 行。

Warning

end-of-file in data read[1]

2

5.5

0

0

JIK,3,2

(3f6.1)

1

1.1

2.2

3.3

每行读 3 个数据,按行写入,共 32 行。需读取 2 行。

2

4.4

5.5

6.6

JIK,3,2

(4f6.1)

1

1.1

2.2

3.3

每行读 4 个数据,按行写入,共读取 2(第二行读 2 个数据)[2]

2

0

4.4

5.5

注: [1] 数据文件中每行有 3 个数据,由于每行读入的数据不到 3 个,后面的多余数据将不被读入,最终导致数据不够的警告。未读取的数组元素,默认值为 0.

[2] 数据文件中每行有 3 个数据,每行要求读入 4 个数据,超过 3 个的以 0 补足。

 


IJK,n1,n2

对目标数组写入方式:IJK 表示下标变化的顺序,默认按列写入。

IJK: 数组 AA 要写入的行数,列数;按列逐个值写入,写满要写的行列为止。

JIK: 数组 AA 要写入的列数,行数,按行将单个值写入 (FORTRAN 默认先写列,JIK 表示先写行)

 

AA 数组中的读取结果

 

IJK,2,3

(3f6.1)

1       

1.1

3.3

5.5

每行全读,按列写,

共 行 列。

2       

2.2

4.4

6.6

IJK,1,2

(3f6.1)

1       

1.1

2.2

0

每行全读,按列写,

共 行 列。

2       

0

0

0

JIK,2,1

(3f6.1)

1       

1.1

2.2

0

每行全读,按行写,

共 列 行。

2       

0

0

0

JIK,3,1

(3f6.1)

1       

1.1

2.2

3.3

每行全读,按行写,

 列 行。

2       

0

0

0

JIK,3,1

(2f6.1)

1       

1.1

2.2

4.4

每行读 个值,按行写,共 列 

2       

0

0

0

JIK,3,1

(f6.1)

1       

1.1

4.4

0

每行读 个,只读到 个,少 个。

Warning

end-of-file in

data read

2       

0

0

0

IJK,2,2

(2f6.1)

1       

1.1

2.2

0

每行读 个值,按列写,共 行 列。

2       

4.4

5.5

0

IJK,2,5

(3f6.1)

1      

0

0

0

Waring:

AA does not

have enough

columns - 数 超过AA 定义的列数。

2      

0

0

0

 

 

上述方法仅对 Array 有效,如果是对表 (Table),由于 *VREAD 不能直接对表的 行、列读入数据,因此上述方法受到限制。向 Table 中读入数据时,可以参考如下命令流或改用 *Tread 命令:

 

!  如何向 array 或 table 中读入数据

  fini

  /clear

  /prep7

  *del,all

  n=10                       !  数据行数

  ! 

  !  方法 1

  *dim,aa,array,n,2,1

  *cfopen,test,dat                     ! 打开数据文件 test.dat

  *vread,aa,test,dat, ,jik,2,10,1      ! 对于 array,使用 *vread 读入数据,需要格式说明

  (f12.0,f12.4)

  *cfclos                     ! 关闭数据文件         ! 可以正确读入数据

 

  *dim,cc,table,n,1,1         ! table 下标从 0 开始,

  ! 这样定义实际为 (n+1) 行 * 2 列

  *do,i,1,n                   !  将 aa 的数据传送到 cc

   cc(i-1,0)=aa(i,1)

   cc(i-1,1)=aa(i,2)

  *enddo                      ! 结果正确

 

  !  方法 2

  *dim,bb,table,n,1,1         ! table 下标从 0 开始,

  ! 这样定义实际为 (n+1) 行 * 2 列

  *cfopen,test,dat

  *tread,bb,test,dat, ,0     !  实际读入 n 行数据,存放在到第 1 到 n 行

                       !  对于表,用 *tread 读入数据,不要格式说明

  *cfclos                    !  可以正确读入数据到下标大于 0 的各表项中

 

  !  方法 1, 需要多用一个 Array,但是定义表的 0 行、0 列可以使用;

  !  方法 2, 表的第 0 行和第 0 列不能使用,如要使用,需单独赋值。

 

数据文件 test.dat 中的数据:

  0, 0.01

  1,10.11

  2,20.22

  3,30.33

  4,40.44

  5,50.55

  6,60.66

  7,70.77

  8,80.88

  9,90.99

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有