Fortran Coder

查看: 32377|回复: 19
打印 上一主题 下一主题

[输入输出] 复数数据读取

[复制链接]

10

帖子

1

主题

0

精华

入门

F 币
66 元
贡献
38 点
跳转到指定楼层
楼主
发表于 2014-5-22 21:08:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[Fortran] 纯文本查看 复制代码
PROGRAM FMMM
 IMPLICIT NONE
 INTEGER I,J,K,ERROR,BBB,B,AA,BB
 REAL P0(360000),P1(360000),P2(360000),P3(360000),P4(360000),P5(360000),P6(360000),LEG0(5000,72),LEG1(5000,72),LEG2(5000,72),LEG3(5000,72),LEG4(5000,72),LEG5(5000,72),LEG6(5000,72)
 COMPLEX HANKEL0(5000),HANKEL1(5000),H(7,5000),HH(7,5000)
     OPEN(UNIT=30,FILE="HHKR_0.TXT")
     READ(30,*) HANKEL0
     OPEN(UNIT=66,FILE="P0.TXT")
     READ(66,*) P0
     OPEN(UNIT=68,FILE="P1.TXT")
     READ(68,*) P1
     OPEN(UNIT=70,FILE="P2.TXT")
     READ(70,*) P2
     OPEN(UNIT=72,FILE="P3.TXT")
     READ(72,*) P3
     OPEN(UNIT=76,FILE="P4.TXT")
     READ(76,*) P4
     OPEN(UNIT=78,FILE="P5.TXT")
     READ(78,*) P5
     OPEN(UNIT=82,FILE="P6.TXT")
     READ(82,*) P6
     DO AA=1,5000
       DO BB=1,72
           LEG0(AA,BB)=P0(BB+(AA-1)*72)
           LEG1(AA,BB)=P1(BB+(AA-1)*72)
           LEG2(AA,BB)=P2(BB+(AA-1)*72)
           LEG3(AA,BB)=P3(BB+(AA-1)*72)
           LEG4(AA,BB)=P4(BB+(AA-1)*72)
           LEG5(AA,BB)=P5(BB+(AA-1)*72)
           LEG6(AA,BB)=P6(BB+(AA-1)*72)
       ENDDO
     ENDDO  
     OPEN(UNIT=90,FILE="L6.TXT")
     WRITE(90,*) LEG6
 PAUSE  
 STOP   
 END



求助,之前同样做的文件数据较少时可以顺利执行。现在TXT文件有5000个复数数据就读不出来了~~
图片是文件的数据格式


1111.jpg (107.96 KB, 下载次数: 622)

HHKR_0

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

10

帖子

1

主题

0

精华

入门

F 币
66 元
贡献
38 点
沙发
 楼主| 发表于 2014-5-22 21:10:45 | 只看该作者
程序可以执行。就是在READ那里出现,断点,黑框闪退

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

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

板凳
发表于 2014-5-22 21:21:06 | 只看该作者
你需要使用格式读取 ,* 读取是肯定不行的。

我就不知道为啥你数据少的时候可以,我觉得1个数据你也读不出来。

10

帖子

1

主题

0

精华

入门

F 币
66 元
贡献
38 点
地板
 楼主| 发表于 2014-5-22 21:25:11 | 只看该作者
fcode 发表于 2014-5-22 21:21
你需要使用格式读取 ,* 读取是肯定不行的。

我就不知道为啥你数据少的时候可以,我觉得1个数据你也读不出 ...

我用   READ(30,"(F18.17,F18.17)") HANKEL   也不行啊

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

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

QQ
5#
发表于 2014-5-23 01:38:27 | 只看该作者
开颜儿 发表于 2014-5-22 21:25
我用   READ(30,"(F18.17,F18.17)") HANKEL   也不行啊

当然不行,你根本没考虑加减号问题。

即便是使用格式,也应该是
[Fortran] 纯文本查看 复制代码
real :: ra , rb
character(len=1) :: sign
read( 30 , "(f17.15,1x,a1,1x,f17.15)" ) ra , sign , rb
if(sign=='-') rb = 0 - rb
hankel = cmplx(ra,rb)

这样才对。如果你的数据里,实部是负数,你还需要结合实际情况进行考虑。

所以你的数据格式是很变态的。

另外,求助时,该截图,还是该复制粘贴,这很有技巧,要考虑回答人的感受。比如数据,你就应该复制粘贴,而不是截图。你知道其他人一个一个数数字的位数,多难受么?

更完善的读取方法请参考:
http://fcode.cn/bbs/thread-167-1-2.html

136

帖子

3

主题

0

精华

版主

F 币
1964 元
贡献
1677 点

帅哥勋章管理勋章爱心勋章新人勋章热心勋章元老勋章

6#
发表于 2014-5-23 14:16:07 | 只看该作者
你这hankel系数有点多吧,而且居然是复数?

10

帖子

1

主题

0

精华

入门

F 币
66 元
贡献
38 点
7#
 楼主| 发表于 2014-5-23 14:30:42 | 只看该作者
vvt 发表于 2014-5-23 01:38
当然不行,你根本没考虑加减号问题。

即便是使用格式,也应该是

谢谢啦~我试试 不好意思,第一次发帖不懂,见谅

10

帖子

1

主题

0

精华

入门

F 币
66 元
贡献
38 点
8#
 楼主| 发表于 2014-5-23 14:31:18 | 只看该作者
aliouying 发表于 2014-5-23 14:16
你这hankel系数有点多吧,而且居然是复数?

恩,5000个复数,我也在考虑是不是数据量太大

10

帖子

1

主题

0

精华

入门

F 币
66 元
贡献
38 点
9#
 楼主| 发表于 2014-5-23 14:35:22 | 只看该作者
vvt 发表于 2014-5-23 01:38
当然不行,你根本没考虑加减号问题。

即便是使用格式,也应该是

还想请教一下。实部有复数也得IF考虑一下符号吗

10

帖子

1

主题

0

精华

入门

F 币
66 元
贡献
38 点
10#
 楼主| 发表于 2014-5-23 15:39:40 | 只看该作者
vvt 发表于 2014-5-23 01:38
当然不行,你根本没考虑加减号问题。

即便是使用格式,也应该是

你好,我试了一下您帮助我的代码,但是只读进去第一行额,请问我是哪里还不对吗
+,-号问题可以这样吗read(30,"(a1,f17.15,1x,a1,1x,f17.15)" )sign1, ra , sign , rb
if(sign=='-') rb = 0 - rb
if(sign1=='-') ra = 0 - ra
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-23 12:25

Powered by Tencent X3.4

© 2013-2024 Tencent

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