24小时热门版块排行榜    

CyRhmU.jpeg
查看: 2154  |  回复: 24
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

Gina88

木虫 (正式写手)

[求助] FORTRAN中如何实现重复读取一行?

如题:fortran中如何实现重复读取一行啊?
第一次读取的时候是将其作为字符串读取的,进行统计,看看数据的个数,然后好定义数组的大小,
第二次读取的时候是将其作为数来读取的,并存入所定义的数组中。
先谢谢大侠了!
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
Gina88: 金币+5, ★★★★★最佳答案 2012-12-16 23:31:48
jjdg: 金币+1, 感谢参与 2012-12-17 02:25:06
查一下 Fortran 中有关“内部文件”的用法:

这里举一个小例子:
CODE:
program test
character(len = 27) :: a = '1.0 2.0 3.0 4.0 5.0 6.0 7.0'
real, dimension(7) :: b

read(a, *) b(1:7)
write(*,*) b

end program test

» 本帖已获得的红花(最新10朵)

2楼2012-12-16 22:40:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★
Gina88: 金币+5, 有帮助 2012-12-17 09:23:45
你上面的 call system 还是可以保留的
但在你打开或创建文件时,要加上路径,比如:
CODE:
open(unit=28,file="DOSCARsplit/DOSCAR",status="old")
open(unit=38,file="DOSCARsplit/DOS"//trim(adjustl(character))//".dat",status="replace")

试一下看看……
6楼2012-12-17 07:45:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★
Gina88: 金币+5, 有帮助 2012-12-17 11:00:12
你完整的程序是啥样子的?我在 windows 下写了一具小程测试了一下,似乎没有什么问题啊……
8楼2012-12-17 10:15:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★
Gina88: 金币+5, ★★★★★最佳答案 2012-12-18 08:47:13
引用回帖:
7楼: Originally posted by Gina88 at 2012-12-17 09:22:12
加路径试过了,还是不行。
主要问题是,一旦将call system部分注释去掉了。
编译的时候总是说定义或者宣称变量那部分不正确。

未命名.jpg
...

我按前面给你的提示测试了一下,没有问题,可以新建一个文件夹,把 DOSCAR 弄进去,在里面生成 33 个新文件……

当然,你的程序在我这里编译还是有一些问题的,比如 deallocate 语句要改成下面的样子:
CODE:
deallocate(energy)
deallocate(dos)

CALL SYSTEM 语句要放在变量声明语句之后,另外,
CODE:
!call system("cd DOSCARsplit/")
!ISTATUS=CHDIR(DOSCARsplit)

是不需要的。不能进入 DOSCARsplit 之后再执行程序,因为你的可执行文件在 DOSCARsplit 之外……
11楼2012-12-17 13:56:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

引用回帖:
13楼: Originally posted by Gina88 at 2012-12-18 09:51:35
哦,对了,还请教您一个问题。
就是有文件,假设该文件为aaa.bbb,也就是该文件的后缀名为bbb,并且bbb文件夹中只有这一个后缀名为bbb的文件。但是它前面aaa部分总是千变万化的。
所以对于程序来说,aaa是不知道 ...

这种事情还是别让 Fortran 去做了,如果一定要在 Fortran 中完成,就用 call system 这样的与系统相关的调用吧……
CODE:
call system('ls -1 *.bbb > filename')
open(unit = 15, file = 'filename', status = 'old')
read(15, '(a)') file_you_want
open(unit = 25, file = file_you_want, status = 'old')
read(25,....

哦,顺便问一下,system 这个是 Fortran 标准中的东西吗?感觉是编译器的扩展……

如果一定不用扩展,那就用脚本程序把相关的东西准备好,然后再调用 Fortran....

» 本帖已获得的红花(最新10朵)

14楼2012-12-18 10:26:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

引用回帖:
16楼: Originally posted by Gina88 at 2012-12-19 16:16:31
call system('ls -1 *.bbb > filename')
open(unit = 15, file = 'filename', status = 'old')
我用上面的命令了,还是不行啊。
谢谢了!...

不行是什么意思?没有生成 filename 这个文件,还是别的?有提示信息吗?
17楼2012-12-19 17:26:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

引用回帖:
18楼: Originally posted by Gina88 at 2012-12-20 10:10:59
可以生成filename文件,但是估计是打开filename文件的时候不能识别filename文件就是*.bbb文件。
现在我用以下的方法可以实现,就是比较麻烦,呵呵:)
   call system("basename *.bbb > filename" ...

不应该啊, 我这里的测试完全没有问题啊……
CODE:
program test

character(len = 80) :: file_you_want, line

call system('ls -1 *.bbb > filename')
open(unit = 15, file = 'filename', status = 'old')
read(15, '(a)') file_you_want
write(*, '(a)') file_you_want
open(unit = 25, file = file_you_want, status = 'old')
read(25,'(a)') line
write (*,'(a)') line

end program test

» 本帖已获得的红花(最新10朵)

19楼2012-12-20 13:56:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

引用回帖:
22楼: Originally posted by Gina88 at 2012-12-26 22:45:27
哎,问题终于找到了。
我定义了phase这个矩阵,但是这个矩阵有的时候要用到,有的时候用不到。
定了allocatable的phase矩阵后,还必须得allocate phase矩阵。
allocate phase矩阵后可以不用,但如果不用,就不能 ...

如果不能 deallocate 会有错误提示的。根据这个去修改应该不是很难。

不必客气,编程的进步很多时候就是从 debug 开始的。加油……
23楼2012-12-27 07:08:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

引用回帖:
24楼: Originally posted by Gina88 at 2012-12-27 10:06:45
呵呵,编译的时候没有任何错误。
可是运行的时候总有fault的提示,但是并不指明是哪行。
然后我用您以前教我的
write(*,*)一步一步的去试的。
最后试出来上面的错误。
前面进行了好多这样的试,但是找不到 ...

你所提及的问题的确只是在运行时才会出现。

如果你会用一些 debugger 的话,会方便一些,呵呵……

是的, 调试程序比写程序还累人……
25楼2012-12-27 13:38:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 Gina88 的主题更新
信息提示
请填处理意见