Fortran Coder

查看: 11372|回复: 9
打印 上一主题 下一主题

[文件读写] 新人求助,想去除一个文件中负数

[复制链接]

10

帖子

2

主题

0

精华

入门

F 币
60 元
贡献
35 点
跳转到指定楼层
楼主
发表于 2016-10-11 15:48:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
应该很简单的问题。搞了一整天才搞定怎么读取、写入。文件如果水深为负数则整行去除,不知到怎么改
怎么改if a(:,i)能表示在TXT中得位置呢
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

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

QQ
沙发
发表于 2016-10-11 16:37:24 来自移动端 | 只看该作者
文件什么样子?

10

帖子

2

主题

0

精华

入门

F 币
60 元
贡献
35 点
板凳
 楼主| 发表于 2016-10-11 16:42:37 | 只看该作者
我发来。处理一半的程序和文件

tx1.txt

65.93 KB, 下载次数: 5

10

帖子

2

主题

0

精华

入门

F 币
60 元
贡献
35 点
地板
 楼主| 发表于 2016-10-11 16:43:01 | 只看该作者
[Fortran] 纯文本查看 复制代码
Program main
  Use DFile_Mod
  Implicit None
  Real , allocatable :: a(:,:)
  Character(len=512) :: cStr
  Real    :: r  
  integer :: FILE_IN , i , nRow , nCol
  Open( NewUnit = FILE_IN , File = "text.asc" )
  nRow = GetFileN( FILE_IN ) - 2 !//获得文件行数 
  Read( FILE_IN , * ) !//跳过第一行
  Read( FILE_IN , '(a512)' ) cStr!//读取第三行
  nCol = GetDataN( cStr ) - 8 !//获得第三行有多少列
  write( *, '("Row:",g0," Col: ",g0)' ) nRow , nCol
  Allocate( a( nCol , nRow ) )
  Backspace( FILE_IN ) !//退回到第三行
   open( 11 , file ="tx1.txt")
    write( 11 , * )"  depth          temp          sal           turb  "
  Do i = 1 , nRow
    Read( FILE_IN , * ) r ,r, r, r, a( : , i )
    write( 11 , * ) a(:,i)
  End Do
  Deallocate( a )
  Close( FILE_IN )
End Program main

10

帖子

2

主题

0

精华

入门

F 币
60 元
贡献
35 点
5#
 楼主| 发表于 2016-10-11 16:43:26 | 只看该作者
上面有模版,不过没粘贴

10

帖子

2

主题

0

精华

入门

F 币
60 元
贡献
35 点
6#
 楼主| 发表于 2016-10-11 16:44:06 | 只看该作者
想把所有水深是负的行都去掉,因为是误差值

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1642 元
贡献
709 点

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

7#
发表于 2016-10-11 17:06:59 | 只看该作者
text.asc 是什么样子?

10

帖子

2

主题

0

精华

入门

F 币
60 元
贡献
35 点
8#
 楼主| 发表于 2016-10-11 17:22:24 | 只看该作者
原始文档就是这个。网站不让传ASC,我复制到TXT了。没啥区别

数据.txt

85.87 KB, 下载次数: 5

评分

参与人数 1F 币 +1 收起 理由
fcode + 1 可以压缩成zip上传

查看全部评分

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1642 元
贡献
709 点

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

9#
发表于 2016-10-11 19:29:53 | 只看该作者
只是筛选数据的话,就简单了。

[Fortran] 纯文本查看 复制代码
Program www_fcode_cn
  implicit none
  character(len=512) :: c
  character(len=1)   :: s
  integer :: FILE_IN , FILE_OUT , k , i
  real    :: DepSM
  Open( NewUnit = FILE_IN , File = "text.asc" )
  Open( NewUnit = FILE_OUT, File = "text.txt" )
  Read( FILE_IN , 100 ) c
  Write( FILE_OUT , 99 ) trim(c)
  Do
    Read( FILE_IN , 100 , ioStat = k ) c
    if ( k /= 0 ) exit
    Read( c , * ) i , i , i , s , DepSM
    If ( DepSM > 0.0 ) then
      Write( FILE_OUT , 99 ) trim(c)
    End If
  End Do
  Close( FILE_IN )
  Close( FILE_OUT )
100 format(a512)
99  format(a)
End Program www_fcode_cn

10

帖子

2

主题

0

精华

入门

F 币
60 元
贡献
35 点
10#
 楼主| 发表于 2016-10-12 08:41:11 | 只看该作者
厉害了,我得哥。有效果诶。。 不过程序没看明白,我好好研究一下。昨天九点多走的时候没发现有回复啊,奇怪。Ths!

评分

参与人数 1F 币 +1 收起 理由
fcode + 1 看不懂的可以再提问

查看全部评分

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

本版积分规则

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

GMT+8, 2024-12-26 08:35

Powered by Tencent X3.4

© 2013-2024 Tencent

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