Fortran Coder

查看: 28783|回复: 16
打印 上一主题 下一主题

[文件读写] fortran读取有缺失的数据问题

[复制链接]

14

帖子

2

主题

0

精华

入门

F 币
97 元
贡献
49 点
跳转到指定楼层
楼主
发表于 2020-3-24 15:52:43 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 daydaycode 于 2020-3-24 17:22 编辑

data.txt (12.64 KB, 下载次数: 3)

fortran小白请教下fortran处理txt文件问题。需要处理的数据为地面自动站气象数据,数据包含的数据类型主要有字符串和浮点及整数等类型格式,数据为62247*212的矩阵,但是在57418行到最后的前6列都没有值,这样在数据读取的时候就会提示读取文件末尾报错,请问想正确读入这类型的数据,该怎么编写fortran代码。自己参考别人的代码,写的fortran程序,不能处理以上的问题,代码及数据和报错信息如下,还请各位前辈指教下怎么修改
[Fortran] 纯文本查看 复制代码
PROGRAM predeal_dimianzidong
IMPLICIT NONE

INTEGER                                ::i,j                !读取数据的行数
INTEGER, PARAMETER      ::row=62247,col=212
CHARACTER,DIMENSION(row,col)     ::data_read,data_1

OPEN(UNIT=3, FILE='SURF_CHN_MUL_HOR_2019080100.txt', STATUS='OLD',ACTION='READ',FORM='FORMATTED',ACCESS='sequential')        !打开文件
!READ(3,*) ((data_read(i,j),j=1,col),i=1,row)
DO i = 1,row
READ(3,*)(data_read(i,j),j=1,col)
END DO
!data_1 = transpose(data_read) 
print*,SHAPE(data_read)
!PRINT*,data_1
CLOSE(UNIT=3)        !关闭文件
STOP
END PROGRAM predeal_dimianzidong


截图.png (118.2 KB, 下载次数: 447)

数据结构类型

数据结构类型

2.png (25.6 KB, 下载次数: 430)

报错情况

报错情况

4.png (59.44 KB, 下载次数: 456)

读取每行数据

读取每行数据

3.png (36.77 KB, 下载次数: 468)

读取每行数据

读取每行数据

微信截图_20200324172002.png (87.63 KB, 下载次数: 418)

缺失处截图

缺失处截图
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

14

帖子

1

主题

0

精华

入门

Gone with the wind~

F 币
66 元
贡献
31 点

规矩勋章

17#
发表于 2022-4-22 08:18:03 | 只看该作者
Rookie 发表于 2022-4-22 08:11
好的。关于字符串的缺失,我的电脑直接输出空白。所以我在派生数据的声明阶段,直接初始化了。
PS.我所编 ...

刚刚发现是txt文档数据结尾有两个空白行,才会导致iostat仍为0.

14

帖子

1

主题

0

精华

入门

Gone with the wind~

F 币
66 元
贡献
31 点

规矩勋章

16#
发表于 2022-4-22 08:11:23 | 只看该作者
fcode 发表于 2022-4-20 17:14
没有统一规则。看具体“保存该文件的程序”的策略。

好的。关于字符串的缺失,我的电脑直接输出空白。所以我在派生数据的声明阶段,直接初始化了。
PS.我所编译的程序,在读取外部文件的TXT文件时候,到达文档结尾的时候,IOSTAT仍为0.不知道前辈们有没有遇到过类似的情况?

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

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

15#
发表于 2022-4-20 17:14:41 | 只看该作者
Rookie 发表于 2022-4-20 14:54
请问这种缺失的数据,读取的时候会保存为什么?

没有统一规则。看具体“保存该文件的程序”的策略。

14

帖子

1

主题

0

精华

入门

Gone with the wind~

F 币
66 元
贡献
31 点

规矩勋章

14#
发表于 2022-4-20 14:54:14 | 只看该作者
vvt 发表于 2020-3-24 17:25
你可以看看你的数据是如何得来的,是否可以转存为其他数据格式?比如 csv,用逗号间隔开。

比如

请问这种缺失的数据,读取的时候会保存为什么?

14

帖子

2

主题

0

精华

入门

F 币
97 元
贡献
49 点
13#
 楼主| 发表于 2020-3-26 10:42:14 | 只看该作者
li913 发表于 2020-3-25 17:50
有的,更麻烦。读取整行,以tab为分隔符,将一行分为多个记录,存入数组。 ...

好的,多谢。

798

帖子

2

主题

0

精华

大宗师

F 币
3793 元
贡献
2268 点
12#
发表于 2020-3-25 17:50:42 | 只看该作者
daydaycode 发表于 2020-3-25 13:47
十分感谢,现在问题解决了。请问,像这种情况只能把txt转成csv吗,还有别的方法吗? ...

有的,更麻烦。读取整行,以tab为分隔符,将一行分为多个记录,存入数组。

14

帖子

2

主题

0

精华

入门

F 币
97 元
贡献
49 点
11#
 楼主| 发表于 2020-3-25 14:24:15 | 只看该作者
vvt 发表于 2020-3-24 17:25
你可以看看你的数据是如何得来的,是否可以转存为其他数据格式?比如 csv,用逗号间隔开。

比如

好的,多谢。

14

帖子

2

主题

0

精华

入门

F 币
97 元
贡献
49 点
10#
 楼主| 发表于 2020-3-25 13:47:33 | 只看该作者
li913 发表于 2020-3-25 10:56
看起来你的文件中数据是以tab分隔的,你可以用excel打开数据,检查一下是否有误,然后另存为csv格式。读取c ...

十分感谢,现在问题解决了。请问,像这种情况只能把txt转成csv吗,还有别的方法吗?

798

帖子

2

主题

0

精华

大宗师

F 币
3793 元
贡献
2268 点
9#
发表于 2020-3-25 10:56:04 | 只看该作者
看起来你的文件中数据是以tab分隔的,你可以用excel打开数据,检查一下是否有误,然后另存为csv格式。读取csv格式就方便了。
[Fortran] 纯文本查看 复制代码
program test
  implicit none
  integer i
  INTEGER, PARAMETER      ::row=11,col=212
  character(40) dat(col-6, row)
  dat = 'undefined'
  open(10,file='1.csv')
  read(10,*)
  do i = 1, row
    read(10,*) dat(:,i)
  end do
  close(10)
end program
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-6 03:41

Powered by Tencent X3.4

© 2013-2024 Tencent

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