Fortran Coder

查看: 2976|回复: 7
打印 上一主题 下一主题

[文件读写] 文件数据读写

[复制链接]

12

帖子

3

主题

0

精华

入门

F 币
51 元
贡献
25 点
跳转到指定楼层
楼主
发表于 2022-9-19 16:38:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目的:把一个叫poro的文件的数据读按顺序读取出来成一维,以后就可以直接用poro(i)来表示第i个数据
问题:写完了运行后没看见数据,是空的。求指导
[Fortran] 纯文本查看 复制代码
01program shujv1
02    implicit none
03   integer::NxD,NyD,NzD 
04   integer,allocatable::poro(:)                   
05 
06   ! Local Variables
07   integer::i,j,k,l         ! Counter
08   integer::stat
09   character::line*160
10   character::key*12
11    NxD=20
12   NyD=30
13   NzD=1
14!allocate(poro(NxD*NyD*NzD))
15   ! Execution Part
16k=0
17open(unit=4,file='.\shujv2\poro.dat',iostat=stat)
18if(stat==0)then
19do
20  read(4,'(a)',iostat=stat)line
21        ! if (stat/=0)exit
22         if ((line(1:2)/='--').and.(line/=' ').and.(line(1:6)/='poro'))then
23 
24k=k+1
25end if
26end do
27 
28!rewind(4)
29allocate(poro(k))
30 
31!  if(stat==0)
32    do i=1,k
33 
34     read(4,*)poro(i)
35 
36   end do
37 
38! end if
39 
40  do i=1,k
41 
42write(*,*)poro(i)
43 
44end do
45endif
46end program


分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

2038

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1676 元
贡献
715 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2022-9-19 17:32:46 | 只看该作者
取消 if (stat/=0)exit 和 rewind(4) 的注释

12

帖子

3

主题

0

精华

入门

F 币
51 元
贡献
25 点
板凳
 楼主| 发表于 2022-9-20 08:57:31 | 只看该作者
fcode 发表于 2022-9-19 17:32
取消 if (stat/=0)exit 和 rewind(4) 的注释

还是不太行,而且我发现我的k的值一直没变,是我的do有问题吗

2038

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1676 元
贡献
715 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

地板
发表于 2022-9-20 09:00:57 | 只看该作者
给出你要读取的文件(或部分内容)

12

帖子

3

主题

0

精华

入门

F 币
51 元
贡献
25 点
5#
 楼主| 发表于 2022-9-20 09:05:49 | 只看该作者
fcode 发表于 2022-9-20 09:00
给出你要读取的文件(或部分内容)

文件是dat格式的

poro
0.203
0.191
0.194
0.256
0.231
0.227
0.285
0.249
0.195
0.159
0.148
0.193
0.200
0.244
0.240
0.222
0.223
0.240

12

帖子

3

主题

0

精华

入门

F 币
51 元
贡献
25 点
6#
 楼主| 发表于 2022-9-20 10:28:02 | 只看该作者
我试着改简单一点,现在有数据了,但是得出的是一个-842150451*600和文件中的完全不一样
[Fortran] 纯文本查看 复制代码
01open(unit=4,file='.\poro.dat')
02 
03allocate(poro(NxD*NyD))
04  read(4,*)line
05 
06 if ((line(1:2)/='/').and.(line/=' ').and.(line(1:6)/='poro'))then
07     k=k+1
08     
09     read(4,*)poro
10      
11 end if
12     close(4)
13     write(*,*)line
14     write(*,*)poro
15     end

3

帖子

0

主题

0

精华

宗师

F 币
1089 元
贡献
1002 点
7#
发表于 2022-9-20 11:59:54 | 只看该作者
[Fortran] 纯文本查看 复制代码
01program shujv1
02  implicit none
03  real,allocatable::poro(:)
04  integer::k,stat
05  character(len=160) :: line
06  open(unit=4,file='.\poro.dat',iostat=stat)
07  if(stat/=0) stop
08  k=0
09  Do
10    read(4,'(a)',iostat=stat) line
11    if (stat/=0)exit
12    if ((line(1:2)/='--').and.(line/=' ').and.(line(1:6)/='poro')) k=k+1
13  End Do
14  allocate(poro(k))
15  rewind(4)
16  k = 0
17  Do
18    read(4,'(a)',iostat=stat) line
19    if (stat/=0)exit
20    if ((line(1:2)/='--').and.(line/=' ').and.(line(1:6)/='poro')) then
21      k = k + 1
22      read(line,*,iostat=stat) poro(k)
23    end if
24  End Do
25  write(*,'(f10.4)') poro
26end program shujv1

12

帖子

3

主题

0

精华

入门

F 币
51 元
贡献
25 点
8#
 楼主| 发表于 2022-9-20 15:08:38 | 只看该作者
伊芸贾 发表于 2022-9-20 11:59
[mw_shl_code=fortran,true]program shujv1
  implicit none
  real,allocatable::poro(:)

感谢大佬,可以了我改了一天,谢谢谢谢
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2025-4-29 02:03

Powered by Discuz! X3.4

© 2013-2025 Comsenz Inc.

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