Fortran Coder

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

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

[复制链接]

12

帖子

3

主题

0

精华

入门

F 币
51 元
贡献
25 点
跳转到指定楼层
楼主
发表于 2022-9-19 16:38:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目的:把一个叫poro的文件的数据读按顺序读取出来成一维,以后就可以直接用poro(i)来表示第i个数据
问题:写完了运行后没看见数据,是空的。求指导
[Fortran] 纯文本查看 复制代码
program shujv1
    implicit none
   integer::NxD,NyD,NzD  
   integer,allocatable::poro(:)                    

   ! Local Variables
   integer::i,j,k,l         ! Counter
   integer::stat
   character::line*160
   character::key*12
    NxD=20
   NyD=30
   NzD=1
!allocate(poro(NxD*NyD*NzD))
   ! Execution Part
k=0
open(unit=4,file='.\shujv2\poro.dat',iostat=stat)
if(stat==0)then
do
  read(4,'(a)',iostat=stat)line
        ! if (stat/=0)exit
         if ((line(1:2)/='--').and.(line/=' ').and.(line(1:6)/='poro'))then

k=k+1
end if
end do

!rewind(4)
allocate(poro(k))

!  if(stat==0)
    do i=1,k

     read(4,*)poro(i)

   end do

! end if

  do i=1,k

write(*,*)poro(i)

end do
endif
end program


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

2015

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1572 元
贡献
676 点

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

沙发
发表于 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有问题吗

2015

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1572 元
贡献
676 点

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

地板
发表于 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] 纯文本查看 复制代码
open(unit=4,file='.\poro.dat')

allocate(poro(NxD*NyD))
  read(4,*)line

 if ((line(1:2)/='/').and.(line/=' ').and.(line(1:6)/='poro'))then
     k=k+1
    
     read(4,*)poro
     
 end if
     close(4)
     write(*,*)line
     write(*,*)poro
     end

3

帖子

0

主题

0

精华

宗师

F 币
1089 元
贡献
1002 点
7#
发表于 2022-9-20 11:59:54 | 只看该作者
[Fortran] 纯文本查看 复制代码
program shujv1
  implicit none
  real,allocatable::poro(:)
  integer::k,stat
  character(len=160) :: line
  open(unit=4,file='.\poro.dat',iostat=stat)
  if(stat/=0) stop
  k=0
  Do
    read(4,'(a)',iostat=stat) line
    if (stat/=0)exit
    if ((line(1:2)/='--').and.(line/=' ').and.(line(1:6)/='poro')) k=k+1
  End Do
  allocate(poro(k))
  rewind(4)
  k = 0
  Do
    read(4,'(a)',iostat=stat) line
    if (stat/=0)exit
    if ((line(1:2)/='--').and.(line/=' ').and.(line(1:6)/='poro')) then
      k = k + 1
      read(line,*,iostat=stat) poro(k)
    end if
  End Do
  write(*,'(f10.4)') poro
end 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, 2024-11-1 06:51

Powered by Tencent X3.4

© 2013-2024 Tencent

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