爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 31333|回复: 29

[求助] 撒钱求助:fortran内部文件报错file internal list-directed read

[复制链接]

新浪微博达人勋

发表于 2019-1-2 08:56:03 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 咕噜 于 2019-1-2 09:13 编辑

在网上找到一个如何读取时间带/和:格式的程序,照着写但是出错了,撒钱求助~我的数据长这样,往下一共535条数据:
图片1.png

网上找的例子如下:
作者的思路是这样
1、将整行信息读入字符串
2、将字符串中的横杠、斜杠和冒号替换为空格
3、使用内部文件读写,从字符窜读取信息。 图片2.png
然后我照着写了,代码如下:
open(3,file='D:\power\power18\data\201812ningbing2\data\450325001_20181230175500046.csv',status='old')
open(4,file='D:\power\power18\data\201812ningbing2\Y02.txt')
     read(3,*)
     read(3,'(a5,a5,a4)') c1,c2,c3
        do i=1,n
        read(3,'(a)') str
        do j=1,len_trim(str)
         if(index('/:',str(j:j))>0) str(j:j)=' '
        enddo
        read(str,*) num(i),YY(i),MM(i),DD(i),h(i),m(i),p2(i),p3(i),p4(i),p5(i)
        write(4,'(i4,1x,i4,4(1x,i2),1x,f5.2,2(1x,f7.2),1x,f5.2)') num(i),YY(i),MM(i),DD(i),h(i),m(i),p2(i),p3(i),p4(i),p5(i)
        enddo

前天刚写完还能运行出来,非常开心地改了改程序想弄成批量读取文件,然后开始报错,显示的是内部文件的问题,因为没用过内部文件,不太清楚哪里出问题了,现在凭记忆退回原来的程序也还是内部文件有问题
图片3.png
撒钱求助大家帮看看,谢谢啦!!


密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-1-2 09:28:43 | 显示全部楼层

回帖奖励 +10 金钱

不太清楚,可以一行一行的调试下看看
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-1-2 12:11:52 | 显示全部楼层

回帖奖励 +10 金钱

不太清楚,可以一行一行的调试下看看
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-1-2 12:47:51 | 显示全部楼层

回帖奖励 +10 金钱

纯属猜测:
楼主的文件3是csv (comma-separated values)格式的, 有可能里面有逗号吗?
如果有, 可能吧'/:' 改成'/:,' , 把逗号也换成空格吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-1-2 14:39:11 | 显示全部楼层

回帖奖励 +10 金钱

你没有把程序全部贴出来,你的定义部分呢?类似这些num(i),YY(i),MM(i)你是定义的可变数组吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-1-2 14:46:42 | 显示全部楼层

回帖奖励 +10 金钱

packard 发表于 2019-1-2 12:47
纯属猜测:
楼主的文件3是csv (comma-separated values)格式的, 有可能里面有逗号吗?
如果有, 可能吧'/:'  ...

还有一点,你在excel表里面看的格式是这个样子,去记事本里面看看,感觉应该也不一样,我觉得你这么做不如读一行为一个字符串,然后判断他的长度(过滤序号和小时不同带来的误差),然后将固定字符替换
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-1-2 15:05:31 | 显示全部楼层
本帖最后由 咕噜 于 2019-1-2 15:06 编辑
packard 发表于 2019-1-2 12:47
纯属猜测:
楼主的文件3是csv (comma-separated values)格式的, 有可能里面有逗号吗?
如果有, 可能吧'/:'  ...

朋友真的如你所说,我把读进去的字符串print出来,时间的连接符由/变成短连接符-了,也用逗号间隔,然后还出现了在csv文件里没见到的数据:秒,,然后现在改成'/:-,'可以运行出来了,不过我最后一列有正有负,最后一列的负号运行出来也被替换成空格了,负值变正值,苦恼,非常感谢给出了思路~~~~


print*,str输出来是这样,最后是气温有正有负,我再思考一下怎么解决:

154,2018-12-28 01:30:00,16.75,1488.67,1563.27,0.11
155,2018-12-28 01:40:00,17.38,1483.83,1558.05,0.07
156,2018-12-28 01:50:00,18.15,1469.73,1553.95,-0.04
157,2018-12-28 02:00:00,16.68,1471.09,1561.39,-0.06
158,2018-12-28 02:10:00,16.56,1405.13,1561.46,-0.09


密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-1-2 15:23:42 | 显示全部楼层
爱到花开 发表于 2019-1-2 14:46
还有一点,你在excel表里面看的格式是这个样子,去记事本里面看看,感觉应该也不一样,我觉得你这么做不 ...

嗯嗯,发现问题啦,果然在记事本里看就不一样了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-1-2 15:59:31 | 显示全部楼层
咕噜 发表于 2019-1-2 15:23
嗯嗯,发现问题啦,果然在记事本里看就不一样了

对,你就按我说的,把一行当一个字符串,获得它的长度,用以判断有没有正负号,或者第一行数是几位的,然后进行判断,把第几个字符替换成空字符
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-1-4 17:43:10 | 显示全部楼层

回帖奖励 +10 金钱

谢谢楼主散钱{:5_235:}
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

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