Fortran Coder

查看: 20838|回复: 12
打印 上一主题 下一主题

[文件读写] 从N个txt文件中读取相同的一列组成数组用于计算!!

[复制链接]

12

帖子

3

主题

0

精华

入门

F 币
73 元
贡献
48 点
跳转到指定楼层
楼主
发表于 2017-2-23 17:15:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
大侠们,新手又来求助了!!!!本人迷迷糊糊写了几行代码。写到后面自己也有点思维混乱了。所以抛出问题,贴出代码希望获得帮助!

!!!!!!!!补充问题,还有一个问题自己完全无能为力了。如何可以从这么多文件中,按照年月日提取我想要的文件,然后再提取所需要的数据列进行计算呢???

已将n个txt文件名循环存入一个path.txt文件中。

!!!接下来是利用path.txt中的文件名循环打开这些文件(每一个文件都有多列),并且读出其中的某一列数据,再将这些提取出来的列数据组成一个新的数组写入新的文件用于计算使用。
代码行=================
[Fortran] 纯文本查看 复制代码
program test12   
implicit none

   integer,parameter :: irow = 100   !给一个文件可能的最大数量
   integer,parameter :: iline = 60   !行数
   real,dimension(iline,irow) :: a   !定义一个二维数组用于存放提取的所有数据
   character,dimension(irow) :: b    !定义一个一维数组用于存放名字

   logical :: exceed = .false.

   character(len = 20) :: filename
   integer :: i,j,k
   character :: name
   integer :: nvals = 0
   integer :: status
   integer :: num = 100
   integer :: height
   real :: windspeed1


!!!打开存放文件名的path.txt文件
   open(unit=11,file='path.txt',status='old',action='read',IOSTAT=status)

   if(status /= 0)then

   !!!逐行读取文件名,并保存在数组b中
    do
          read(11,*,iostat=status) name
          
          if(status /=0)EXIT
      nvals = nvals +1
           size:if(nvals<=irow)then
           b(nvals) = name

           else 
        exceed = .true.
           end if size
        end do

    !!!读取数据
        do i=1,nvals
          !根据b(i)的文件名循环打开数据文件
          open(num,file = 'b(i)',status='old',action='read',IOSTAT=status)
                if(status /= 0 )EXIT

         !将前三行说明文件读空
                 do j=1,3
                   read(unit=num,*)
         end do
                
             !读取所要的数据
         do k=1,iline
                   read(2,*) a(k,i)   !2是想要提取的数据列数
                   if(status/=0)EXIT
                 end do

                 if(i>nvals)exit

     end do 

  !!!新建一个文件,将读出的数组写入其中保存用于计算
  open(unit=12,file='windspeed.txt',status='new')

   read(*,*)a

stop
end

!!!!!测试中遇到了一些问题无能为例,截图求助


最后我截图了代码,方便大侠们帮我看





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

12

帖子

3

主题

0

精华

入门

F 币
73 元
贡献
48 点
沙发
 楼主| 发表于 2017-2-23 17:16:09 | 只看该作者
小女在代码上面严重感觉智商不足!希望不要被鄙视~~~

796

帖子

2

主题

0

精华

大宗师

F 币
3787 元
贡献
2266 点
板凳
发表于 2017-2-23 17:48:07 | 只看该作者
你可以看看这两个文件。

QQ截图20170223174744.png (110.22 KB, 下载次数: 371)

QQ截图20170223174744.png

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
地板
发表于 2017-2-23 18:46:05 | 只看该作者
非常好,请 win7 用户摒弃 CVF
详见 http://cvfwin7.w.fcode.cn

1958

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1339 元
贡献
565 点

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

5#
发表于 2017-2-23 18:51:37 | 只看该作者
read(unit=num,*)
改为
read( num , * )

read( unit=num , format = * )
其他错误见下面的代码,以 !// 为注释
[Fortran] 纯文本查看 复制代码
program test12
  implicit none
  integer,parameter :: irow = 100   !给一个文件可能的最大数量
  integer,parameter :: iline = 60   !行数
  real,dimension(iline,irow) :: a   !定义一个二维数组用于存放提取的所有数据
  character,dimension(irow) :: b    !定义一个一维数组用于存放名字
  logical :: exceed = .false.
  character(len = 20) :: filename
  integer :: i,j,k
  character :: name
  integer :: nvals = 0
  integer :: status
  integer :: num = 100
  integer :: height
  real :: windspeed1
  !!!打开存放文件名的path.txt文件
  open(unit=11,file='path.txt',status='old',action='read',IOSTAT=status)
  if(status /= 0) stop  !// 此行直接改成如果出错,则 stop
  !!!逐行读取文件名,并保存在数组b中
  do
    read(11,*,iostat=status) name
    if(status /=0)EXIT
    nvals = nvals +1
    if(nvals<=irow)then
      b(nvals) = name
    else
      exceed = .true.
    end if
  end do
  !!!读取数据
  do i=1,nvals
    !根据b(i)的文件名循环打开数据文件
    open(num,file = b(i),status='old',action='read',IOSTAT=status) !//此处b(i)不应该带引号
    if(status /= 0 ) cycle !//此处可以用 cycle,第i个文件有错,还可以读第i+1个
    !将前三行说明文件读空
    do j=1,3
      read(num,*) !//此处去掉 unit=
    end do
    !读取所要的数据
    do k=1,iline
      read(2,*) a(k,i)   !2是想要提取的数据列数
      if(status/=0)EXIT
    end do
    if(i>nvals)exit
  end do
  !!!新建一个文件,将读出的数组写入其中保存用于计算
  open(unit=12,file='windspeed.txt',status='new')
  write(*,*)a !//此处应该是 write
  stop
end

12

帖子

3

主题

0

精华

入门

F 币
73 元
贡献
48 点
6#
 楼主| 发表于 2017-2-24 09:16:03 | 只看该作者
li913 发表于 2017-2-23 17:48
你可以看看这两个文件。

感谢感谢~但是,我应该从哪里找这两个文件啊?貌似这是个群对吗?我好像下载不了我不在群里

12

帖子

3

主题

0

精华

入门

F 币
73 元
贡献
48 点
7#
 楼主| 发表于 2017-2-24 09:17:09 | 只看该作者
vvt 发表于 2017-2-23 18:46
非常好,请 win7 用户摒弃 CVF
详见 http://cvfwin7.w.fcode.cn

谢谢!其实我也想换一个编译器,但是一直都拖着没有做~谢谢你的推荐~我准备换一个了~

12

帖子

3

主题

0

精华

入门

F 币
73 元
贡献
48 点
8#
 楼主| 发表于 2017-2-24 09:18:34 | 只看该作者
fcode 发表于 2017-2-23 18:51
read(unit=num,*)
改为
read( num , * )

你总是给与我很直接的帮助!!!

12

帖子

3

主题

0

精华

入门

F 币
73 元
贡献
48 点
9#
 楼主| 发表于 2017-2-24 10:34:33 | 只看该作者
fcode 发表于 2017-2-23 18:51
read(unit=num,*)
改为
read( num , * )

您好,首先,我根据上面大侠的建议,更换了编译器~然后根据您的建议修改了程序。但是现在出现了19个错误,貌似还不是编译错误,但是我有点搞不明白这个意思是什么~您能在帮我解答一下吗》

1958

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1339 元
贡献
565 点

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

10#
发表于 2017-2-24 12:38:41 | 只看该作者
确保您的 Code::blocks 是包含了 gfortran 编译器的。

然后按照这个操作:



您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-4-19 19:11

Powered by Tencent X3.4

© 2013-2024 Tencent

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