Fortran Coder

查看: 60|回复: 12

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

[复制链接]

7

帖子

1

主题

0

精华

入门

F 币
42 元
贡献
21 点
发表于 2020-3-24 15:52:43 | 显示全部楼层 |阅读模式
本帖最后由 daydaycode 于 2020-3-24 17:22 编辑

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

数据结构类型

数据结构类型

报错情况

报错情况

读取每行数据

读取每行数据

读取每行数据

读取每行数据

缺失处截图

缺失处截图
回复

使用道具 举报

477

帖子

1

主题

0

精华

大宗师

F 币
2416 元
贡献
1550 点
发表于 2020-3-24 16:07:46 | 显示全部楼层
本帖最后由 kyra 于 2020-3-24 17:19 编辑

把你的数据上传,只需要57418行前后几行的数据就行。

[Fortran] 纯文本查看 复制代码
DO i = 1,row
if(i<57418) then
READ(3,*) data_read(i,:)
else
READ(3,*) data_read(i,7:)
end if
END DO

7

帖子

1

主题

0

精华

入门

F 币
42 元
贡献
21 点
 楼主| 发表于 2020-3-24 16:19:00 | 显示全部楼层
li913 发表于 2020-3-24 16:07
把你的数据上传,只需要57418行前后几行的数据就行。

DO i = 1,row

您好,数据已上传,麻烦给看一下

7

帖子

1

主题

0

精华

入门

F 币
42 元
贡献
21 点
 楼主| 发表于 2020-3-24 16:38:42 | 显示全部楼层
li913 发表于 2020-3-24 16:07
把你的数据上传,只需要57418行前后几行的数据就行。

DO i = 1,row

按照您的代码修改,还是不行,我用论坛读取非固定格式每行的数据数那个程序,发现我的数据第一行只有184个数据,还有的行没有211个数据,只有210个,像这种情况该怎么处理呢。

778

帖子

0

主题

0

精华

宗师

F 币
1080 元
贡献
599 点

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

QQ
发表于 2020-3-24 17:15:00 | 显示全部楼层
你首先需要找到一个规则。再什么情况下,你认为第一列是缺失的,什么情况下你认为是第二列缺失的?

比如:
姓名   年龄  体重
张三   30    55.3
李四      40
你如何判断第二行的40,是年龄还是体重?

7

帖子

1

主题

0

精华

入门

F 币
42 元
贡献
21 点
 楼主| 发表于 2020-3-24 17:21:55 | 显示全部楼层
vvt 发表于 2020-3-24 17:15
你首先需要找到一个规则。再什么情况下,你认为第一列是缺失的,什么情况下你认为是第二列缺失的?

比如: ...

这个要怎么来定呢,我也不能确定它是哪一列会有缺失,我上传了有缺失的地方截图,你可以看下。

778

帖子

0

主题

0

精华

宗师

F 币
1080 元
贡献
599 点

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

QQ
发表于 2020-3-24 17:24:02 | 显示全部楼层
我既然回复你的帖子,肯定都认真看过你提供的所有内容了。

我没有办法判断,因为你不管说 40 是年龄,还是体重,都是不违背任何规则的。

你是问题的提出者,应该你来确定问题的规则。然后根据问题的规则来书写合适的代码。

778

帖子

0

主题

0

精华

宗师

F 币
1080 元
贡献
599 点

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

QQ
发表于 2020-3-24 17:25:57 | 显示全部楼层
你可以看看你的数据是如何得来的,是否可以转存为其他数据格式?比如 csv,用逗号间隔开。

比如
姓名  , 年龄 , 体重
张三  , 30 ,   55.3
李四   ,,   40

因为第3行有两个逗号,我可以认定,40应该是体重,而年龄缺失。

477

帖子

1

主题

0

精华

大宗师

F 币
2416 元
贡献
1550 点
发表于 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

7

帖子

1

主题

0

精华

入门

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

十分感谢,现在问题解决了。请问,像这种情况只能把txt转成csv吗,还有别的方法吗?
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|群聊|Fcode

GMT+8, 2020-4-4 22:32

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

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