Fortran Coder

查看: 14533|回复: 10
打印 上一主题 下一主题

[流程控制] FORTRAN小白,循环方面

[复制链接]

98

帖子

0

主题

0

精华

大师

F 币
658 元
贡献
293 点

规矩勋章元老勋章新人勋章

楼主
发表于 2019-9-17 12:55:50 | 显示全部楼层
[Fortran] 纯文本查看 复制代码
Program Main
  Implicit None
  real A(1,12)
  character(len=16) :: c
  Integer :: i
  Open(17,FILE='E:\tempabaqus\C.DAT')
  Do i = 1 , 12
    READ(17,*)A(:,i)
  End Do
  Do i = 1 , 8
    write(c,*) i
    Open(99+i,FILE='E:\tempabaqus\'//trim(adjustl(c))//'.DAT')
  End Do
  Do i = 1 , 11
    WRITE(99+i,150)A(:,i)
  End Do
150 FORMAT(F20.10,5X)
End Program Main
天之道,损有余而补不足

98

帖子

0

主题

0

精华

大师

F 币
658 元
贡献
293 点

规矩勋章元老勋章新人勋章

沙发
发表于 2019-9-17 20:54:52 | 显示全部楼层
①这个C是什么意思呢?
C是一个字符串,用来临时存储 i 转换成的字符串,比如 “1” 或 “2” 这样的字符串
后面会用到它来拼成文件名“1.dat”或“2.dat”这样的
②我C.DAT文件只是1列12行数字,也没有变量定义,这样就定义了吗?
文件内容是文件内容,变量是变量。两回事。
你的变量是 real A(1,12) 定义的。
这个 A变量的值,可以从文件 c.dat 中获取,也可以不从这里获取。
文件 c.dat 里的内容,可以存成一个变量(很长的字符串),也可以转换(读取)成12个单变量,也可以转换(读取)成3*4的数组,或者2*6的数组,或者一个5大小的数组+一个7大小的数组。
这是非常灵活的,取决于代码怎么写,你的逻辑需求是怎样的。
变量和文件内容,不是一回事。别混淆了。
③第12行‘//trim(adjustl(c))//’是什么意思呢?
// 用于拼接字符串。
adjustl 用于把字符串左对齐。
trim 用于把字符串后面多余的空格去掉。
C 字符串的值可能是 “   1  ”或别的。
必须先经过左对齐和去除多余的空格,否则拼接出来可能是:
E:\tempabaqus\    1    .DAT
或者
E:\tempabaqus\1    .DAT
而先 adjustl 然后 trim 之后,拼接的就是正确的
E:\tempabaqus\1.DAT

我自己创建了几个.DAT空文件,如何写入这些文件中呢?
文件不能再写入文件。不存在“文件中的文件”这种东西。
只有变量的值可以转换成(写入)文件的内容。

④第10行~11行,可以给一个注释吗?想了半天不太理解。。。外行
write(c,*) i
是把 i 这个整形变量,转换成(写入)字符串 c 的内容。
Open(99+i,FILE='E:\tempabaqus\'//trim(adjustl(c))//'.DAT')
这个是把字符串 'E:\tempabaqus\' 和 trim(adjustl(c)) 以及 '.DAT'
拼接成一个文件名(注意文件名是用字符串来表达的)
拼接成文件名之后,打开这个文件。
天之道,损有余而补不足

98

帖子

0

主题

0

精华

大师

F 币
658 元
贡献
293 点

规矩勋章元老勋章新人勋章

板凳
发表于 2019-9-18 11:02:52 | 显示全部楼层
为什么这样定义CHARACTER(LEN=16)::C呢?为什么要长度为16
因为整数要转换(写入)成字符串,32位整数最多可以有10位数。定义16长度是足够的。
当然你定义更长也可以,比如20,更短一些,比如13也可以。
对于字符串来说,不需要“恰好足够长”,一般会预留一些,不容易出错。

出错请给错误提示,否则别人只能爱莫能助。

Read是读取当前位置的内容。一般来说,打开一个文件,则刚开始的“位置”在文件的首部。
天之道,损有余而补不足

98

帖子

0

主题

0

精华

大师

F 币
658 元
贡献
293 点

规矩勋章元老勋章新人勋章

地板
发表于 2019-9-18 15:51:40 | 显示全部楼层
Abaqus不知道怎么用。
我自己单独运行,测试是没问题的。

[Fortran] 纯文本查看 复制代码
Program Main
  Implicit None
  real a
  character(len=16) :: c
  Integer :: i
  Open(17,FILE='E:\tempabaqus\C.DAT')
  Do i = 1 , 12
    READ(17,*) a
    write(c,*) i
    Open(18,FILE='E:\tempabaqus\'//trim(adjustl(c))//'.DAT')
    write(18,150) a
    Close(18)    
  End Do
150 FORMAT(F20.10,5X)
End Program Main
天之道,损有余而补不足
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-17 01:57

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表